diff --git a/app/controllers/api/v1/accounts/conversations_controller.rb b/app/controllers/api/v1/accounts/conversations_controller.rb index e2fe7a7ed..7642e94e3 100644 --- a/app/controllers/api/v1/accounts/conversations_controller.rb +++ b/app/controllers/api/v1/accounts/conversations_controller.rb @@ -32,6 +32,11 @@ class Api::V1::Accounts::ConversationsController < Api::V1::Accounts::BaseContro head :ok end + def unmute + @conversation.unmute! + head :ok + end + def transcript ConversationReplyMailer.conversation_transcript(@conversation, params[:email])&.deliver_later if params[:email].present? head :ok diff --git a/app/javascript/dashboard/api/inbox/conversation.js b/app/javascript/dashboard/api/inbox/conversation.js index fa23fda66..6e5c72ca0 100644 --- a/app/javascript/dashboard/api/inbox/conversation.js +++ b/app/javascript/dashboard/api/inbox/conversation.js @@ -43,6 +43,10 @@ class ConversationApi extends ApiClient { return axios.post(`${this.url}/${conversationId}/mute`); } + unmute(conversationId) { + return axios.post(`${this.url}/${conversationId}/unmute`); + } + meta({ inboxId, status, assigneeType, labels }) { return axios.get(`${this.url}/meta`, { params: { diff --git a/app/javascript/dashboard/api/specs/inbox/conversation.spec.js b/app/javascript/dashboard/api/specs/inbox/conversation.spec.js index ddea6b874..31be5e87e 100644 --- a/app/javascript/dashboard/api/specs/inbox/conversation.spec.js +++ b/app/javascript/dashboard/api/specs/inbox/conversation.spec.js @@ -14,7 +14,32 @@ describe('#ConversationAPI', () => { expect(conversationAPI).toHaveProperty('markMessageRead'); expect(conversationAPI).toHaveProperty('toggleTyping'); expect(conversationAPI).toHaveProperty('mute'); + expect(conversationAPI).toHaveProperty('unmute'); expect(conversationAPI).toHaveProperty('meta'); expect(conversationAPI).toHaveProperty('sendEmailTranscript'); }); + + describe('API calls', () => { + let originalAxios = null; + let axiosMock = null; + + beforeEach(() => { + originalAxios = window.axios; + axiosMock = { post: jest.fn(() => Promise.resolve()) }; + + window.axios = axiosMock; + }); + + afterEach(() => { + window.axios = originalAxios; + }); + + it('#unmute', () => { + conversationAPI.unmute(45); + + expect(axiosMock.post).toHaveBeenCalledWith( + '/api/v1/conversations/45/unmute' + ); + }); + }); }); diff --git a/app/javascript/dashboard/components/widgets/conversation/MoreActions.vue b/app/javascript/dashboard/components/widgets/conversation/MoreActions.vue index af7217d09..f091ab323 100644 --- a/app/javascript/dashboard/components/widgets/conversation/MoreActions.vue +++ b/app/javascript/dashboard/components/widgets/conversation/MoreActions.vue @@ -22,6 +22,15 @@ > {{ $t('CONTACT_PANEL.MUTE_CONTACT') }} + + +