From d70208a0a83847271735959e1944682e57de400b Mon Sep 17 00:00:00 2001 From: Nithin David Thomas Date: Mon, 8 Mar 2021 13:13:13 +0530 Subject: [PATCH] Fix: apply alert conditions while document is hidden (#1859) --- .../shared/helpers/AudioNotificationHelper.js | 43 ++++--- .../specs/AudioNotificationHelper.spec.js | 109 ++++++++++++++++++ 2 files changed, 135 insertions(+), 17 deletions(-) create mode 100644 app/javascript/shared/helpers/specs/AudioNotificationHelper.spec.js diff --git a/app/javascript/shared/helpers/AudioNotificationHelper.js b/app/javascript/shared/helpers/AudioNotificationHelper.js index 3f8f77c4c..90d3bcdaa 100644 --- a/app/javascript/shared/helpers/AudioNotificationHelper.js +++ b/app/javascript/shared/helpers/AudioNotificationHelper.js @@ -34,36 +34,45 @@ export const getAlertAudio = async () => { } }; -const shouldPlayAudio = data => { - const { conversation_id: currentConvId } = window.WOOT.$route.params; - const currentUserId = window.WOOT.$store.getters.getCurrentUserID; +export const shouldPlayAudio = ( + message, + conversationId, + userId, + isDocHiddden +) => { const { conversation_id: incomingConvId, sender_id: senderId, message_type: messageType, - } = data; - const isFromCurrentUser = currentUserId === senderId; + private: isPrivate, + } = message; + const isFromCurrentUser = userId === senderId; const playAudio = - currentConvId !== incomingConvId && - !isFromCurrentUser && - messageType === MESSAGE_TYPE.INCOMING; - return playAudio; + !isFromCurrentUser && (messageType === MESSAGE_TYPE.INCOMING || isPrivate); + + if (isDocHiddden) return playAudio; + if (conversationId !== incomingConvId) return playAudio; + return false; }; export const newMessageNotification = data => { + const { conversation_id: currentConvId } = window.WOOT.$route.params; + const currentUserId = window.WOOT.$store.getters.getCurrentUserID; + const isDocHiddden = document.hidden; + const { enable_audio_alerts: enableAudioAlerts = false, } = window.WOOT.$store.getters.getUISettings; - if (!enableAudioAlerts) return false; - if (document.hidden) { + const playAudio = shouldPlayAudio( + data, + currentConvId, + currentUserId, + isDocHiddden + ); + + if (enableAudioAlerts && playAudio) { window.playAudioAlert(); - } else { - const playAudio = shouldPlayAudio(data); - if (playAudio) { - window.playAudioAlert(); - } } - return false; }; diff --git a/app/javascript/shared/helpers/specs/AudioNotificationHelper.spec.js b/app/javascript/shared/helpers/specs/AudioNotificationHelper.spec.js new file mode 100644 index 000000000..8d2b0f2fe --- /dev/null +++ b/app/javascript/shared/helpers/specs/AudioNotificationHelper.spec.js @@ -0,0 +1,109 @@ +/** + * @jest-environment jsdom + */ + +import { shouldPlayAudio } from '../AudioNotificationHelper'; + +describe('shouldPlayAudio', () => { + describe('Document active', () => { + it('Retuns true if incoming message', () => { + const message = { + conversation_id: 10, + sender_id: 5, + message_type: 0, + private: false, + }; + const [conversationId, userId, isDocHiddden] = [1, 2, false]; + const result = shouldPlayAudio( + message, + conversationId, + userId, + isDocHiddden + ); + expect(result).toBe(true); + }); + it('Retuns false if outgoing message', () => { + const message = { + conversation_id: 10, + sender_id: 5, + message_type: 1, + private: false, + }; + const [conversationId, userId, isDocHiddden] = [1, 2, false]; + const result = shouldPlayAudio( + message, + conversationId, + userId, + isDocHiddden + ); + expect(result).toBe(false); + }); + + it('Retuns false if from Same sender', () => { + const message = { + conversation_id: 1, + sender_id: 2, + message_type: 0, + private: false, + }; + const [conversationId, userId, isDocHiddden] = [1, 2, true]; + const result = shouldPlayAudio( + message, + conversationId, + userId, + isDocHiddden + ); + expect(result).toBe(false); + }); + it('Retuns true if private message from another agent', () => { + const message = { + conversation_id: 1, + sender_id: 5, + message_type: 1, + private: true, + }; + const [conversationId, userId, isDocHiddden] = [1, 2, true]; + const result = shouldPlayAudio( + message, + conversationId, + userId, + isDocHiddden + ); + expect(result).toBe(true); + }); + }); + describe('Document inactive', () => { + it('Retuns true if incoming message', () => { + const message = { + conversation_id: 1, + sender_id: 5, + message_type: 0, + private: false, + }; + const [conversationId, userId, isDocHiddden] = [1, 2, true]; + const result = shouldPlayAudio( + message, + conversationId, + userId, + isDocHiddden + ); + expect(result).toBe(true); + }); + it('Retuns false if outgoing message', () => { + const message = { + conversation_id: 1, + sender_id: 5, + message_type: 1, + private: false, + }; + const [conversationId, userId, isDocHiddden] = [1, 2, true]; + const result = shouldPlayAudio( + message, + conversationId, + userId, + isDocHiddden + ); + expect(result).toBe(false); + }); + }); +});