From 5ca1f133f471719786c5aa5e6c062a441fe07cb2 Mon Sep 17 00:00:00 2001 From: Lucas Mendes <92529166+lucasmendes21@users.noreply.github.com> Date: Fri, 20 Dec 2024 14:49:21 -0300 Subject: [PATCH] [UXE-5966] fix: incorrect argument when saving criteria rules engine (#2038) --- .../v4/edit-rules-engine-service.js | 3 +- .../v4/helper-criteria.js | 17 ++++++ .../v4/edit-rules-engine-service.test.js | 61 ++++++++++++++++--- 3 files changed, 71 insertions(+), 10 deletions(-) create mode 100644 src/services/edge-application-rules-engine-services/v4/helper-criteria.js diff --git a/src/services/edge-application-rules-engine-services/v4/edit-rules-engine-service.js b/src/services/edge-application-rules-engine-services/v4/edit-rules-engine-service.js index f627d38de..343b142ab 100644 --- a/src/services/edge-application-rules-engine-services/v4/edit-rules-engine-service.js +++ b/src/services/edge-application-rules-engine-services/v4/edit-rules-engine-service.js @@ -2,6 +2,7 @@ import { AxiosHttpClientAdapter } from '@/services/axios/AxiosHttpClientAdapter' import { makeEdgeApplicationV4BaseUrl } from '@/services/edge-application-services/v4/make-edge-application-v4-base-url' import * as Errors from '@/services/axios/errors' import { adaptBehavior } from './helper-behavior' +import { adaptCriteria } from './helper-criteria' import { extractApiError } from '@/helpers/extract-api-error' export const editRulesEngineService = async ({ id, payload, reorder = false }) => { @@ -28,7 +29,7 @@ const adapt = (payload, reorder) => { name, phase: phase.content || phase, behaviors: adaptBehavior(behaviors), - criteria, + criteria: adaptCriteria(criteria), active: isActive, description } diff --git a/src/services/edge-application-rules-engine-services/v4/helper-criteria.js b/src/services/edge-application-rules-engine-services/v4/helper-criteria.js new file mode 100644 index 000000000..4ce0ed941 --- /dev/null +++ b/src/services/edge-application-rules-engine-services/v4/helper-criteria.js @@ -0,0 +1,17 @@ +const isExistenceOperator = (operator) => ['exists', 'does_not_exist'].includes(operator) + +const processCriteria = (criteria) => { + if (!isExistenceOperator(criteria.operator)) { + return criteria + } + + // eslint-disable-next-line no-unused-vars + const { argument, ...processedCriteria } = criteria + return processedCriteria +} + +export const adaptCriteria = (criterias) => { + return criterias.map((criteriaArray) => { + return criteriaArray.map(processCriteria) + }) +} diff --git a/src/tests/services/edge-application-rules-engine-services/v4/edit-rules-engine-service.test.js b/src/tests/services/edge-application-rules-engine-services/v4/edit-rules-engine-service.test.js index 9634aa885..e3438ef81 100644 --- a/src/tests/services/edge-application-rules-engine-services/v4/edit-rules-engine-service.test.js +++ b/src/tests/services/edge-application-rules-engine-services/v4/edit-rules-engine-service.test.js @@ -2,6 +2,7 @@ import { AxiosHttpClientAdapter } from '@/services/axios/AxiosHttpClientAdapter' import * as Errors from '@/services/axios/errors' import { editRulesEngineService } from '@/services/edge-application-rules-engine-services/v4' import { describe, expect, it, vi } from 'vitest' +import { adaptCriteria } from '@/services/edge-application-rules-engine-services/v4/helper-criteria' const fixtures = { ruleEngineMock: { @@ -17,15 +18,13 @@ const fixtures = { } ], criteria: [ - { - entries: [ - { - variable: 'remote_addr', - operator: 'is_equal', - value: '127.0.0.1' - } - ] - } + [ + { + variable: 'remote_addr', + operator: 'is_equal', + value: '127.0.0.1' + } + ] ], isActive: true, description: 'Test rule description' @@ -123,4 +122,48 @@ describe('EdgeApplicationRulesEngineServices', () => { expect(promise).rejects.toBe('Bad Request Error') }) + + it('should remove argument from criteria when operator is "exists" or "does_not_exist"', () => { + const criterias = [ + [ + { + variable: 'remote_addr', + operator: 'exists', + argument: '192.168.1.1' + }, + { + variable: 'remote_addr', + operator: 'is_equal', + argument: '192.168.1.1' + }, + { + variable: 'remote_addr', + operator: 'does_not_exist', + argument: '192.168.1.2' + }, + ] + ] + + const expectedCriterias = [ + [ + { + variable: 'remote_addr', + operator: 'exists' + }, + { + variable: 'remote_addr', + operator: 'is_equal', + argument: '192.168.1.1' + }, + { + variable: 'remote_addr', + operator: 'does_not_exist' + }, + ] + ] + + const result = adaptCriteria(criterias) + + expect(result).toEqual(expectedCriterias) + }) })