Files
icehrm/test/frontend/cypress/commmon/ice-cypress-test.js
2020-05-23 20:01:53 +02:00

141 lines
4.4 KiB
JavaScript

const config = require('../support/config');
class IceCypressTest {
constructor(moduleUrl, element, isRemoteTable) {
this.moduleUrl = moduleUrl;
this.element = element;
this.isRemoteTable = isRemoteTable;
this.titleDataAttributeName = 'data-original-title';
if (isRemoteTable) {
this.titleDataAttributeName = 'title';
}
}
loadTable(cy, count = config.DEFAULT_MAX_PAGE_SIZE) {
cy.get(`#${this.element} table tbody`).find('tr')
.its('length').should('eq', count);
}
viewElement(cy, viewButtonSelector = null) {
cy.server().route('GET', `/${config.URL_PREFIX}/service.php*`).as('getElement');
cy.get(`#${this.element} table tbody`).find('tr').first()
.find(viewButtonSelector || `.center div img[${this.titleDataAttributeName}='View']`)
.should("be.visible")
.click();
if (config.WAIT_ON_TIME) {
cy.wait(config.WAIT_TIME);
} else {
cy.wait('@getElement').its('status').should('be', config.DEFAULT_STATUS);
}
}
viewElementValidate(cy, validation = []) {
validation.forEach((rule) => {
cy.get(rule[0]).then(element => expect(element.text()).eq(rule[1]));
});
}
editElement(cy, update, editButtonSelector = null) {
cy.server().route('POST', `/${config.URL_PREFIX}/service.php*`).as('getElement');
cy.get(`#${this.element} table tbody`).find('tr').first().find(editButtonSelector || `.center div img[${this.titleDataAttributeName}='Edit']`)
.should("be.visible")
.click();
if (config.WAIT_ON_TIME) {
cy.wait(config.WAIT_TIME);
} else {
cy.wait('@getElement').its('status').should('be', config.DEFAULT_STATUS);
}
update.forEach((item) => {
cy.get(item[0]).clear().type(item[1]).should('have.value', item[1]);
});
}
select2Click(id, value) {
cy.get(`#s2id_${id}`).should("be.visible").click();
cy.focused().clear().type(value).should('have.value', value);
cy.get('.select2-drop:visible').find('.select2-results li').first()
.should("be.visible")
.click();
}
clickSave(cy) {
cy.get(`#${this.element}Form .saveBtn`).should("be.visible").click();
}
editElementValidate(cy, validation = [], editButtonSelector) {
if (this.isRemoteTable) {
cy.server().route('GET', `/${config.URL_PREFIX}/data.php*`).as('getAfterSave');
} else {
cy.server().route('POST', `/${config.URL_PREFIX}/service.php*`).as('getAfterSave');
}
// Wait for data table response
if (config.WAIT_ON_TIME) {
cy.wait(config.WAIT_TIME);
} else {
cy.wait('@getAfterSave').its('status').should('be', config.DEFAULT_STATUS);
}
cy.server().route('POST', `/${config.URL_PREFIX}/service.php*`).as('getElementAfterSave');
// Click on edit and wait
cy.get(`#${this.element} table tbody`).find('tr').first().find(editButtonSelector || `.center div img[${this.titleDataAttributeName}='Edit']`)
.should("be.visible")
.click();
if (config.WAIT_ON_TIME) {
cy.wait(config.WAIT_TIME);
} else {
cy.wait('@getElementAfterSave').its('status').should('be', config.DEFAULT_STATUS);
}
validation.forEach((item) => {
cy.get(item[0]).then(element => expect(element.val()).eq(item[1]));
});
}
canNotEditElement(cy, editButtonSelector = null) {
cy.get(`#${this.element} table tbody`).find('tr')
.first().find(editButtonSelector || ".center div img[title='Edit']")
.should('not.exist');
}
loadModule(cy) {
// Request to watch and wait
if (this.isRemoteTable) {
cy.server().route('GET', `/${config.URL_PREFIX}/data.php*`).as('get');
} else {
cy.server().route('POST', `/${config.URL_PREFIX}/service.php*`).as('get');
}
// Visit module
cy.visit(`${config.BASE_URL}?${this.moduleUrl}`);
// Wait for data table response
if (config.WAIT_ON_TIME) {
cy.wait(config.WAIT_TIME);
} else {
cy.wait('@get').its('status').should('be', config.DEFAULT_STATUS);
}
}
switchTab(cy, tabName = null) {
if (this.isRemoteTable) {
cy.server().route('GET', `/${config.URL_PREFIX}/data.php*`).as('getTab');
} else {
cy.server().route('POST', `/${config.URL_PREFIX}/service.php*`).as('getTab');
}
cy.get(tabName || `#tab${this.element}`).should("be.visible").click();
if (config.WAIT_ON_TIME) {
cy.wait(config.WAIT_TIME);
} else {
cy.wait('@getTab').its('status').should('be', config.DEFAULT_STATUS);
}
}
}
module.exports = IceCypressTest;