From 2d4ef0c32862a9ba4129fab38ad7611347a812a2 Mon Sep 17 00:00:00 2001 From: Muhsin Keloth Date: Thu, 14 Sep 2023 09:01:58 +0530 Subject: [PATCH] feat: Add `None` option in automation assign agent actions (#7900) --- .../dashboard/helper/automationHelper.js | 11 ++++++++++- app/services/action_service.rb | 2 ++ spec/services/action_service_spec.rb | 14 ++++++++++++++ 3 files changed, 26 insertions(+), 1 deletion(-) diff --git a/app/javascript/dashboard/helper/automationHelper.js b/app/javascript/dashboard/helper/automationHelper.js index cb68cbd43..e9b1f886c 100644 --- a/app/javascript/dashboard/helper/automationHelper.js +++ b/app/javascript/dashboard/helper/automationHelper.js @@ -120,9 +120,18 @@ export const generateConditionOptions = (options, key = 'id') => { }); }; +// Add the "None" option to the agent list +export const agentList = agents => [ + { + id: 'nil', + name: 'None', + }, + ...(agents || []), +]; + export const getActionOptions = ({ agents, teams, labels, type }) => { const actionsMap = { - assign_agent: agents, + assign_agent: agentList(agents), assign_team: teams, send_email_to_team: teams, add_label: generateConditionOptions(labels, 'title'), diff --git a/app/services/action_service.rb b/app/services/action_service.rb index ecaa9ce9e..6ef2766f8 100644 --- a/app/services/action_service.rb +++ b/app/services/action_service.rb @@ -32,6 +32,8 @@ class ActionService end def assign_agent(agent_ids = []) + return @conversation.update!(assignee_id: nil) if agent_ids[0] == 'nil' + return unless agent_belongs_to_inbox?(agent_ids) @agent = @account.users.find_by(id: agent_ids) diff --git a/spec/services/action_service_spec.rb b/spec/services/action_service_spec.rb index 3efcb6555..c45c67fc1 100644 --- a/spec/services/action_service_spec.rb +++ b/spec/services/action_service_spec.rb @@ -1,6 +1,8 @@ require 'rails_helper' describe ActionService do + let(:account) { create(:account) } + describe '#resolve_conversation' do let(:conversation) { create(:conversation) } let(:action_service) { described_class.new(conversation) } @@ -27,5 +29,17 @@ describe ActionService do end end + describe '#assign_agent' do + let(:agent) { create(:user, account: account, role: :agent) } + let(:conversation) { create(:conversation, account: account) } + let(:inbox_member) { create(:inbox_member, inbox: conversation.inbox, user: agent) } + let(:action_service) { described_class.new(conversation) } + + it 'unassigns the conversation if agent id is nil' do + action_service.assign_agent(['nil']) + expect(conversation.reload.assignee).to be_nil + end + end + # TODO: Expand this test suite end