From 1da20d3f9078aa7f5cc26aaab137aecd401690af Mon Sep 17 00:00:00 2001 From: Mantas Masalskis Date: Thu, 28 May 2020 10:02:07 +0200 Subject: [PATCH] Fixed #3060 - Loading KB-Answers doesn't work for contained images --- .../javascripts/app/lib/app_post/utils.coffee | 10 ++-- spec/factories/knowledge_base/answer.rb | 6 +++ .../knowledge_base/answer/translation.rb | 4 ++ .../answer/translation/content.rb | 6 +++ .../inserting_knowledge_base_answer_spec.rb | 47 ++++++++++++++----- 5 files changed, 59 insertions(+), 14 deletions(-) diff --git a/app/assets/javascripts/app/lib/app_post/utils.coffee b/app/assets/javascripts/app/lib/app_post/utils.coffee index 5539dbef2..632cce11f 100644 --- a/app/assets/javascripts/app/lib/app_post/utils.coffee +++ b/app/assets/javascripts/app/lib/app_post/utils.coffee @@ -1266,9 +1266,13 @@ class App.Utils cacheOrDone = -> if (nextElem = elems.pop()) - App.Utils._htmlImage2DataUrlAsync(nextElem, success: (data) -> - $(nextElem).attr('src', data) - cacheOrDone() + App.Utils._htmlImage2DataUrlAsync(nextElem, + success: (img, data) -> + $(nextElem).attr('src', data) + cacheOrDone() + fail: (img) -> + $(nextElem).remove() + cacheOrDone() ) else callback(output[0].innerHTML) diff --git a/spec/factories/knowledge_base/answer.rb b/spec/factories/knowledge_base/answer.rb index 51169bf45..d8c031f53 100644 --- a/spec/factories/knowledge_base/answer.rb +++ b/spec/factories/knowledge_base/answer.rb @@ -19,6 +19,12 @@ FactoryBot.define do end end + trait :with_image do + transient do + translation_traits { [:with_image] } + end + end + trait :with_attachment do transient do attachment { File.open('spec/fixtures/upload/hello_world.txt') } diff --git a/spec/factories/knowledge_base/answer/translation.rb b/spec/factories/knowledge_base/answer/translation.rb index 1fe545004..e7aeb0eeb 100644 --- a/spec/factories/knowledge_base/answer/translation.rb +++ b/spec/factories/knowledge_base/answer/translation.rb @@ -28,5 +28,9 @@ FactoryBot.define do trait :with_video do content { build(:knowledge_base_answer_translation_content, :with_video) } end + + trait :with_image do + content { build(:knowledge_base_answer_translation_content, :with_image) } + end end end diff --git a/spec/factories/knowledge_base/answer/translation/content.rb b/spec/factories/knowledge_base/answer/translation/content.rb index c9d9b1f22..0c68f0d83 100644 --- a/spec/factories/knowledge_base/answer/translation/content.rb +++ b/spec/factories/knowledge_base/answer/translation/content.rb @@ -12,5 +12,11 @@ FactoryBot.define do trait :with_video do body { '( widget: video, provider: youtube, id: vTTzwJsHpU8 )' } end + + trait :with_image do + body do + '' + end + end end end diff --git a/spec/system/ticket/inserting_knowledge_base_answer_spec.rb b/spec/system/ticket/inserting_knowledge_base_answer_spec.rb index 04073d612..58989a5eb 100644 --- a/spec/system/ticket/inserting_knowledge_base_answer_spec.rb +++ b/spec/system/ticket/inserting_knowledge_base_answer_spec.rb @@ -4,27 +4,52 @@ RSpec.describe 'inserting Knowledge Base answer', type: :system, authenticated: include_context 'basic Knowledge Base' let(:field) { find(:richtext) } - let(:target_translation) { published_answer.translations.first } + let(:target_translation) { answer.translations.first } before do configure_elasticsearch(required: true, rebuild: true) do - published_answer + answer end end - it 'adds text' do - open_page - insert_kb_answer(target_translation, field) + context 'given published answer' do + let(:answer) { published_answer } - expect(field).to have_text target_translation.content.body + it 'adds text' do + open_page + insert_kb_answer(target_translation, field) + + expect(field).to have_text target_translation.content.body + end + + it 'attaches file' do + open_page + insert_kb_answer(target_translation, field) + + within(:active_content) do + expect(page).to have_css '.attachments .attachment--row' + end + end end - it 'attaches file' do - open_page - insert_kb_answer(target_translation, field) + context 'given answer with image' do + let(:answer) { create(:knowledge_base_answer, :with_image, published_at: 1.week.ago) } - within(:active_content) do - expect(page).to have_css '.attachments .attachment--row' + it 'inserts image' do + open_page + insert_kb_answer(target_translation, field) + + within(:active_content) do + within(:richtext) do + wait(5).until do + elem = first('img') + script = 'return arguments[0].naturalWidth;' + height = Capybara.current_session.driver.browser.execute_script(script, elem.native) + + expect(height).to be_positive + end + end + end end end