From dff64d2eade809972ff0f8186d0578f1653af473 Mon Sep 17 00:00:00 2001 From: Mantas Masalskis Date: Thu, 25 Apr 2024 13:04:53 +0200 Subject: [PATCH] Fixes #5115 - ".value" in text modules for external data sources breaks ticket zoom --- .../javascripts/app/lib/app_post/utils.coffee | 4 +- spec/system/examples/text_modules_examples.rb | 45 +++++++++++++++++++ 2 files changed, 47 insertions(+), 2 deletions(-) diff --git a/app/assets/javascripts/app/lib/app_post/utils.coffee b/app/assets/javascripts/app/lib/app_post/utils.coffee index cad8504d54ca..2a36f00b098e 100644 --- a/app/assets/javascripts/app/lib/app_post/utils.coffee +++ b/app/assets/javascripts/app/lib/app_post/utils.coffee @@ -880,10 +880,10 @@ class App.Utils dataRef = objects dataRefLast = undefined for level in levels - if typeof dataRef is 'object' && level of dataRef + if _.isObject(dataRef) && dataRef && level of dataRef dataRefLast = dataRef dataRef = dataRef[level] - else if typeof dataRef is 'object' && typeof level is 'string' && matches = level.match(/(?\w+)\((?.*?)\)/) + else if _.isObject(dataRef) && typeof level is 'string' && matches = level.match(/(?\w+)\((?.*?)\)/) dataRefLast = dataRef { functionName, params } = matches.groups parameters = params.split(',').map((param) -> param.trim()) diff --git a/spec/system/examples/text_modules_examples.rb b/spec/system/examples/text_modules_examples.rb index f96c1f02a240..8a75620ee2b7 100644 --- a/spec/system/examples/text_modules_examples.rb +++ b/spec/system/examples/text_modules_examples.rb @@ -194,6 +194,51 @@ end end + context 'when text module refers external data source', authenticated_as: :authenticate, db_strategy: :reset do + let(:custom_attribute) { create(:object_manager_attribute_autocompletion_ajax_external_data_source) } + let(:text_module_external) do + create(:text_module, + name: 'external data source', + content: "external \#{ticket.#{custom_attribute.name}.value}") + end + + def authenticate + text_module_external + custom_attribute + ObjectManager::Attribute.migration_execute + true + end + + context 'when ticket external field value is not set' do + it 'inserts text module with placeholder' do + visit path + within(:active_content) do + find(:richtext).send_keys('::ext') + page.send_keys(:enter) + expect(find(:richtext)).to have_text 'external -' + end + end + end + + if path.starts_with? '#ticket/zoom' + context 'when ticket external field value is set' do + before do + ticket.reload[custom_attribute.name] = { value: 'aaa', label: 'AAA' } + ticket.save! + end + + it 'inserts text module with external value' do + visit path + within(:active_content) do + find(:richtext).send_keys('::ext') + page.send_keys(:enter) + expect(find(:richtext)).to have_text 'external aaa' + end + end + end + end + end + context 'when Group restriction for text modules not working on ticket creation (specific scenario only) #4358', authenticated_as: :authenticate do let(:agent) { create(:agent, groups: [group1]) }