This updates macros and automations so agents can explicitly remove assigned agents or teams, while keeping the existing `Assign -> None` flow working for backward compatibility. Fixes: #7551 Closes: #7551 ## Why The original macro change exposed unassignment only through `Assign -> None`, which made macros behave differently from automations and left the explicit remove actions inconsistent across the product. This keeps the lower-risk compatibility path and adds the explicit remove actions requested in review. ## What this change does - Adds `Remove Assigned Agent` and `Remove Assigned Team` as explicit actions in macros. - Adds the same explicit remove actions in automations. - Keeps `Assign Agent -> None` and `Assign Team -> None` working for existing behavior and stored payloads. - Preserves backward compatibility for existing macro and automation execution payloads. - Downmerges the latest `develop` and resolves the conflicts while keeping both the new remove actions and current `develop` behavior. ## Validation - Verified both remove actions are available and selectable in the macro editor. - Verified both remove actions are available and selectable in the automation builder. - Applied a disposable macro with `Remove Assigned Agent` and `Remove Assigned Team` on a real conversation and confirmed both fields were cleared. - Applied a disposable macro with `Assign Agent -> None` and `Assign Team -> None` on a real conversation and confirmed both fields were still cleared.
85 lines
2.6 KiB
JavaScript
85 lines
2.6 KiB
JavaScript
import {
|
|
emptyMacro,
|
|
resolveActionName,
|
|
resolveLabels,
|
|
resolveTeamIds,
|
|
getFileName,
|
|
resolveAgents,
|
|
} from '../../routes/dashboard/settings/macros/macroHelper';
|
|
import { MACRO_ACTION_TYPES } from '../../routes/dashboard/settings/macros/constants';
|
|
import { teams, labels, files, agents } from './macrosFixtures';
|
|
|
|
describe('#emptyMacro', () => {
|
|
const defaultMacro = {
|
|
name: '',
|
|
actions: [
|
|
{
|
|
action_name: 'assign_team',
|
|
action_params: [],
|
|
},
|
|
],
|
|
visibility: 'global',
|
|
};
|
|
it('returns the default macro', () => {
|
|
expect(emptyMacro).toEqual(defaultMacro);
|
|
});
|
|
});
|
|
|
|
describe('#resolveActionName', () => {
|
|
it('resolve action name from key and return the correct label', () => {
|
|
expect(resolveActionName(MACRO_ACTION_TYPES[0].key)).toEqual(
|
|
MACRO_ACTION_TYPES[0].label
|
|
);
|
|
expect(resolveActionName(MACRO_ACTION_TYPES[1].key)).toEqual(
|
|
MACRO_ACTION_TYPES[1].label
|
|
);
|
|
expect(resolveActionName(MACRO_ACTION_TYPES[1].key)).not.toEqual(
|
|
MACRO_ACTION_TYPES[0].label
|
|
);
|
|
expect(resolveActionName('change_priority')).toEqual('CHANGE_PRIORITY'); // Translated
|
|
});
|
|
});
|
|
|
|
describe('#resolveTeamIds', () => {
|
|
it('resolves team names from ids, and returns a joined string', () => {
|
|
const resolvedTeams = '⚙️ sales team, 🤷♂️ fayaz';
|
|
expect(resolveTeamIds(teams, [1, 2])).toEqual(resolvedTeams);
|
|
});
|
|
|
|
it('resolves nil as None', () => {
|
|
expect(resolveTeamIds(teams, ['nil'])).toEqual('None');
|
|
});
|
|
});
|
|
|
|
describe('#resolveLabels', () => {
|
|
it('resolves labels names from ids and returns a joined string', () => {
|
|
const resolvedLabels = 'sales, billing';
|
|
expect(resolveLabels(labels, ['sales', 'billing'])).toEqual(resolvedLabels);
|
|
});
|
|
});
|
|
|
|
describe('#resolveAgents', () => {
|
|
it('resolves agents names from ids and returns a joined string', () => {
|
|
const resolvedAgents = 'John Doe';
|
|
expect(resolveAgents(agents, [1])).toEqual(resolvedAgents);
|
|
});
|
|
|
|
it('resolves nil and self values', () => {
|
|
expect(resolveAgents(agents, ['nil', 'self'])).toEqual('None, Self');
|
|
});
|
|
});
|
|
|
|
describe('#getFileName', () => {
|
|
it('returns the correct file name from the list of files', () => {
|
|
expect(getFileName(files[0].blob_id, 'send_attachment', files)).toEqual(
|
|
files[0].filename
|
|
);
|
|
expect(getFileName(files[1].blob_id, 'send_attachment', files)).toEqual(
|
|
files[1].filename
|
|
);
|
|
expect(getFileName(files[0].blob_id, 'wrong_action', files)).toEqual('');
|
|
expect(getFileName(null, 'send_attachment', files)).toEqual('');
|
|
expect(getFileName(files[0].blob_id, 'send_attachment', [])).toEqual('');
|
|
});
|
|
});
|