feat: Add messages on mute / unmute actions (#1373)

This commit is contained in:
Yih Yang
2020-10-31 00:57:25 +08:00
committed by GitHub
parent 84ce0a9054
commit 12b7358773
3 changed files with 44 additions and 0 deletions

View File

@@ -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::%<id>d::MUTED', id: id)
end

View File

@@ -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."

View File

@@ -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