diff --git a/app/models/conversation.rb b/app/models/conversation.rb index e6c187f48..c54bbe9ac 100644 --- a/app/models/conversation.rb +++ b/app/models/conversation.rb @@ -87,10 +87,12 @@ class Conversation < ApplicationRecord def mute! resolved! Redis::Alfred.setex(mute_key, 1, mute_period) + create_muted_message end def unmute! Redis::Alfred.delete(mute_key) + create_unmuted_message end def muted? @@ -248,6 +250,24 @@ class Conversation < ApplicationRecord messages.create(activity_message_params(content)) end + def create_muted_message + return unless Current.user + + params = { user_name: Current.user.name } + content = I18n.t('conversations.activity.muted', **params) + + messages.create(activity_message_params(content)) + end + + def create_unmuted_message + return unless Current.user + + params = { user_name: Current.user.name } + content = I18n.t('conversations.activity.unmuted', **params) + + messages.create(activity_message_params(content)) + end + def mute_key format('CONVERSATION::%d::MUTED', id: id) end diff --git a/config/locales/en.yml b/config/locales/en.yml index 508d6e6e6..b60e3a4bd 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -54,6 +54,8 @@ en: labels: added: "%{user_name} added %{labels}" removed: "%{user_name} removed %{labels}" + muted: "%{user_name} has muted the conversation" + unmuted: "%{user_name} has unmuted the conversation" templates: greeting_message_body: "%{account_name} typically replies in a few hours." ways_to_reach_you_message_body: "Give the team a way to reach you." diff --git a/spec/models/conversation_spec.rb b/spec/models/conversation_spec.rb index bc2a5f5c5..77b3c466e 100644 --- a/spec/models/conversation_spec.rb +++ b/spec/models/conversation_spec.rb @@ -276,8 +276,14 @@ RSpec.describe Conversation, type: :model do describe '#mute!' do subject(:mute!) { conversation.mute! } + let(:user) do + create(:user, email: 'agent2@example.com', account: create(:account), role: :agent) + end + let(:conversation) { create(:conversation) } + before { Current.user = user } + it 'marks conversation as resolved' do mute! expect(conversation.reload.resolved?).to eq(true) @@ -287,13 +293,24 @@ RSpec.describe Conversation, type: :model do mute! expect(Redis::Alfred.get(conversation.send(:mute_key))).not_to eq(nil) end + + it 'creates mute message' do + mute! + expect(conversation.messages.pluck(:content)).to include("#{user.name} has muted the conversation") + end end describe '#unmute!' do subject(:unmute!) { conversation.unmute! } + let(:user) do + create(:user, email: 'agent2@example.com', account: create(:account), role: :agent) + end + let(:conversation) { create(:conversation).tap(&:mute!) } + before { Current.user = user } + it 'does not change conversation status' do expect { unmute! }.not_to(change { conversation.reload.status }) end @@ -303,6 +320,11 @@ RSpec.describe Conversation, type: :model do .to change { Redis::Alfred.get(conversation.send(:mute_key)) } .to nil end + + it 'creates unmute message' do + unmute! + expect(conversation.messages.pluck(:content)).to include("#{user.name} has unmuted the conversation") + end end describe '#muted?' do