fix: Send notification to all the mentioned users in a private message (#3222)
This commit is contained in:
parent
cebd34053b
commit
cd5c2c51d9
3 changed files with 44 additions and 10 deletions
|
@ -116,7 +116,7 @@ SLACK_CLIENT_SECRET=
|
||||||
|
|
||||||
### Change this env variable only if you are using a custom build mobile app
|
### Change this env variable only if you are using a custom build mobile app
|
||||||
## Mobile app env variables
|
## Mobile app env variables
|
||||||
IOS_APP_ID=6C953F3RX2.com.chatwoot.app
|
IOS_APP_ID=L7YLMN4634.com.chatwoot.app
|
||||||
ANDROID_BUNDLE_ID=com.chatwoot.app
|
ANDROID_BUNDLE_ID=com.chatwoot.app
|
||||||
|
|
||||||
# https://developers.google.com/android/guides/client-auth (use keytool to print the fingerprint in the first section)
|
# https://developers.google.com/android/guides/client-auth (use keytool to print the fingerprint in the first section)
|
||||||
|
|
|
@ -58,7 +58,7 @@ class NotificationListener < BaseListener
|
||||||
|
|
||||||
return if message.content.blank?
|
return if message.content.blank?
|
||||||
|
|
||||||
mentioned_ids = message.content.scan(%r{\(mention://(user|team)/(\d+)/(.+)\)}).map(&:second).uniq
|
mentioned_ids = message.content.scan(%r{\(mention://(user|team)/(\d+)/(.+?)\)}).map(&:second).uniq
|
||||||
|
|
||||||
return if mentioned_ids.blank?
|
return if mentioned_ids.blank?
|
||||||
|
|
||||||
|
|
|
@ -3,7 +3,8 @@ describe NotificationListener do
|
||||||
let(:listener) { described_class.instance }
|
let(:listener) { described_class.instance }
|
||||||
let!(:account) { create(:account) }
|
let!(:account) { create(:account) }
|
||||||
let!(:user) { create(:user, account: account) }
|
let!(:user) { create(:user, account: account) }
|
||||||
let!(:agent_with_notification) { create(:user, account: account) }
|
let!(:first_agent) { create(:user, account: account) }
|
||||||
|
let!(:second_agent) { create(:user, account: account) }
|
||||||
let!(:agent_with_out_notification) { create(:user, account: account) }
|
let!(:agent_with_out_notification) { create(:user, account: account) }
|
||||||
let!(:inbox) { create(:inbox, account: account) }
|
let!(:inbox) { create(:inbox, account: account) }
|
||||||
let!(:conversation) { create(:conversation, account: account, inbox: inbox, assignee: user) }
|
let!(:conversation) { create(:conversation, account: account, inbox: inbox, assignee: user) }
|
||||||
|
@ -13,12 +14,12 @@ describe NotificationListener do
|
||||||
|
|
||||||
context 'when conversation is created' do
|
context 'when conversation is created' do
|
||||||
it 'creates notifications for inbox members who have notifications turned on' do
|
it 'creates notifications for inbox members who have notifications turned on' do
|
||||||
notification_setting = agent_with_notification.notification_settings.first
|
notification_setting = first_agent.notification_settings.first
|
||||||
notification_setting.selected_email_flags = [:email_conversation_creation]
|
notification_setting.selected_email_flags = [:email_conversation_creation]
|
||||||
notification_setting.selected_push_flags = []
|
notification_setting.selected_push_flags = []
|
||||||
notification_setting.save!
|
notification_setting.save!
|
||||||
|
|
||||||
create(:inbox_member, user: agent_with_notification, inbox: inbox)
|
create(:inbox_member, user: first_agent, inbox: inbox)
|
||||||
conversation.reload
|
conversation.reload
|
||||||
|
|
||||||
event = Events::Base.new(event_name, Time.zone.now, conversation: conversation)
|
event = Events::Base.new(event_name, Time.zone.now, conversation: conversation)
|
||||||
|
@ -48,7 +49,7 @@ describe NotificationListener do
|
||||||
let(:event_name) { :'message.created' }
|
let(:event_name) { :'message.created' }
|
||||||
|
|
||||||
before do
|
before do
|
||||||
notification_setting = agent_with_notification.notification_settings.find_by(account_id: account.id)
|
notification_setting = first_agent.notification_settings.find_by(account_id: account.id)
|
||||||
notification_setting.selected_email_flags = [:email_conversation_mention]
|
notification_setting.selected_email_flags = [:email_conversation_mention]
|
||||||
notification_setting.selected_push_flags = []
|
notification_setting.selected_push_flags = []
|
||||||
notification_setting.save!
|
notification_setting.save!
|
||||||
|
@ -60,14 +61,14 @@ describe NotificationListener do
|
||||||
allow(NotificationBuilder).to receive(:new).and_return(builder)
|
allow(NotificationBuilder).to receive(:new).and_return(builder)
|
||||||
allow(builder).to receive(:perform)
|
allow(builder).to receive(:perform)
|
||||||
|
|
||||||
create(:inbox_member, user: agent_with_notification, inbox: inbox)
|
create(:inbox_member, user: first_agent, inbox: inbox)
|
||||||
conversation.reload
|
conversation.reload
|
||||||
|
|
||||||
message = build(
|
message = build(
|
||||||
:message,
|
:message,
|
||||||
conversation: conversation,
|
conversation: conversation,
|
||||||
account: account,
|
account: account,
|
||||||
content: "hi [#{agent_with_notification.name}](mention://user/#{agent_with_notification.id}/#{agent_with_notification.name})",
|
content: "hi [#{first_agent.name}](mention://user/#{first_agent.id}/#{first_agent.name})",
|
||||||
private: true
|
private: true
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -75,7 +76,40 @@ describe NotificationListener do
|
||||||
listener.message_created(event)
|
listener.message_created(event)
|
||||||
|
|
||||||
expect(NotificationBuilder).to have_received(:new).with(notification_type: 'conversation_mention',
|
expect(NotificationBuilder).to have_received(:new).with(notification_type: 'conversation_mention',
|
||||||
user: agent_with_notification,
|
user: first_agent,
|
||||||
|
account: account,
|
||||||
|
primary_actor: message)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'when message contains multiple mentions' do
|
||||||
|
it 'creates notifications for inbox member who was mentioned' do
|
||||||
|
builder = double
|
||||||
|
allow(NotificationBuilder).to receive(:new).and_return(builder)
|
||||||
|
allow(builder).to receive(:perform)
|
||||||
|
create(:inbox_member, user: first_agent, inbox: inbox)
|
||||||
|
create(:inbox_member, user: second_agent, inbox: inbox)
|
||||||
|
conversation.reload
|
||||||
|
|
||||||
|
message = build(
|
||||||
|
:message,
|
||||||
|
conversation: conversation,
|
||||||
|
account: account,
|
||||||
|
content: "hey [#{second_agent.name}](mention://user/#{second_agent.id}/#{second_agent.name})/
|
||||||
|
[#{first_agent.name}](mention://user/#{first_agent.id}/#{first_agent.name}),
|
||||||
|
please look in to this?",
|
||||||
|
private: true
|
||||||
|
)
|
||||||
|
|
||||||
|
event = Events::Base.new(event_name, Time.zone.now, message: message)
|
||||||
|
listener.message_created(event)
|
||||||
|
|
||||||
|
expect(NotificationBuilder).to have_received(:new).with(notification_type: 'conversation_mention',
|
||||||
|
user: second_agent,
|
||||||
|
account: account,
|
||||||
|
primary_actor: message)
|
||||||
|
expect(NotificationBuilder).to have_received(:new).with(notification_type: 'conversation_mention',
|
||||||
|
user: first_agent,
|
||||||
account: account,
|
account: account,
|
||||||
primary_actor: message)
|
primary_actor: message)
|
||||||
end
|
end
|
||||||
|
@ -87,7 +121,7 @@ describe NotificationListener do
|
||||||
allow(NotificationBuilder).to receive(:new).and_return(builder)
|
allow(NotificationBuilder).to receive(:new).and_return(builder)
|
||||||
allow(builder).to receive(:perform)
|
allow(builder).to receive(:perform)
|
||||||
|
|
||||||
create(:inbox_member, user: agent_with_notification, inbox: inbox)
|
create(:inbox_member, user: first_agent, inbox: inbox)
|
||||||
conversation.reload
|
conversation.reload
|
||||||
|
|
||||||
message = build(
|
message = build(
|
||||||
|
|
Loading…
Reference in a new issue