fix: [CW-44] don't count private message as first reply (#6707)

* fix: don't count private message as first reply

* fix: update first_human_response_logic

* refactor: separate valid_first_reply method

* test: valid first reply

* feat: add check for automation rule

* test: update step that creates data

* fix: add boundary condition in case first_reply_created_at is not present

* test: fix report builder

* refactor: conditions

* test: remove second message condition
This commit is contained in:
Shivam Mishra
2023-03-27 21:23:37 +05:30
committed by GitHub
parent 5b7bed9640
commit 4c10845acd
2 changed files with 81 additions and 5 deletions

View File

@@ -14,6 +14,59 @@ RSpec.describe Message, type: :model do
it_behaves_like 'liqudable'
end
describe 'Check if message is a valid first reply' do
it 'is valid if it is outgoing' do
outgoing_message = create(:message, message_type: :outgoing)
expect(outgoing_message.valid_first_reply?).to be true
end
it 'is invalid if it is not outgoing' do
incoming_message = create(:message, message_type: :incoming)
expect(incoming_message.valid_first_reply?).to be false
activity_message = create(:message, message_type: :activity)
expect(activity_message.valid_first_reply?).to be false
template_message = create(:message, message_type: :template)
expect(template_message.valid_first_reply?).to be false
end
it 'is invalid if it is outgoing but private' do
conversation = create(:conversation)
outgoing_message = create(:message, message_type: :outgoing, conversation: conversation, private: true)
expect(outgoing_message.valid_first_reply?).to be false
# next message should be a valid reply
next_message = create(:message, message_type: :outgoing, conversation: conversation)
expect(next_message.valid_first_reply?).to be true
end
it 'is invalid if it is not the first reply' do
conversation = create(:conversation)
first_message = create(:message, message_type: :outgoing, conversation: conversation)
expect(first_message.valid_first_reply?).to be true
second_message = create(:message, message_type: :outgoing, conversation: conversation)
expect(second_message.valid_first_reply?).to be false
end
it 'is invalid if it is sent as campaign' do
conversation = create(:conversation)
campaign_message = create(:message, message_type: :outgoing, conversation: conversation, additional_attributes: { campaign_id: 1 })
expect(campaign_message.valid_first_reply?).to be false
second_message = create(:message, message_type: :outgoing, conversation: conversation)
expect(second_message.valid_first_reply?).to be true
end
it 'is invalid if it is sent by automation' do
conversation = create(:conversation)
automation_message = create(:message, message_type: :outgoing, conversation: conversation, content_attributes: { automation_rule_id: 1 })
expect(automation_message.valid_first_reply?).to be false
end
end
describe '#reopen_conversation' do
let(:conversation) { create(:conversation) }
let(:message) { build(:message, message_type: :incoming, conversation: conversation) }