diff --git a/cypress/e2e/edge-firewall/create-edge-firewall-rule-engine-header-criteria.cy.js b/cypress/e2e/edge-firewall/create-edge-firewall-rule-engine-header-criteria.cy.js new file mode 100644 index 000000000..056eafcd3 --- /dev/null +++ b/cypress/e2e/edge-firewall/create-edge-firewall-rule-engine-header-criteria.cy.js @@ -0,0 +1,82 @@ +/* eslint-disable cypress/no-unnecessary-waiting */ +import generateUniqueName from '../../support/utils' +import selectors from '../../support/selectors' + +let firewallName, ruleName + +describe('Edge Firewall spec', { tags: ['@dev5', '@xfail'] }, () => { + beforeEach(() => { + cy.login() + firewallName = generateUniqueName('EdgeFirewall') + ruleName = generateUniqueName('EdgeFirewallRule') + }) + + it('should create an Edge Firewall and run a function', () => { + cy.openProduct('Edge Firewall') + + // Act - create Edge Firewall + cy.get(selectors.edgeFirewall.createButton).click() + cy.get(selectors.edgeFirewall.nameInput).clear() + cy.get(selectors.edgeFirewall.nameInput).type(firewallName) + cy.get(selectors.edgeFirewall.edgeFunctionSwitch).click() + cy.get(selectors.edgeFirewall.wafEnabledSwitch).click() + cy.get(selectors.edgeFirewall.saveButton).click() + cy.verifyToast('success', 'Your Edge Firewall has been created') + + cy.get(selectors.edgeFirewall.rulesEngineTab).click() + cy.get(selectors.edgeFirewall.createRuleButton).click() + cy.get(selectors.edgeFirewall.ruleNameInput).click() + cy.get(selectors.edgeFirewall.ruleNameInput).type(ruleName) + cy.get(selectors.edgeFirewall.ruleDescriptionInput).clear() + cy.get(selectors.edgeFirewall.ruleDescriptionInput).type('My Rule Description') + cy.get(selectors.edgeFirewall.ruleCriteriaVariableDropdown).click() + cy.get(selectors.edgeFirewall.ruleCriteriaVariableDropdownHeaderAccept).click() + cy.get(selectors.edgeFirewall.ruleCriteriaOperatorDropdown).click() + cy.get(selectors.edgeFirewall.ruleCriteriaOperatorMatches).click() + cy.get(selectors.edgeFirewall.ruleCriteriaInput).clear() + cy.get(selectors.edgeFirewall.ruleCriteriaInput).type('test') + cy.get(selectors.edgeFirewall.ruleBehaviorDropdown).click() + cy.get(selectors.edgeFirewall.ruleBehaviorFirstOption).click() + + cy.intercept('POST', '/api/v3/edge_firewall/*/rules_engine*').as('addEdgeFirewallRule') + + cy.get(selectors.edgeFirewall.ruleSubmit).click() + + cy.wait('@addEdgeFirewallRule').then((interception) => { + const requestBody = interception.request.body + expect(requestBody.criteria[0][0].operator).to.equal('matches') + }) + + cy.verifyToast('success', 'Rule Engine successfully created') + + // Assert - Find the created rule + cy.get(selectors.edgeFirewall.rulesTableSearchInput).clear() + cy.get(selectors.edgeFirewall.rulesTableSearchInput).type(ruleName) + cy.get(selectors.edgeFirewall.rulesTableColumnName).should('have.text', ruleName) + cy.get(selectors.edgeFirewall.rulesTableColumnDescriptionShowMore).click() + cy.get(selectors.edgeFirewall.rulesTableColumnDescription).should( + 'have.text', + 'My Rule Description' + ) + + // Cleanup - Remove the created rule + cy.deleteEntityFromLoadedList().then(() => { + cy.verifyToast('Rules Engine successfully deleted') + }) + + // Assert - Find the created firewall + cy.get(selectors.edgeFirewall.mainSettingsTab).click() + cy.get(selectors.edgeFirewall.cancelButton).click() + cy.get(selectors.edgeFirewall.searchInput).clear() + cy.get(selectors.edgeFirewall.searchInput).type(firewallName) + cy.get(selectors.edgeFirewall.nameRow).should('have.text', firewallName) + cy.get(selectors.edgeFirewall.activeRow).should('have.text', 'Active') + }) + + afterEach(() => { + // Delete the firewall + cy.deleteEntityFromList({ entityName: firewallName, productName: 'Edge Firewall' }).then(() => { + cy.verifyToast('Edge Firewall successfully deleted') + }) + }) +}) diff --git a/cypress/support/selectors/product-selectors/edge-firewall.js b/cypress/support/selectors/product-selectors/edge-firewall.js index 5e93bbe7f..c1fac10f6 100644 --- a/cypress/support/selectors/product-selectors/edge-firewall.js +++ b/cypress/support/selectors/product-selectors/edge-firewall.js @@ -33,8 +33,10 @@ export default { createFunctionButton: '[data-testid="edge-firewall-functions-form__create-function-button"]', edgeFunctionActionbar: '[data-testid="create-edge-functions-drawer__action-bar"]', ruleCriteriaVariableDropdownRequestUri: '#criteria\\[0\\]\\[0\\]\\.variable_11', + ruleCriteriaVariableDropdownHeaderAccept: '#criteria\\[0\\]\\[0\\]\\.variable_1', ruleCriteriaOperatorDropdown: '[data-testid="edge-firewall-rules-form__operator[0]__dropdown"]', ruleCriteriaOperatorStartsWith: '#criteria\\[0\\]\\[0\\]\\.operator_2', + ruleCriteriaOperatorMatches: '#criteria\\[0\\]\\[0\\]\\.operator_0', ruleCriteriaOperatorFirstOption: '#criteria\\[0\\]\\[0\\]\\.operator_0', ruleCriteriaValueFirstOption: '#criteria\\[0\\]\\[0\\]\\.argument_0', ruleCriteriaInput: '[data-testid="edge-firewall-rules-form__argument[0][0]__input"]', diff --git a/src/views/EdgeFirewallRulesEngine/FormFields/FormFieldsEdgeFirewallRulesEngine.vue b/src/views/EdgeFirewallRulesEngine/FormFields/FormFieldsEdgeFirewallRulesEngine.vue index 6dafb0169..161a38f69 100644 --- a/src/views/EdgeFirewallRulesEngine/FormFields/FormFieldsEdgeFirewallRulesEngine.vue +++ b/src/views/EdgeFirewallRulesEngine/FormFields/FormFieldsEdgeFirewallRulesEngine.vue @@ -65,6 +65,10 @@ case 'header_origin': case 'header_referer': case 'header_user_agent': + return [ + { label: 'matches', value: 'matches' }, + { label: 'does not match', value: 'does_not_match' } + ] case 'network': return [ { label: 'matches', value: 'is_in_list' },