Files
chatwoot/spec/services/captain/conversation_transcript_spec.rb
2026-09-30 05:16:19 +05:30

78 lines
3.0 KiB
Ruby

require 'rails_helper'
RSpec.describe Captain::ConversationTranscript do
let(:account) { create(:account) }
let(:conversation) { create(:conversation, account: account) }
def create_message(**attributes)
create(:message, account: account, conversation: conversation, inbox: conversation.inbox, **attributes)
end
describe '.entry' do
it 'describes a public customer message' do
message = create_message(message_type: :incoming, content: 'I want my money back')
expect(described_class.entry(message, 100)).to eq(sender: 'customer', text: 'I want my money back')
end
it 'describes a public agent reply' do
message = create_message(message_type: :outgoing, content: 'Let me check that for you')
expect(described_class.entry(message, 100)).to eq(sender: 'agent', text: 'Let me check that for you')
end
it 'keeps only the start of the text when given a limit' do
message = create_message(message_type: :incoming, content: 'I want my money back')
expect(described_class.entry(message, 6)).to eq(sender: 'customer', text: 'I want')
end
it 'is nil for a private note' do
message = create_message(message_type: :outgoing, private: true, content: 'Customer is on the legacy plan')
expect(described_class.entry(message, 100)).to be_nil
end
it 'is nil for a message that is neither from the customer nor from an agent' do
message = create_message(message_type: :template, content: 'Give the team a way to reach you.')
expect(described_class.entry(message, 100)).to be_nil
end
it 'is nil for a deleted message' do
message = create_message(message_type: :incoming, content: 'This message was deleted', content_attributes: { deleted: true })
expect(described_class.entry(message, 100)).to be_nil
end
it 'is nil for a forwarded email' do
message = create_message(message_type: :outgoing, content: 'Note to supplier', content_attributes: { forwarded_message_id: 1 })
expect(described_class.entry(message, 100)).to be_nil
end
it 'is nil for a message without content' do
message = create_message(message_type: :incoming, content: nil)
expect(described_class.entry(message, 100)).to be_nil
end
end
describe '#messages' do
it 'lists only what Captain may read, oldest first' do
create_message(message_type: :incoming, content: 'I want my money back')
create_message(message_type: :outgoing, private: true, content: 'Customer is on the legacy plan')
create_message(message_type: :template, content: 'Give the team a way to reach you.')
create_message(message_type: :outgoing, content: 'Note to supplier', content_attributes: { forwarded_message_id: 1 })
create_message(message_type: :outgoing, content: 'Let me check that for you')
expect(described_class.new(conversation: conversation).messages).to eq(
[
{ sender: 'customer', text: 'I want my money back' },
{ sender: 'agent', text: 'Let me check that for you' }
]
)
end
end
end