{{ $t('AUTOMATION.ADD.CONDITION_BUTTON_LABEL') }}
@@ -173,15 +260,17 @@ export default {
v-model="automation.actions[i]"
:action-types="automationActionTypes"
:dropdown-values="getActionDropdownValues(action.action_name)"
- :show-action-input="showActionInput(action.action_name)"
+ :show-action-input="
+ showActionInput(automationActionTypes, action.action_name)
+ "
:error-message="
errors[`action_${i}`]
? $t(`AUTOMATION.ERRORS.${errors[`action_${i}`]}`)
: ''
"
:initial-file-name="getFileName(action, automation.files)"
- @resetAction="resetAction(i)"
- @removeAction="removeAction(i)"
+ @resetAction="resetAction(automation, i)"
+ @removeAction="removeAction(automation, i)"
/>
{{ $t('AUTOMATION.ADD.ACTION_BUTTON_LABEL') }}
@@ -206,7 +295,7 @@ export default {
>
{{ $t('AUTOMATION.EDIT.CANCEL_BUTTON_TEXT') }}
-
+
{{ $t('AUTOMATION.EDIT.SUBMIT') }}
diff --git a/app/javascript/shared/composables/specs/useFilter.spec.js b/app/javascript/shared/composables/specs/useFilter.spec.js
new file mode 100644
index 000000000..68922403a
--- /dev/null
+++ b/app/javascript/shared/composables/specs/useFilter.spec.js
@@ -0,0 +1,145 @@
+import { describe, it, expect, beforeEach, vi } from 'vitest';
+import { useFilter } from '../useFilter';
+import { useStore } from 'dashboard/composables/store';
+import { useI18n } from 'dashboard/composables/useI18n';
+
+// Mock the dependencies
+vi.mock('dashboard/composables/store');
+vi.mock('dashboard/composables/useI18n');
+
+describe('useFilter', () => {
+ // Setup mocks
+ beforeEach(() => {
+ vi.mocked(useStore).mockReturnValue({
+ getters: {
+ 'attributes/getAttributesByModel': vi.fn(),
+ },
+ });
+ vi.mocked(useI18n).mockReturnValue({
+ t: vi.fn(key => key),
+ });
+ });
+
+ it('should return the correct functions', () => {
+ const {
+ setFilterAttributes,
+ initializeStatusAndAssigneeFilterToModal,
+ initializeInboxTeamAndLabelFilterToModal,
+ } = useFilter({ filteri18nKey: 'TEST', attributeModel: 'conversation' });
+
+ expect(setFilterAttributes).toBeDefined();
+ expect(initializeStatusAndAssigneeFilterToModal).toBeDefined();
+ expect(initializeInboxTeamAndLabelFilterToModal).toBeDefined();
+ });
+
+ describe('setFilterAttributes', () => {
+ it('should return filterGroups and filterTypes', () => {
+ const mockAttributes = [
+ {
+ attribute_key: 'test_key',
+ attribute_display_name: 'Test Name',
+ attribute_display_type: 'text',
+ },
+ ];
+ vi.mocked(useStore)().getters[
+ 'attributes/getAttributesByModel'
+ ].mockReturnValue(mockAttributes);
+
+ const { setFilterAttributes } = useFilter({
+ filteri18nKey: 'TEST',
+ attributeModel: 'conversation',
+ });
+ const result = setFilterAttributes();
+
+ expect(result).toHaveProperty('filterGroups');
+ expect(result).toHaveProperty('filterTypes');
+ expect(result.filterGroups.length).toBeGreaterThan(0);
+ expect(result.filterTypes.length).toBeGreaterThan(0);
+ });
+ });
+
+ describe('initializeStatusAndAssigneeFilterToModal', () => {
+ it('should return status filter when activeStatus is provided', () => {
+ const { initializeStatusAndAssigneeFilterToModal } = useFilter({
+ filteri18nKey: 'TEST',
+ attributeModel: 'conversation',
+ });
+ const result = initializeStatusAndAssigneeFilterToModal('open', {}, '');
+
+ expect(result).toEqual({
+ attribute_key: 'status',
+ attribute_model: 'standard',
+ filter_operator: 'equal_to',
+ values: [
+ { id: 'open', name: 'CHAT_LIST.CHAT_STATUS_FILTER_ITEMS.open.TEXT' },
+ ],
+ query_operator: 'and',
+ custom_attribute_type: '',
+ });
+ });
+
+ it('should return null when no active filters', () => {
+ const { initializeStatusAndAssigneeFilterToModal } = useFilter({
+ filteri18nKey: 'TEST',
+ attributeModel: 'conversation',
+ });
+ const result = initializeStatusAndAssigneeFilterToModal('', {}, '');
+
+ expect(result).toBeNull();
+ });
+ });
+
+ describe('initializeInboxTeamAndLabelFilterToModal', () => {
+ it('should return filters for inbox, team, and label when provided', () => {
+ const { initializeInboxTeamAndLabelFilterToModal } = useFilter({
+ filteri18nKey: 'TEST',
+ attributeModel: 'conversation',
+ });
+ const result = initializeInboxTeamAndLabelFilterToModal(
+ 1,
+ { name: 'Inbox 1' },
+ 2,
+ [{ id: 2, name: 'Team 2' }],
+ 'Label 1'
+ );
+
+ expect(result).toHaveLength(3);
+ expect(result[0]).toHaveProperty('attribute_key', 'inbox_id');
+ expect(result[1]).toHaveProperty('attribute_key', 'team_id');
+ expect(result[2]).toHaveProperty('attribute_key', 'labels');
+ });
+
+ it('should return empty array when no filters are provided', () => {
+ const { initializeInboxTeamAndLabelFilterToModal } = useFilter({
+ filteri18nKey: 'TEST',
+ attributeModel: 'conversation',
+ });
+ const result = initializeInboxTeamAndLabelFilterToModal(
+ null,
+ null,
+ null,
+ null,
+ null
+ );
+
+ expect(result).toEqual([]);
+ });
+
+ it('should return only inbox filter when only inbox is provided', () => {
+ const { initializeInboxTeamAndLabelFilterToModal } = useFilter({
+ filteri18nKey: 'TEST',
+ attributeModel: 'conversation',
+ });
+ const result = initializeInboxTeamAndLabelFilterToModal(
+ 1,
+ { name: 'Inbox 1' },
+ null,
+ null,
+ null
+ );
+
+ expect(result).toHaveLength(1);
+ expect(result[0]).toHaveProperty('attribute_key', 'inbox_id');
+ });
+ });
+});
diff --git a/app/javascript/shared/composables/useFilter.js b/app/javascript/shared/composables/useFilter.js
new file mode 100644
index 000000000..903269ffb
--- /dev/null
+++ b/app/javascript/shared/composables/useFilter.js
@@ -0,0 +1,175 @@
+import wootConstants from 'dashboard/constants/globals';
+import { useStore } from 'dashboard/composables/store';
+import { useI18n } from 'dashboard/composables/useI18n';
+import { filterAttributeGroups } from 'dashboard/components/widgets/conversation/advancedFilterItems';
+import * as OPERATORS from 'dashboard/components/widgets/FilterInput/FilterOperatorTypes.js';
+
+const customAttributeInputType = key => {
+ switch (key) {
+ case 'date':
+ return 'date';
+ case 'text':
+ return 'plain_text';
+ case 'list':
+ return 'search_select';
+ case 'checkbox':
+ return 'search_select';
+ default:
+ return 'plain_text';
+ }
+};
+
+const getOperatorTypes = key => {
+ switch (key) {
+ case 'list':
+ return OPERATORS.OPERATOR_TYPES_1;
+ case 'text':
+ return OPERATORS.OPERATOR_TYPES_3;
+ case 'number':
+ return OPERATORS.OPERATOR_TYPES_1;
+ case 'link':
+ return OPERATORS.OPERATOR_TYPES_1;
+ case 'date':
+ return OPERATORS.OPERATOR_TYPES_4;
+ case 'checkbox':
+ return OPERATORS.OPERATOR_TYPES_1;
+ default:
+ return OPERATORS.OPERATOR_TYPES_1;
+ }
+};
+
+export const useFilter = ({ filteri18nKey, attributeModel }) => {
+ const { t: $t } = useI18n();
+ const { getters } = useStore();
+
+ const setFilterAttributes = () => {
+ const allCustomAttributes =
+ getters['attributes/getAttributesByModel'](attributeModel);
+
+ const customAttributesFormatted = {
+ name: $t(`${filteri18nKey}.GROUPS.CUSTOM_ATTRIBUTES`),
+ attributes: allCustomAttributes.map(attr => {
+ return {
+ key: attr.attribute_key,
+ name: attr.attribute_display_name,
+ };
+ }),
+ };
+
+ const allFilterGroups = filterAttributeGroups.map(group => {
+ return {
+ name: $t(`${filteri18nKey}.GROUPS.${group.i18nGroup}`),
+ attributes: group.attributes.map(attribute => {
+ return {
+ key: attribute.key,
+ name: $t(`${filteri18nKey}.ATTRIBUTES.${attribute.i18nKey}`),
+ };
+ }),
+ };
+ });
+
+ const customAttributeTypes = allCustomAttributes.map(attr => {
+ return {
+ attributeKey: attr.attribute_key,
+ attributeI18nKey: `CUSTOM_ATTRIBUTE_${attr.attribute_display_type.toUpperCase()}`,
+ inputType: customAttributeInputType(attr.attribute_display_type),
+ filterOperators: getOperatorTypes(attr.attribute_display_type),
+ attributeModel: 'custom_attributes',
+ };
+ });
+
+ return {
+ filterGroups: [...allFilterGroups, customAttributesFormatted],
+ filterTypes: [...customAttributeTypes],
+ };
+ };
+
+ const initializeStatusAndAssigneeFilterToModal = (
+ activeStatus,
+ currentUserDetails,
+ activeAssigneeTab
+ ) => {
+ if (activeStatus !== '') {
+ return {
+ attribute_key: 'status',
+ attribute_model: 'standard',
+ filter_operator: 'equal_to',
+ values: [
+ {
+ id: activeStatus,
+ name: $t(`CHAT_LIST.CHAT_STATUS_FILTER_ITEMS.${activeStatus}.TEXT`),
+ },
+ ],
+ query_operator: 'and',
+ custom_attribute_type: '',
+ };
+ }
+ if (activeAssigneeTab === wootConstants.ASSIGNEE_TYPE.ME) {
+ return {
+ attribute_key: 'assignee_id',
+ filter_operator: 'equal_to',
+ values: currentUserDetails,
+ query_operator: 'and',
+ custom_attribute_type: '',
+ };
+ }
+ return null;
+ };
+
+ const initializeInboxTeamAndLabelFilterToModal = (
+ conversationInbox,
+ inbox,
+ teamId,
+ activeTeam,
+ label
+ ) => {
+ const filters = [];
+ if (conversationInbox) {
+ filters.push({
+ attribute_key: 'inbox_id',
+ attribute_model: 'standard',
+ filter_operator: 'equal_to',
+ values: [
+ {
+ id: conversationInbox,
+ name: inbox.name,
+ },
+ ],
+ query_operator: 'and',
+ custom_attribute_type: '',
+ });
+ }
+ if (teamId) {
+ filters.push({
+ attribute_key: 'team_id',
+ attribute_model: 'standard',
+ filter_operator: 'equal_to',
+ values: activeTeam,
+ query_operator: 'and',
+ custom_attribute_type: '',
+ });
+ }
+ if (label) {
+ filters.push({
+ attribute_key: 'labels',
+ attribute_model: 'standard',
+ filter_operator: 'equal_to',
+ values: [
+ {
+ id: label,
+ name: label,
+ },
+ ],
+ query_operator: 'and',
+ custom_attribute_type: '',
+ });
+ }
+ return filters;
+ };
+
+ return {
+ setFilterAttributes,
+ initializeStatusAndAssigneeFilterToModal,
+ initializeInboxTeamAndLabelFilterToModal,
+ };
+};
diff --git a/app/javascript/shared/mixins/filterMixin.js b/app/javascript/shared/mixins/filterMixin.js
deleted file mode 100644
index 7d402ba02..000000000
--- a/app/javascript/shared/mixins/filterMixin.js
+++ /dev/null
@@ -1,119 +0,0 @@
-import wootConstants from 'dashboard/constants/globals';
-
-export default {
- methods: {
- setFilterAttributes() {
- const allCustomAttributes = this.$store.getters[
- 'attributes/getAttributesByModel'
- ](this.attributeModel);
- const customAttributesFormatted = {
- name: this.$t(`${this.filtersFori18n}.GROUPS.CUSTOM_ATTRIBUTES`),
- attributes: allCustomAttributes.map(attr => {
- return {
- key: attr.attribute_key,
- name: attr.attribute_display_name,
- };
- }),
- };
- const allFilterGroups = this.filterAttributeGroups.map(group => {
- return {
- name: this.$t(`${this.filtersFori18n}.GROUPS.${group.i18nGroup}`),
- attributes: group.attributes.map(attribute => {
- return {
- key: attribute.key,
- name: this.$t(
- `${this.filtersFori18n}.ATTRIBUTES.${attribute.i18nKey}`
- ),
- };
- }),
- };
- });
- const customAttributeTypes = allCustomAttributes.map(attr => {
- return {
- attributeKey: attr.attribute_key,
- attributeI18nKey: `CUSTOM_ATTRIBUTE_${attr.attribute_display_type.toUpperCase()}`,
- inputType: this.customAttributeInputType(attr.attribute_display_type),
- filterOperators: this.getOperatorTypes(attr.attribute_display_type),
- attributeModel: 'custom_attributes',
- };
- });
- this.filterTypes = [...this.filterTypes, ...customAttributeTypes];
- this.filterGroups = [...allFilterGroups, customAttributesFormatted];
- },
-
- initializeExistingFilterToModal() {
- this.initializeStatusAndAssigneeFilterToModal();
- this.initializeInboxTeamAndLabelFilterToModal();
- },
- initializeStatusAndAssigneeFilterToModal() {
- if (this.activeStatus !== '') {
- this.appliedFilter.push({
- attribute_key: 'status',
- attribute_model: 'standard',
- filter_operator: 'equal_to',
- values: [
- {
- id: this.activeStatus,
- name: this.$t(
- `CHAT_LIST.CHAT_STATUS_FILTER_ITEMS.${this.activeStatus}.TEXT`
- ),
- },
- ],
- query_operator: 'and',
- custom_attribute_type: '',
- });
- }
- if (this.activeAssigneeTab === wootConstants.ASSIGNEE_TYPE.ME) {
- this.appliedFilter.push({
- attribute_key: 'assignee_id',
- filter_operator: 'equal_to',
- values: this.currentUserDetails,
- query_operator: 'and',
- custom_attribute_type: '',
- });
- }
- },
- initializeInboxTeamAndLabelFilterToModal() {
- if (this.conversationInbox) {
- this.appliedFilter.push({
- attribute_key: 'inbox_id',
- attribute_model: 'standard',
- filter_operator: 'equal_to',
- values: [
- {
- id: this.conversationInbox,
- name: this.inbox.name,
- },
- ],
- query_operator: 'and',
- custom_attribute_type: '',
- });
- }
- if (this.teamId) {
- this.appliedFilter.push({
- attribute_key: 'team_id',
- attribute_model: 'standard',
- filter_operator: 'equal_to',
- values: this.activeTeam,
- query_operator: 'and',
- custom_attribute_type: '',
- });
- }
- if (this.label) {
- this.appliedFilter.push({
- attribute_key: 'labels',
- attribute_model: 'standard',
- filter_operator: 'equal_to',
- values: [
- {
- id: this.label,
- name: this.label,
- },
- ],
- query_operator: 'and',
- custom_attribute_type: '',
- });
- }
- },
- },
-};
diff --git a/app/javascript/shared/mixins/specs/automationMixin.spec.js b/app/javascript/shared/mixins/specs/automationMixin.spec.js
deleted file mode 100644
index 336e35294..000000000
--- a/app/javascript/shared/mixins/specs/automationMixin.spec.js
+++ /dev/null
@@ -1,450 +0,0 @@
-import methodsMixin from '../../../dashboard/mixins/automations/methodsMixin';
-import {
- automation,
- customAttributes,
- agents,
- booleanFilterOptions,
- teams,
- labels,
- statusFilterOptions,
- campaigns,
- contacts,
- inboxes,
- languages,
- countries,
- slaPolicies,
- MESSAGE_CONDITION_VALUES,
- automationToSubmit,
- savedAutomation,
-} from './automationFixtures';
-import {
- AUTOMATIONS,
- AUTOMATION_ACTION_TYPES,
-} from '../../../dashboard/routes/dashboard/settings/automation/constants.js';
-
-import { createWrapper, createLocalVue } from '@vue/test-utils';
-import Vue from 'vue';
-import Vuex from 'vuex';
-const localVue = createLocalVue();
-localVue.use(Vuex);
-
-// Vuelidate required to test submit method
-
-const createComponent = (
- mixins,
- data,
- // eslint-disable-next-line default-param-last
- computed = {},
- // eslint-disable-next-line default-param-last
- methods = {},
- validations
-) => {
- const Component = {
- render() {},
- mixins,
- data,
- computed,
- methods,
- validations,
- };
- const Constructor = Vue.extend(Component);
- const vm = new Constructor().$mount();
- return createWrapper(vm);
-};
-
-const generateComputedProperties = () => {
- return {
- statusFilterOptions() {
- return statusFilterOptions;
- },
- agents() {
- return agents;
- },
- customAttributes() {
- return customAttributes;
- },
- labels() {
- return labels;
- },
- teams() {
- return teams;
- },
- booleanFilterOptions() {
- return booleanFilterOptions;
- },
- campaigns() {
- return campaigns;
- },
- contacts() {
- return contacts;
- },
- inboxes() {
- return inboxes;
- },
- languages() {
- return languages;
- },
- countries() {
- return countries;
- },
- slaPolicies() {
- return slaPolicies;
- },
- MESSAGE_CONDITION_VALUES() {
- return MESSAGE_CONDITION_VALUES;
- },
- };
-};
-
-describe('automationMethodsMixin', () => {
- it('getFileName returns the correct file name', () => {
- const data = () => {
- return {};
- };
- const wrapper = createComponent([methodsMixin], data);
- expect(
- wrapper.vm.getFileName(automation.actions[0], automation.files)
- ).toEqual(automation.files[0].filename);
- });
-
- it('getAttributes returns all attributes', () => {
- const data = () => {
- return {
- automationTypes: AUTOMATIONS,
- };
- };
- const wrapper = createComponent([methodsMixin], data);
- expect(wrapper.vm.getAttributes('conversation_created')).toEqual(
- AUTOMATIONS.conversation_created.conditions
- );
- });
-
- it('getAttributes returns all respective attributes', () => {
- const data = () => {
- return {
- allCustomAttributes: customAttributes,
- automationTypes: AUTOMATIONS,
- automation,
- };
- };
- const wrapper = createComponent([methodsMixin], data);
- expect(wrapper.vm.getInputType('status')).toEqual('multi_select');
- expect(wrapper.vm.getInputType('my_list')).toEqual('search_select');
- });
-
- it('getOperators returns all respective operators', () => {
- const data = () => {
- return {
- allCustomAttributes: customAttributes,
- automationTypes: AUTOMATIONS,
- automation,
- };
- };
- const wrapper = createComponent([methodsMixin], data);
- expect(wrapper.vm.getOperators('status')).toEqual(
- AUTOMATIONS.conversation_created.conditions[0].filterOperators
- );
- });
-
- it('getAutomationType returns the correct automationType', () => {
- const data = () => {
- return {
- automationTypes: AUTOMATIONS,
- automation,
- };
- };
- const wrapper = createComponent([methodsMixin], data);
- expect(wrapper.vm.getAutomationType('status')).toEqual(
- AUTOMATIONS[automation.event_name].conditions[0]
- );
- });
-
- it('getConditionDropdownValues returns respective condition dropdown values', () => {
- const computed = generateComputedProperties();
- const data = () => {
- return {
- allCustomAttributes: customAttributes,
- };
- };
- const wrapper = createComponent([methodsMixin], data, computed);
- expect(wrapper.vm.getConditionDropdownValues('status')).toEqual(
- statusFilterOptions
- );
- expect(wrapper.vm.getConditionDropdownValues('team_id')).toEqual(teams);
- expect(wrapper.vm.getConditionDropdownValues('assignee_id')).toEqual(
- agents
- );
- expect(wrapper.vm.getConditionDropdownValues('contact')).toEqual(contacts);
- expect(wrapper.vm.getConditionDropdownValues('inbox_id')).toEqual(inboxes);
- expect(wrapper.vm.getConditionDropdownValues('campaigns')).toEqual(
- campaigns
- );
- expect(wrapper.vm.getConditionDropdownValues('browser_language')).toEqual(
- languages
- );
- expect(wrapper.vm.getConditionDropdownValues('country_code')).toEqual(
- countries
- );
- expect(wrapper.vm.getConditionDropdownValues('message_type')).toEqual(
- MESSAGE_CONDITION_VALUES
- );
- });
-
- it('appendNewCondition appends a new condition to the automation data property', () => {
- const condition = {
- attribute_key: 'status',
- filter_operator: 'equal_to',
- values: '',
- query_operator: 'and',
- custom_attribute_type: '',
- };
- const data = () => {
- return {
- automation,
- };
- };
- const wrapper = createComponent([methodsMixin], data);
- wrapper.vm.appendNewCondition();
- expect(automation.conditions[automation.conditions.length - 1]).toEqual(
- condition
- );
- });
-
- it('appendNewAction appends a new condition to the automation data property', () => {
- const action = {
- action_name: 'assign_agent',
- action_params: [],
- };
- const data = () => {
- return {
- automation,
- };
- };
- const wrapper = createComponent([methodsMixin], data);
- wrapper.vm.appendNewAction();
- expect(automation.actions[automation.actions.length - 1]).toEqual(action);
- });
-
- it('removeFilter removes the given condition in the automation', () => {
- const data = () => {
- return {
- automation,
- };
- };
- const wrapper = createComponent([methodsMixin], data);
- wrapper.vm.removeFilter(0);
- expect(automation.conditions.length).toEqual(1);
- });
-
- it('removeAction removes the given action in the automation', () => {
- const data = () => {
- return {
- automation,
- };
- };
- const wrapper = createComponent([methodsMixin], data);
- wrapper.vm.removeAction(0);
- expect(automation.actions.length).toEqual(1);
- });
-
- it('resetFilter resets the current automation conditions', () => {
- const data = () => {
- return {
- automation: automationToSubmit,
- automationTypes: AUTOMATIONS,
- };
- };
- const conditionAfterReset = {
- attribute_key: 'status',
- filter_operator: 'equal_to',
- values: '',
- query_operator: 'and',
- custom_attribute_type: '',
- };
- const wrapper = createComponent([methodsMixin], data);
- wrapper.vm.resetFilter(0, automationToSubmit.conditions[0]);
- expect(automation.conditions[0]).toEqual(conditionAfterReset);
- });
-
- it('showUserInput returns boolean value based on the operator type', () => {
- const data = () => {
- return {};
- };
- const wrapper = createComponent([methodsMixin], data);
- expect(wrapper.vm.showUserInput('is_present')).toBeFalsy();
- expect(wrapper.vm.showUserInput('is_not_present')).toBeFalsy();
- expect(wrapper.vm.showUserInput('equal_to')).toBeTruthy();
- expect(wrapper.vm.showUserInput('not_equal_to')).toBeTruthy();
- });
-
- it('showActionInput returns boolean value based on the action type', () => {
- const data = () => {
- return {
- automationActionTypes: AUTOMATION_ACTION_TYPES,
- };
- };
- const wrapper = createComponent([methodsMixin], data);
- expect(wrapper.vm.showActionInput('send_email_to_team')).toBeFalsy();
- expect(wrapper.vm.showActionInput('send_message')).toBeFalsy();
- expect(wrapper.vm.showActionInput('send_webhook_event')).toBeTruthy();
- expect(wrapper.vm.showActionInput('resolve_conversation')).toBeFalsy();
- expect(wrapper.vm.showActionInput('add_label')).toBeTruthy();
- });
-
- it('resetAction resets the action to default state', () => {
- const data = () => {
- return {
- automation,
- };
- };
- const wrapper = createComponent([methodsMixin], data);
- wrapper.vm.resetAction(0);
- expect(automation.actions[0].action_params).toEqual([]);
- });
-
- it('manifestConditions resets the action to default state', () => {
- const data = () => {
- return {
- automation: {},
- allCustomAttributes: customAttributes,
- automationTypes: AUTOMATIONS,
- };
- };
- const methods = {
- getConditionDropdownValues() {
- return statusFilterOptions;
- },
- };
-
- const manifestedConditions = [
- {
- values: [
- {
- id: 'open',
- name: 'Open',
- },
- ],
- attribute_key: 'status',
- filter_operator: 'equal_to',
- query_operator: 'and',
- },
- ];
- const wrapper = createComponent([methodsMixin], data, {}, methods);
- expect(wrapper.vm.manifestConditions(savedAutomation)).toEqual(
- manifestedConditions
- );
- });
-
- it('generateActionsArray return the manifested actions array', () => {
- const data = () => {
- return {
- automationActionTypes: AUTOMATION_ACTION_TYPES,
- };
- };
- const computed = {
- agents() {
- return agents;
- },
- labels() {
- return labels;
- },
- teams() {
- return teams;
- },
- };
-
- const methods = {
- getActionDropdownValues() {
- return [
- {
- id: 2,
- name: 'testlabel',
- },
- {
- id: 1,
- name: 'snoozes',
- },
- ];
- },
- };
- const testAction = {
- action_name: 'add_label',
- action_params: [2],
- };
-
- const expectedActionArray = [
- {
- id: 2,
- name: 'testlabel',
- },
- ];
-
- const wrapper = createComponent([methodsMixin], data, computed, methods);
- expect(wrapper.vm.generateActionsArray(testAction)).toEqual(
- expectedActionArray
- );
- });
-
- it('manifestActions manifest the received action and generate the correct array', () => {
- const data = () => {
- return {
- automation: {},
- allCustomAttributes: customAttributes,
- automationTypes: AUTOMATIONS,
- };
- };
- const methods = {
- generateActionsArray() {
- return [
- {
- id: 2,
- name: 'testlabel',
- },
- ];
- },
- };
- const expectedActions = [
- {
- action_name: 'add_label',
- action_params: [
- {
- id: 2,
- name: 'testlabel',
- },
- ],
- },
- ];
- const wrapper = createComponent([methodsMixin], data, {}, methods);
- expect(wrapper.vm.manifestActions(savedAutomation)).toEqual(
- expectedActions
- );
- });
-
- it('getActionDropdownValues returns Action dropdown Values', () => {
- const data = () => {
- return {};
- };
- const computed = {
- agents() {
- return agents;
- },
- labels() {
- return labels;
- },
- teams() {
- return teams;
- },
- slaPolicies() {
- return slaPolicies;
- },
- };
- const expectedActionDropdownValues = [
- { id: 'testlabel', name: 'testlabel' },
- { id: 'snoozes', name: 'snoozes' },
- ];
- const wrapper = createComponent([methodsMixin], data, computed);
- expect(wrapper.vm.getActionDropdownValues('add_label')).toEqual(
- expectedActionDropdownValues
- );
- });
-});
diff --git a/app/javascript/shared/mixins/specs/filterMixin.spec.js b/app/javascript/shared/mixins/specs/filterMixin.spec.js
deleted file mode 100644
index 4b54e9326..000000000
--- a/app/javascript/shared/mixins/specs/filterMixin.spec.js
+++ /dev/null
@@ -1,17 +0,0 @@
-import filterMixin from '../filterMixin';
-import { shallowMount } from '@vue/test-utils';
-import MockComponent from './MockComponent.vue';
-
-describe('Test mixin function', () => {
- const wrapper = shallowMount(MockComponent, {
- mixins: [filterMixin],
- });
-
- it('should return proper value from bool', () => {
- expect(wrapper.vm.setFilterAttributes).toBeTruthy();
- });
-
- it('should return proper value from bool', () => {
- expect(wrapper.vm.initializeExistingFilterToModal).toBeTruthy();
- });
-});