export const mappingTragetDDL = () => { return cy.get('select[data-tests-id="mappingDdl"]'); }; export const getExistRulesList = () => { return cy.get('option[data-tests-id="templateOptionsExist"]'); }; export const getNotExistRulesList = () => { return cy.get('option[data-tests-id="templateOptionsNotExist"]'); }; export const selectVersionAndTypeAndAddFirstRule = () => { return cy .get('select[data-tests-id="selectVersion"]') .select('4.1') .get('select[data-tests-id="selectEventType"]') .select('syslog') .get('button[data-tests-id="btnAddFirstRule"]') .click(); }; export const fillRuleDescription = text => { return cy .get('input[data-tests-id="inputDescription"]') .clear() .type(text); }; export const addMapAndDeleteRowAction = () => { cy.get('select[data-tests-id="selectAction"]').select('map'); cy.get('button[data-tests-id="btnAddAction"]').click(); // fill map action cy .get('input[data-tests-id="valueInput"]') .first() .type('B') .should('have.value', 'B'); return cy .get('input[data-tests-id="key"]') .type('Key1') .should('have.value', 'Key1') .get('input[data-tests-id="value"]') .type('Key1') .should('have.value', 'Key1') .get('button[data-tests-id="btn-add-row"]') .click() .get('input[data-tests-id="key"]') .last() .type('Key2') .should('have.value', 'Key2') .get('input[data-tests-id="value"]') .last() .type('Key2') .should('have.value', 'Key2') .get('button[data-tests-id="btn-add-row"]') .click() .get('input[data-tests-id="key"]') .last() .type('Key3') .should('have.value', 'Key3') .get('input[data-tests-id="value"]') .last() .type('Key3') .should('have.value', 'Key3') .get('button[data-tests-id="btn-remove-row"]') .last() .click(); }; export const addCopyAction = () => { return cy .get('select[data-tests-id="selectAction"]') .select('copy') .get('button[data-tests-id="btnAddAction"]') .click() .get('input[data-tests-id="valueInput"]') .type('A') .should('have.value', 'A') .get('span[data-tests-id="openTargetTree"]') .click() .get('.bottom-select') .should('be.visible') .find('.toggle-children') .first() .click() .get('span[data-tests-id="targetNode"]') .should(node => { expect(node.eq(0)).to.contain('commonEventHeader'); expect(node.eq(1)).to.contain('domain'); }) .each(($el, index) => { if (index === 1) { cy.wrap($el).click(); } }); }; export const editFirstRule = () => { return cy .get('div[data-tests-id="ruleElement"]') .first() .trigger('mouseover') .get('button[data-tests-id="editRule"]') .should('be.visible') .click(); }; export const editLastRule = () => { return cy .get('div[data-tests-id="ruleElement"]') .last() .trigger('mouseover') .get('button[data-tests-id="editRule"]') .should('be.visible') .click(); }; export const deleteFirstRule = () => { cy .get('div[data-tests-id="ruleElement"]') .first() .trigger('mouseover') .get('button[data-tests-id="deleteRule"]') .should('be.visible') .click() .get('div[data-tests-id="delete-popup"]'); cy.deleteRule(); return cy.get('button[data-tests-id="btnDelete"]').click(); }; export const translateValue = () => { return ( '{"processing":[{"phase":"snmp_map","processors":[{"array":"varbinds","datacolumn' + '":"varbind_value","keycolumn":"varbind_oid","class":"SnmpConvertor"},{"phase":"s' + 'to2","class":"RunPhase"}]},{"phase":"sto2","processors":[{"updates":{"event.comm' + 'onEventHeader.domain":"a"},"class":"Set"}]},{"phase":"sto2","processors":[{"phas' + 'e":"map_publish","class":"RunPhase"}]}]}' ); }; const NUMBER_OF_EXIST_ITEMS = 3; const NUMBER_OF_NOT_EXIST_ITEMS = 16; describe('Rule engine - E2E test flow with mock', () => { describe('Checking rules exist and not exist separation', () => { beforeEach(() => { cy.httpGenerateMappingRulesFileName(); cy.httpGetDDLData(); cy.getMCListEmpty(); cy.homePage(); cy.get('button[data-tests-id="btn-create-mc"]').click(); cy.fillNewMcForm(); cy.httpCreateNewMc(); cy.emptyRuleEngine('Type1'); cy.get('button[data-tests-id="createMonitoring"]').click(); cy .get('#ui-tabpanel-1-label') .should('contain', 'map') .click(); }); it('In exist group contain 3 visible options and not exist 16 visible', () => { mappingTragetDDL() .should('be.visible') .contains('json'); getExistRulesList() .not('[hidden]') .should('have.length', NUMBER_OF_EXIST_ITEMS); getNotExistRulesList() .not('[hidden]') .should('have.length', NUMBER_OF_NOT_EXIST_ITEMS); }); }); describe('Mapping target select', () => { beforeEach(() => { cy.httpGetDDLData(); cy.getMCListEmpty(); cy.homePage(); cy.get('button[data-tests-id="btn-create-mc"]').click(); cy.fillNewMcForm(); cy.httpCreateNewMc(); cy.emptyRuleEngine('Type1'); cy.get('button[data-tests-id="createMonitoring"]').click(); cy .get('#ui-tabpanel-1-label') .should('contain', 'map') .click(); }); it('should exist and contain options', () => { mappingTragetDDL() .should('be.visible') .contains('json'); }); }); describe('Fill all available Actions', () => { beforeEach(() => { cy.httpGetDDLData(); cy.getMCListEmpty(); cy.homePage(); cy.get('button[data-tests-id="btn-create-mc"]').click(); cy.fillNewMcForm(); cy.httpCreateNewMc(); cy.emptyRuleEngine('Type1'); cy .get('button[data-tests-id="createMonitoring"]') .click() .get('#ui-tabpanel-1-label') .should('contain', 'map') .click(); cy.httpTargetTree(); selectVersionAndTypeAndAddFirstRule(); fillRuleDescription('newRule'); }); it('add copy action', () => { addCopyAction(); }); it('add concat action', () => { cy.get('select[data-tests-id="selectAction"]').select('concat'); cy.get('button[data-tests-id="btnAddAction"]').click(); // fill concat action cy .get('input[data-tests-id="valueInput"]') .first() .type('A') .should('have.value', 'A'); cy .get('input[data-tests-id="valueInput"]') .last() .type('B') .should('have.value', 'B'); cy .get('span[data-tests-id="openTargetTree"]') .click() .get('.bottom-select') .should('be.visible') .find('.toggle-children') .first() .click(); cy .get('span[data-tests-id="targetNode"]') .should(node => { expect(node.eq(0)).to.contain('commonEventHeader'); expect(node.eq(1)).to.contain('domain'); }) .each(($el, index) => { if (index === 1) { cy.wrap($el).click(); } }); cy .get('input[data-tests-id="inputTarget"]') .should('have.value', 'event.commonEventHeader.domain'); }); it('add map action', () => { addMapAndDeleteRowAction(); cy .get('span[data-tests-id="openTargetTree"]') .click() .get('.bottom-select') .should('be.visible') .find('.toggle-children') .first() .click(); cy .get('span[data-tests-id="targetNode"]') .should(node => { expect(node.eq(0)).to.contain('commonEventHeader'); expect(node.eq(1)).to.contain('domain'); }) .each(($el, index) => { if (index === 1) { cy.wrap($el).click(); } }); cy.get('input[data-tests-id="defaultCheckbox"]').click(); cy.get('input[data-tests-id="defaultInput"]').type('default value'); cy .get('input[data-tests-id="inputTarget"]') .should('have.value', 'event.commonEventHeader.domain'); }); it('add date-formatter action', () => { cy.get('select[data-tests-id="selectAction"]').select('date formatter'); cy.get('button[data-tests-id="btnAddAction"]').click(); // fill date-formatter action Section 1 cy .get('input[data-tests-id="valueInput"]') .first() .type('A') .should('have.value', 'A') .get('span[data-tests-id="openTargetTree"]') .click() .get('.bottom-select') .should('be.visible') .find('.toggle-children') .first() .click() .get('span[data-tests-id="targetNode"]') .should(node => { expect(node.eq(0)).to.contain('commonEventHeader'); expect(node.eq(1)).to.contain('domain'); }) .each(($el, index) => { if (index === 1) { cy.wrap($el).click(); } }); cy .get('input[data-tests-id="inputTarget"]') .should('have.value', 'event.commonEventHeader.domain'); // Section 2 cy .get('input[data-tests-id="InputFromFormat"]') .type('04/03/2018') .should('have.value', '04/03/2018') .get('input[data-tests-id="InputFromTimezone"]') .type('11:50:00') .should('have.value', '11:50:00') .get('input[data-tests-id="InputToFormat"]') .type('04/08/2018') .should('have.value', '04/08/2018') .get('input[data-tests-id="InputToTimezone"]') .type('11:50:00') .should('have.value', '11:50:00'); }); it('add conditional action', () => { cy .get('input[data-tests-id="isCondition"]') .click() .get('input[data-tests-id="left"]') .type('ABC') .should('have.value', 'ABC'); cy .get('select[data-tests-id="selectOperator"]') .select('startsWith') .get('input[data-tests-id="right"]') .type('A') .should('have.value', 'A'); cy .get('button[data-tests-id="addCondition"]') .click() .get('input[data-tests-id="left"]') .last() .type('DEF') .should('have.value', 'DEF'); cy .get('select[data-tests-id="selectOperator"]') .last() .select('endsWith') .get('input[data-tests-id="right"]') .last() .type('F') .should('have.value', 'F'); cy .get('button[data-tests-id="addCondition"]') .click() .get('input[data-tests-id="left"]') .last() .type('HIJ') .should('have.value', 'HIJ'); cy .get('select[data-tests-id="selectOperator"]') .last() .select('equals') .get('input[data-tests-id="right"]') .last() .type('HHH') .should('have.value', 'HHH'); cy .get('button[data-tests-id="RemoveCondition"]') .last() .click() .get('button[data-tests-id="addConditionGroup"]') .click(); // try to delete element (1 of 2 items in group) cy .get('button[data-tests-id="RemoveCondition"]') .last() .click() .get('input[data-tests-id="left"]') .eq(2) .type('KLM') .should('have.value', 'KLM'); cy .get('select[data-tests-id="selectOperator"]') .eq(2) .select('notEqual') .get('input[data-tests-id="right"]') .eq(2) .type('MMM') .should('have.value', 'MMM') .get('input[data-tests-id="left"]') .last() .type('NOP') .should('have.value', 'NOP'); cy .get('select[data-tests-id="selectOperator"]') .last() .select('contains') .get('input[data-tests-id="right"]') .last() .type('PPP') .should('have.value', 'PPP'); cy .get('button[data-tests-id="addCondition"]') .last() .click() .get('input[data-tests-id="left"]') .last() .type('QQQ') .should('have.value', 'QQQ'); cy .get('select[data-tests-id="selectOperator"]') .last() .select('endsWith') .get('input[data-tests-id="right"]') .last() .type('Q') .should('have.value', 'Q') .get('button[data-tests-id="RemoveCondition"]') .last() .click(); cy .get('button[data-tests-id="removeConditionNode"]') .last() .click(); }); it('add clear action', () => { cy .get('select[data-tests-id="selectAction"]') .select('clear') .get('button[data-tests-id="btnAddAction"]') .click() .get('input[data-tests-id="valueInput"]') .type('ABC') .should('have.value', 'ABC'); cy .get('button[data-tests-id="btnAddInput"]') .click() .get('input[data-tests-id="valueInput"]') .last() .type('DEA') .should('have.value', 'DEA'); cy .get('button[data-tests-id="btnDelete"]') .first() .click(); }); it('add replace text action', () => { cy .get('select[data-tests-id="selectAction"]') .select('replace text') .get('button[data-tests-id="btnAddAction"]') .click(); cy .get('input[data-tests-id="valueInput"]') .type('ABC') .should('have.value', 'ABC'); cy .get('input[data-tests-id="InputFindWhat"]') .type('AAA') .should('have.value', 'AAA'); cy .get('input[data-tests-id="InputReplaceWith"]') .type('BBB') .should('have.value', 'BBB'); }); it('add log text action', () => { cy .get('select[data-tests-id="selectAction"]') .select('log text') .get('button[data-tests-id="btnAddAction"]') .click(); cy .get('input[data-tests-id="InputLogText"]') .type('ABC') .should('have.value', 'ABC'); cy .get('input[data-tests-id="InputLogName"]') .type('AAA') .should('have.value', 'AAA'); cy .get('input[data-tests-id="InputLogLevel"]') .type('BBB') .should('have.value', 'BBB'); }); it('add log event action', () => { cy .get('select[data-tests-id="selectAction"]') .select('log event') .get('button[data-tests-id="btnAddAction"]') .click(); cy .get('input[data-tests-id="InputLogTitle"]') .type('Title test') .should('have.value', 'Title test'); }); }); describe('rule and Actions CRUD Procedure', () => { beforeEach(() => { cy.httpGetDDLData(); cy.getMCListEmpty(); cy.homePage(); cy.get('button[data-tests-id="btn-create-mc"]').click(); cy.fillNewMcForm(); cy.httpCreateNewMc(); cy.emptyRuleEngine('Type1'); cy .get('button[data-tests-id="createMonitoring"]') .click() .get('#ui-tabpanel-1-label') .should('contain', 'map') .click(); cy.httpTargetTree(); selectVersionAndTypeAndAddFirstRule(); fillRuleDescription('newRule'); }); it('add clear action', () => { cy .get('select[data-tests-id="selectAction"]') .select('copy') .get('button[data-tests-id="btnAddAction"]') .click() .get('select[data-tests-id="selectAction"]') .select('concat') .get('button[data-tests-id="btnAddAction"]') .click() .get('select[data-tests-id="selectAction"]') .select('map') .get('button[data-tests-id="btnAddAction"]') .click() .get('select[data-tests-id="selectAction"]') .select('date formatter') .get('button[data-tests-id="btnAddAction"]') .click() .get('select[data-tests-id="selectAction"]') .select('log text') .get('button[data-tests-id="btnAddAction"]') .click() .get('select[data-tests-id="selectAction"]') .select('log event') .get('button[data-tests-id="btnAddAction"]') .click() .get('select[data-tests-id="selectAction"]') .select('replace text') .get('button[data-tests-id="btnAddAction"]') .click() .get('select[data-tests-id="selectAction"]') .select('clear') .get('button[data-tests-id="btnAddAction"]') .click(); }); it('add rule with copy action CRUD procedure', () => { // Create action addCopyAction(); cy.doneSaveRule(); cy.get('button[data-tests-id="btnDone"]').click(); // value approve editFirstRule(); cy .get('input[data-tests-id="valueInput"]') .should('have.value', 'a') .get('input[data-tests-id="inputTarget"]') .should('have.value', 'event.commonEventHeader.domain') // change value .get('input[data-tests-id="valueInput"]') .type('B') .get('button[data-tests-id="btnSave"]') .click(); cy.doneSaveAndEditRule(); cy.get('button[data-tests-id="btnDone"]').click(); // Delete copy action deleteFirstRule(); }); it('add multiple rules CRUD procedure', () => { // Create actions addCopyAction(); cy.doneSaveRule(); cy.get('button[data-tests-id="btnDone"]').click(); // Edit copy action - verify values editFirstRule(); cy .get('input[data-tests-id="valueInput"]') .should('have.value', 'a') .get('input[data-tests-id="inputTarget"]') .should('have.value', 'event.commonEventHeader.domain') .get('button[data-tests-id="btnDone"]') .click(); // Add new rule with map action cy.get('button[data-tests-id="addMoreRule"]').click(); fillRuleDescription('newRule2'); addMapAndDeleteRowAction(); cy.doneSaveMapRule(); cy.get('button[data-tests-id="btnDone"]').click(); // Verify map values editLastRule(); cy .get('input[data-tests-id="key"]') .first() .should('have.value', 'Key1') .get('input[data-tests-id="value"]') .first() .should('have.value', 'Key1') .get('input[data-tests-id="key"]') .last() .should('have.value', 'Key2') .get('input[data-tests-id="value"]') .last() .should('have.value', 'Key2'); cy.get('button[data-tests-id="btnDone"]').click(); // Delete copy Action deleteFirstRule(); }); it('add rule with log text action CRUD procedure', () => { cy .get('select[data-tests-id="selectAction"]') .select('log text') .get('button[data-tests-id="btnAddAction"]') .click(); cy .get('input[data-tests-id="InputLogText"]') .type('ABC') .should('have.value', 'ABC'); cy .get('input[data-tests-id="InputLogName"]') .type('AAA') .should('have.value', 'AAA'); cy .get('input[data-tests-id="InputLogLevel"]') .type('BBB') .should('have.value', 'BBB'); cy.doneSaveLogTextRule(); cy.get('button[data-tests-id="btnDone"]').click(); // value assertion editFirstRule(); cy .get('input[data-tests-id="InputLogText"]') .should('have.value', 'ABC') .get('input[data-tests-id="InputLogName"]') .should('have.value', 'AAA') .get('input[data-tests-id="InputLogLevel"]') .should('have.value', 'BBB'); cy.get('button[data-tests-id="btnDone"]').click(); }); }); describe('Translate and save Rule List', () => { beforeEach(() => { cy.httpGetDDLData(); cy.getMCListEmpty(); cy.homePage(); cy.get('button[data-tests-id="btn-create-mc"]').click(); cy.fillNewMcForm(); cy.httpCreateNewMc(); cy.emptyRuleEngine('Type1'); cy .get('button[data-tests-id="createMonitoring"]') .click() .get('#ui-tabpanel-1-label') .should('contain', 'map') .click(); cy.httpTargetTree(); selectVersionAndTypeAndAddFirstRule(); fillRuleDescription('newRule'); addCopyAction(); cy.doneSaveRule(); }); context('Play with save, back and done button', () => { it('should rule exist in list after save rule and click back', () => { cy .get('button[data-tests-id="btnSave"]') .click() .get('a[data-tests-id="btnBackRule"]') .click() .get('div[data-tests-id="ruleElement"]') .should('be.visible') .then(function($lis) { expect($lis).to.have.length(1); expect($lis.eq(0)).to.contain('newRule'); }); }); it('should rule exist in list after done edit rule', () => { cy .get('button[data-tests-id="btnDone"]') .click() .get('div[data-tests-id="ruleElement"]') .should('be.visible') .then(function($lis) { expect($lis).to.have.length(1); expect($lis.eq(0)).to.contain('newRule'); }); }); }); context('Translate', () => { it('should open advanced setting when translate successfuly', () => { cy.get('button[data-tests-id="btnDone"]').click(); cy.httpTransalte(); cy .get('button[data-tests-id="btnTranslate"]') .click() .get('.toast-container') .should('be.visible') .get('.map-setting-list > form > #Type1 > input') .should('be.visible') .and('have.value', translateValue()); }); }); }); });