Fixes #3148 - Knowledge Base search crashes if (parent) category is missing translation to the locale of the found object
This commit is contained in:
parent
971ece82e4
commit
02159c1873
2 changed files with 34 additions and 3 deletions
|
@ -1,6 +1,6 @@
|
||||||
class KnowledgeBase::SearchController < ApplicationController
|
class KnowledgeBase::SearchController < ApplicationController
|
||||||
skip_before_action :verify_csrf_token
|
skip_before_action :verify_csrf_token
|
||||||
#skip_before_action :verify_authenticity_token
|
prepend_before_action :authentication_check_only
|
||||||
|
|
||||||
include KnowledgeBaseHelper
|
include KnowledgeBaseHelper
|
||||||
include ActionView::Helpers::SanitizeHelper
|
include ActionView::Helpers::SanitizeHelper
|
||||||
|
@ -74,7 +74,7 @@ class KnowledgeBase::SearchController < ApplicationController
|
||||||
end
|
end
|
||||||
|
|
||||||
def public_item_details_answer(meta, object)
|
def public_item_details_answer(meta, object)
|
||||||
category_translation = object.answer.category.translation_to(object.kb_locale)
|
category_translation = object.answer.category.translation_preferred(object.kb_locale)
|
||||||
path = help_answer_path(category_translation, object, locale: object.kb_locale.system_locale.locale)
|
path = help_answer_path(category_translation, object, locale: object.kb_locale.system_locale.locale)
|
||||||
|
|
||||||
url = case url_type
|
url = case url_type
|
||||||
|
@ -97,7 +97,7 @@ class KnowledgeBase::SearchController < ApplicationController
|
||||||
end
|
end
|
||||||
|
|
||||||
def public_item_details_category(meta, object)
|
def public_item_details_category(meta, object)
|
||||||
parent_category_translation = object.category.parent&.translation_to(object.kb_locale)
|
parent_category_translation = object.category.parent&.translation_preferred(object.kb_locale)
|
||||||
path = help_category_path(object, locale: object.kb_locale.system_locale.locale)
|
path = help_category_path(object, locale: object.kb_locale.system_locale.locale)
|
||||||
|
|
||||||
url = case url_type
|
url = case url_type
|
||||||
|
|
|
@ -30,4 +30,35 @@ RSpec.describe 'Knowledge Base search with details', type: :request, searchindex
|
||||||
expect(json_response['details'][0]['id']).to be_a_kind_of Integer
|
expect(json_response['details'][0]['id']).to be_a_kind_of Integer
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
context 'when category translation to one of locales is missing' do
|
||||||
|
let(:search_phrase) { 'search_phrase' }
|
||||||
|
let(:alternative_translation) { create('knowledge_base/answer/translation', title: search_phrase, kb_locale: alternative_locale, answer: published_answer) }
|
||||||
|
|
||||||
|
before do
|
||||||
|
alternative_translation
|
||||||
|
rebuild_searchindex
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'returns answer in locale without category translation' do
|
||||||
|
post endpoint, params: { query: search_phrase }
|
||||||
|
|
||||||
|
expect(json_response['details'][0]['id']).to be alternative_translation.id
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'when parent category translation to one of locales is missing' do
|
||||||
|
let(:search_phrase) { 'search_phrase' }
|
||||||
|
let(:child_category) { create('knowledge_base/category', parent: category) }
|
||||||
|
let(:child_category_translation) { create('knowledge_base/category/translation', title: search_phrase, kb_locale: alternative_locale, category: child_category) }
|
||||||
|
|
||||||
|
before do
|
||||||
|
child_category_translation && rebuild_searchindex
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'returns category in locale without category translation', authenticated_as: -> { create(:admin) } do
|
||||||
|
post endpoint, params: { query: search_phrase }
|
||||||
|
expect(json_response['details'][0]['subtitle']).to eq category.translation_to(primary_locale).title
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in a new issue