Restructure omni services and add Chatwoot research snapshot

This commit is contained in:
Ruslan Bakiev
2026-02-21 11:11:27 +07:00
parent edea7a0034
commit b73babbbf6
7732 changed files with 978203 additions and 32 deletions

View File

@@ -0,0 +1,77 @@
require 'rails_helper'
describe MessageFinder do
subject(:message_finder) { described_class.new(conversation, params) }
let!(:account) { create(:account) }
let!(:user) { create(:user, account: account) }
let!(:inbox) { create(:inbox, account: account) }
let!(:contact) { create(:contact, email: nil) }
let!(:conversation) do
create(:conversation, account: account, inbox: inbox, assignee: user, contact: contact)
end
before do
create(:message, account: account, inbox: inbox, conversation: conversation)
create(:message, message_type: 'activity', account: account, inbox: inbox, conversation: conversation)
create(:message, message_type: 'activity', account: account, inbox: inbox, conversation: conversation)
# this outgoing message creates 2 additional messages because of the email hook execution service
create(:message, message_type: 'outgoing', account: account, inbox: inbox, conversation: conversation)
end
describe '#perform' do
context 'with filter_internal_messages false' do
let(:params) { { filter_internal_messages: false } }
it 'filter conversations by status' do
result = message_finder.perform
expect(result.count).to be 6
end
end
context 'with filter_internal_messages true' do
let(:params) { { filter_internal_messages: true } }
it 'filter conversations by status' do
result = message_finder.perform
expect(result.count).to be 4
end
end
context 'with before attribute' do
let!(:outgoing) { create(:message, message_type: 'outgoing', account: account, inbox: inbox, conversation: conversation) }
let(:params) { { before: outgoing.id } }
it 'filter conversations by status' do
result = message_finder.perform
expect(result.count).to be 6
end
end
context 'with after attribute' do
let(:params) { { after: conversation.messages.first.id } }
it 'filter conversations by status' do
result = message_finder.perform
expect(result.count).to be 5
expect(result.first.id).to be conversation.messages.second.id
expect(result.last.message_type).to eq 'outgoing'
end
end
context 'with after and before attribute' do
let(:params) do
{
after: conversation.messages.first.id,
before: conversation.messages.last.id
}
end
it 'filter conversations by status' do
result = message_finder.perform
expect(result.count).to be 5
expect(result.last.id).to be conversation.messages[-2].id
end
end
end
end