chore: Add activity message for conversation resolutions by Captain (#11492)

Currently, when Captain resolves a conversation, the same activity
message used for auto-resolution is shown. This has caused confusion for
users.
With this change, a distinct activity message will be displayed
specifically for resolutions performed by Captain, improving clarity.


Fixes
https://linear.app/chatwoot/issue/CW-4289/incorrect-activity-message-for-conversations-resolved-by-captain-auto#comment-d2991763

Co-authored-by: Pranav <pranav@chatwoot.com>
This commit is contained in:
Sojan Jose
2025-05-16 11:57:07 -07:00
committed by GitHub
parent 107ad99b7e
commit eba24ce275
4 changed files with 37 additions and 8 deletions

View File

@@ -9,8 +9,10 @@ RSpec.describe Captain::InboxPendingConversationsResolutionJob, type: :job do
let!(:recent_pending_conversation) { create(:conversation, inbox: inbox, last_activity_at: 10.minutes.ago, status: :pending) }
let!(:open_conversation) { create(:conversation, inbox: inbox, last_activity_at: 1.hour.ago, status: :open) }
let!(:captain_assistant) { create(:captain_assistant, account: inbox.account) }
before do
create(:captain_inbox, inbox: inbox, captain_assistant: create(:captain_assistant, account: inbox.account))
create(:captain_inbox, inbox: inbox, captain_assistant: captain_assistant)
stub_const('Limits::BULK_ACTIONS_LIMIT', 2)
end
@@ -27,14 +29,34 @@ RSpec.describe Captain::InboxPendingConversationsResolutionJob, type: :job do
expect(open_conversation.reload.status).to eq('open')
end
it 'creates an outgoing message for each resolved conversation' do
# resolution message + system message
expect { perform_enqueued_jobs { described_class.perform_later(inbox) } }
.to change { resolvable_pending_conversation.messages.reload.count }.by(2)
it 'creates exactly one outgoing message with configured content' do
custom_message = 'This is a custom resolution message.'
captain_assistant.update!(config: { 'resolution_message' => custom_message })
resolved_conversation_messages = resolvable_pending_conversation.messages.map(&:content)
expect(resolved_conversation_messages).to include(
'Resolving the conversation as it has been inactive for a while. Please start a new conversation if you need further assistance.'
expect do
perform_enqueued_jobs { described_class.perform_later(inbox) }
end.to change { resolvable_pending_conversation.messages.outgoing.reload.count }.by(1)
outgoing_message = resolvable_pending_conversation.messages.outgoing.last
expect(outgoing_message.content).to eq(custom_message)
end
it 'creates an outgoing message with default auto resolution message if not configured' do
captain_assistant.update!(config: {})
perform_enqueued_jobs { described_class.perform_later(inbox) }
outgoing_message = resolvable_pending_conversation.messages.outgoing.last
expect(outgoing_message.content).to eq(
I18n.t('conversations.activity.auto_resolution_message')
)
end
it 'adds the correct activity message after resolution by Captain' do
perform_enqueued_jobs { described_class.perform_later(inbox) }
activity_message = resolvable_pending_conversation.messages.activity.last
expect(activity_message).not_to be_nil
expect(activity_message.content).to eq(
I18n.t('conversations.activity.captain.resolved', user_name: captain_assistant.name)
)
end
end