diff --git a/app/views/api/v1/accounts/search/_conversation_search_result.json.jbuilder b/app/views/api/v1/accounts/search/_conversation_search_result.json.jbuilder index a0b7e0203..bb5782b4c 100644 --- a/app/views/api/v1/accounts/search/_conversation_search_result.json.jbuilder +++ b/app/views/api/v1/accounts/search/_conversation_search_result.json.jbuilder @@ -2,7 +2,8 @@ json.id conversation.display_id json.account_id conversation.account_id json.created_at conversation.created_at.to_i json.message do - json.partial! 'message', formats: [:json], message: conversation.messages.try(:first) + first_message = conversation.messages.first + json.partial! 'message', formats: [:json], message: first_message if first_message.present? end json.contact do json.partial! 'contact', formats: [:json], contact: conversation.contact if conversation.try(:contact).present? diff --git a/app/views/api/v1/accounts/search/conversations.json.jbuilder b/app/views/api/v1/accounts/search/conversations.json.jbuilder index 70d48a89e..b95ffd03f 100644 --- a/app/views/api/v1/accounts/search/conversations.json.jbuilder +++ b/app/views/api/v1/accounts/search/conversations.json.jbuilder @@ -5,7 +5,8 @@ json.payload do json.account_id conversation.account_id json.created_at conversation.created_at.to_i json.message do - json.partial! 'message', formats: [:json], message: conversation.messages.try(:first) + first_message = conversation.messages.first + json.partial! 'message', formats: [:json], message: first_message if first_message.present? end json.contact do json.partial! 'contact', formats: [:json], contact: conversation.contact if conversation.try(:contact).present? diff --git a/spec/controllers/api/v1/accounts/search_controller_spec.rb b/spec/controllers/api/v1/accounts/search_controller_spec.rb index 9b7b0b2f1..a6c32245a 100644 --- a/spec/controllers/api/v1/accounts/search_controller_spec.rb +++ b/spec/controllers/api/v1/accounts/search_controller_spec.rb @@ -44,6 +44,23 @@ RSpec.describe 'Search', type: :request do expect(response_data[:payload][:contacts].length).to eq 1 expect(response_data[:payload][:articles].length).to eq 1 end + + it 'returns matching conversations that have no messages' do + empty_contact = create(:contact, name: 'test empty', account: account) + empty_conversation = create(:conversation, account: account, contact: empty_contact) + create(:inbox_member, user: agent, inbox: empty_conversation.inbox) + + get "/api/v1/accounts/#{account.id}/search", + headers: agent.create_new_auth_token, + params: { q: 'test' }, + as: :json + + expect(response).to have_http_status(:success) + response_data = JSON.parse(response.body, symbolize_names: true) + + conversation_ids = response_data[:payload][:conversations].pluck(:id) + expect(conversation_ids).to include(empty_conversation.display_id) + end end end @@ -169,6 +186,23 @@ RSpec.describe 'Search', type: :request do expect(response_data[:payload][:conversations].length).to eq 1 end + it 'returns matching conversations that have no messages' do + empty_contact = create(:contact, name: 'test empty', account: account) + empty_conversation = create(:conversation, account: account, contact: empty_contact) + create(:inbox_member, user: agent, inbox: empty_conversation.inbox) + + get "/api/v1/accounts/#{account.id}/search/conversations", + headers: agent.create_new_auth_token, + params: { q: 'test' }, + as: :json + + expect(response).to have_http_status(:success) + response_data = JSON.parse(response.body, symbolize_names: true) + + conversation_ids = response_data[:payload][:conversations].pluck(:id) + expect(conversation_ids).to include(empty_conversation.display_id) + end + context 'with advanced_search feature enabled', :opensearch do before do account.enable_features!('advanced_search')