Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Functional Tests - Add BO tests for taxes #15978

Merged
merged 21 commits into from Oct 18, 2019
Merged
Show file tree
Hide file tree
Changes from 20 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
8 changes: 8 additions & 0 deletions tests/puppeteer/campaigns/data/demo/tax.js
@@ -0,0 +1,8 @@
module.exports = {
DefaultFrTax: {
id: '1',
name: 'TVA FR 20%',
rate: '20',
enabled: true,
},
};
92 changes: 92 additions & 0 deletions tests/puppeteer/campaigns/data/demo/taxOptions.js
@@ -0,0 +1,92 @@
module.exports = [
{
enabled: true,
displayInShoppingCart: false,
basedOn: 'Delivery address',
useEcoTax: true,
},
{
enabled: true,
displayInShoppingCart: false,
basedOn: 'Delivery address',
useEcoTax: true,
ecoTax: 'EU VAT For Virtual Products',
},
{
enabled: true,
displayInShoppingCart: false,
basedOn: 'Delivery address',
useEcoTax: true,
ecoTax: 'FR Taux réduit (10%)',
},
{
enabled: true,
displayInShoppingCart: false,
basedOn: 'Delivery address',
useEcoTax: true,
ecoTax: 'FR Taux réduit (5.5%)',
},
{
enabled: true,
displayInShoppingCart: false,
basedOn: 'Delivery address',
useEcoTax: true,
ecoTax: 'FR Taux standard (20%)',
},
{
enabled: true,
displayInShoppingCart: false,
basedOn: 'Delivery address',
useEcoTax: true,
ecoTax: 'FR Taux super réduit (2.1%)',
},

{
enabled: true,
displayInShoppingCart: false,
basedOn: 'Invoice address',
useEcoTax: true,
ecoTax: 'EU VAT For Virtual Products',
},
{
enabled: true,
displayInShoppingCart: false,
basedOn: 'Invoice address',
useEcoTax: true,
ecoTax: 'FR Taux réduit (10%)',
},
{
enabled: true,
displayInShoppingCart: false,
basedOn: 'Invoice address',
useEcoTax: true,
ecoTax: 'FR Taux réduit (5.5%)',
},
{
enabled: true,
displayInShoppingCart: false,
basedOn: 'Invoice address',
useEcoTax: true,
ecoTax: 'FR Taux standard (20%)',
},
{
enabled: true,
displayInShoppingCart: false,
basedOn: 'Invoice address',
useEcoTax: true,
ecoTax: 'FR Taux super réduit (2.1%)',
},
{
enabled: true,
displayInShoppingCart: false,
basedOn: 'Invoice address',
useEcoTax: true,
ecoTax: 'No tax',
},
{
enabled: true,
displayInShoppingCart: false,
basedOn: 'Delivery address',
useEcoTax: false,
},
];
2 changes: 1 addition & 1 deletion tests/puppeteer/campaigns/data/faker/customer.js
Expand Up @@ -15,7 +15,7 @@ module.exports = class Customer {
this.monthOfBirth = customerToCreate.monthOfBirth || (this.birthDate.getMonth() + 1).toString();
this.dayOfBirth = customerToCreate.dayOfBirth || this.birthDate.getDate().toString();
this.enabled = customerToCreate.enabled === undefined ? true : customerToCreate.enabled;
this.partnerOffers = customerToCreate.partnerOffers || true;
this.partnerOffers = customerToCreate.partnerOffers === undefined ? true : customerToCreate.partnerOffers;
this.defaultCustomerGroup = customerToCreate.defaultCustomerGroup
|| faker.random.arrayElement(defaultCustomerGroups);
}
Expand Down
10 changes: 10 additions & 0 deletions tests/puppeteer/campaigns/data/faker/tax.js
@@ -0,0 +1,10 @@
const faker = require('faker');

module.exports = class Tax {
constructor(taxToCreate = {}) {
this.rate = taxToCreate.rate || faker.random.number({min: 1, max: 40}).toString();
this.name = taxToCreate.name || `TVA test ${this.rate}%`;
this.frName = taxToCreate.frName || this.name;
this.enabled = taxToCreate.enabled === undefined ? true : taxToCreate.enabled;
}
};
Expand Up @@ -186,7 +186,7 @@ describe('Filter And Quick Edit Customers', async () => {
await this.pageObjects.customersPage.filterCustomers(
'select',
'active',
DefaultAccount.enabled ? 'Yes' : 'NO',
DefaultAccount.enabled ? 'Yes' : 'No',
PierreRambaud marked this conversation as resolved.
Show resolved Hide resolved
);
const numberOfCustomersAfterFilter = await this.pageObjects.customersPage.getNumberFromText(
this.pageObjects.customersPage.customerGridTitle,
Expand All @@ -211,7 +211,7 @@ describe('Filter And Quick Edit Customers', async () => {
await this.pageObjects.customersPage.filterCustomers(
'select',
'newsletter',
DefaultAccount.newsletter ? 'Yes' : 'NO',
DefaultAccount.newsletter ? 'Yes' : 'No',
);
const numberOfCustomersAfterFilter = await this.pageObjects.customersPage.getNumberFromText(
this.pageObjects.customersPage.customerGridTitle,
Expand All @@ -237,7 +237,7 @@ describe('Filter And Quick Edit Customers', async () => {
await this.pageObjects.customersPage.filterCustomers(
'select',
'optin',
DefaultAccount.partnerOffers ? 'Yes' : 'NO',
DefaultAccount.partnerOffers ? 'Yes' : 'No',
);
const numberOfCustomersAfterFilter = await this.pageObjects.customersPage.getNumberFromText(
this.pageObjects.customersPage.customerGridTitle,
Expand Down
@@ -0,0 +1,208 @@
require('module-alias/register');
// Using chai
const {expect} = require('chai');
const helper = require('@utils/helpers');
const loginCommon = require('@commonTests/loginBO');
const {DefaultFrTax} = require('@data/demo/tax');
// Importing pages
const BOBasePage = require('@pages/BO/BObasePage');
const LoginPage = require('@pages/BO/login');
const DashboardPage = require('@pages/BO/dashboard');
const TaxesPage = require('@pages/BO/taxes');

let browser;
let page;
let numberOfTaxes = 0;

// Init objects needed
const init = async function () {
return {
boBasePage: new BOBasePage(page),
loginPage: new LoginPage(page),
dashboardPage: new DashboardPage(page),
taxesPage: new TaxesPage(page),
};
};

// Filter And Quick Edit taxes
describe('Filter And Quick Edit taxes', async () => {
// before and after functions
before(async function () {
browser = await helper.createBrowser();
page = await helper.newTab(browser);
this.pageObjects = await init();
});
after(async () => {
await helper.closeBrowser(browser);
});
// Login into BO and go to taxes page
loginCommon.loginBO();
it('should go to Taxes page', async function () {
await this.pageObjects.boBasePage.goToSubMenu(
this.pageObjects.boBasePage.internationalParentLink,
this.pageObjects.boBasePage.taxesLink,
);
const pageTitle = await this.pageObjects.taxesPage.getPageTitle();
await expect(pageTitle).to.contains(this.pageObjects.taxesPage.pageTitle);
});
it('should reset all filters and get Number of Taxes in BO', async function () {
if (await this.pageObjects.taxesPage.elementVisible(this.pageObjects.taxesPage.resetFilterButton, 2000)) {
await this.pageObjects.taxesPage.resetFilter();
}
numberOfTaxes = await this.pageObjects.taxesPage.getNumberFromText(
this.pageObjects.taxesPage.gridHeaderTitle,
);
await expect(numberOfTaxes).to.be.above(0);
});
// 1 : Filter Taxes
describe('Filter Taxes', async () => {
it('should filter by Id \'1\'', async function () {
await this.pageObjects.taxesPage.filterTaxes('input', 'id_tax', DefaultFrTax.id);
const numberOfTaxesAfterFilter = await this.pageObjects.taxesPage.getNumberFromText(
this.pageObjects.taxesPage.gridHeaderTitle,
);
await expect(numberOfTaxesAfterFilter).to.be.at.most(numberOfTaxes);
const textColumn = await this.pageObjects.taxesPage.getTextContent(
this.pageObjects.taxesPage.taxesGridColumn.replace('%ROW', 1).replace('%COLUMN', 'id_tax'),
);
await expect(textColumn).to.contains(DefaultFrTax.id);
});
it('should reset all filters', async function () {
if (await this.pageObjects.taxesPage.elementVisible(this.pageObjects.taxesPage.resetFilterButton, 2000)) {
await this.pageObjects.taxesPage.resetFilter();
}
const numberOfTaxesAfterReset = await this.pageObjects.taxesPage.getNumberFromText(
this.pageObjects.taxesPage.gridHeaderTitle,
);
await expect(numberOfTaxesAfterReset).to.equal(numberOfTaxes);
});
it('should filter by tax name', async function () {
await this.pageObjects.taxesPage.filterTaxes('input', 'name', DefaultFrTax.name);
const numberOfTaxesAfterFilter = await this.pageObjects.taxesPage.getNumberFromText(
this.pageObjects.taxesPage.gridHeaderTitle,
);
await expect(numberOfTaxesAfterFilter).to.be.at.most(numberOfTaxes);
const textColumn = await this.pageObjects.taxesPage.getTextContent(
this.pageObjects.taxesPage.taxesGridColumn.replace('%ROW', 1).replace('%COLUMN', 'name'),
);
await expect(textColumn).to.contains(DefaultFrTax.name);
});
it('should reset all filters', async function () {
if (await this.pageObjects.taxesPage.elementVisible(this.pageObjects.taxesPage.resetFilterButton, 2000)) {
await this.pageObjects.taxesPage.resetFilter();
}
const numberOfTaxesAfterReset = await this.pageObjects.taxesPage.getNumberFromText(
this.pageObjects.taxesPage.gridHeaderTitle,
);
await expect(numberOfTaxesAfterReset).to.equal(numberOfTaxes);
});
it('should filter by Rate', async function () {
await this.pageObjects.taxesPage.filterTaxes('input', 'rate', DefaultFrTax.rate);
const numberOfTaxesAfterFilter = await this.pageObjects.taxesPage.getNumberFromText(
this.pageObjects.taxesPage.gridHeaderTitle,
);
await expect(numberOfTaxesAfterFilter).to.be.at.most(numberOfTaxes);
const textColumn = await this.pageObjects.taxesPage.getTextContent(
this.pageObjects.taxesPage.taxesGridColumn.replace('%ROW', 1).replace('%COLUMN', 'rate'),
);
await expect(textColumn).to.contains(DefaultFrTax.rate);
});
it('should reset all filters', async function () {
if (await this.pageObjects.taxesPage.elementVisible(this.pageObjects.taxesPage.resetFilterButton, 2000)) {
await this.pageObjects.taxesPage.resetFilter();
}
const numberOfTaxesAfterReset = await this.pageObjects.taxesPage.getNumberFromText(
this.pageObjects.taxesPage.gridHeaderTitle,
);
await expect(numberOfTaxesAfterReset).to.equal(numberOfTaxes);
});
it('should filter by Enabled \'Yes\'', async function () {
await this.pageObjects.taxesPage.filterTaxes(
'select',
'active',
DefaultFrTax.enabled ? 'Yes' : 'No',
);
const numberOfTaxesAfterFilter = await this.pageObjects.taxesPage.getNumberFromText(
this.pageObjects.taxesPage.gridHeaderTitle,
);
await expect(numberOfTaxesAfterFilter).to.be.at.most(numberOfTaxes);
/* eslint-disable no-await-in-loop */
for (let i = 1; i <= numberOfTaxesAfterFilter; i++) {
const textColumn = await this.pageObjects.taxesPage.getTextContent(
this.pageObjects.taxesPage.taxesGridColumn.replace('%ROW', i).replace('%COLUMN', 'active'),
);
await expect(textColumn).to.contains('check');
}
/* eslint-enable no-await-in-loop */
});
it('should reset all filters', async function () {
if (await this.pageObjects.taxesPage.elementVisible(this.pageObjects.taxesPage.resetFilterButton, 2000)) {
await this.pageObjects.taxesPage.resetFilter();
}
const numberOfTaxesAfterReset = await this.pageObjects.taxesPage.getNumberFromText(
this.pageObjects.taxesPage.gridHeaderTitle,
);
await expect(numberOfTaxesAfterReset).to.equal(numberOfTaxes);
});
});
// 2 : Edit taxes in list
describe('Quick Edit Taxes', async () => {
// Steps
it('should filter by name', async function () {
await this.pageObjects.taxesPage.filterTaxes('input', 'name', DefaultFrTax.name);
const numberOfTaxesAfterFilter = await this.pageObjects.taxesPage.getNumberFromText(
this.pageObjects.taxesPage.gridHeaderTitle,
);
await expect(numberOfTaxesAfterFilter).to.be.at.most(numberOfTaxes);
const textColumn = await this.pageObjects.taxesPage.getTextContent(
this.pageObjects.taxesPage.taxesGridColumn.replace('%ROW', 1).replace('%COLUMN', 'name'),
);
await expect(textColumn).to.contains(DefaultFrTax.name);
});
it('should disable first tax', async function () {
const isActionPerformed = await this.pageObjects.taxesPage.updateEnabledValue(
'1',
false,
);
if (isActionPerformed) {
const resultMessage = await this.pageObjects.taxesPage.getTextContent(
this.pageObjects.taxesPage.alertSuccessBlockParagraph,
);
await expect(resultMessage).to.contains(this.pageObjects.taxesPage.successfulUpdateStatusMessage);
}
const isStatusChanged = await this.pageObjects.taxesPage.elementVisible(
this.pageObjects.taxesPage.toggleColumnNotValidIcon.replace('%ROW', 1)
.replace('%COLUMN', 'active'),
100,
);
await expect(isStatusChanged).to.be.true;
});
it('should enable first tax', async function () {
const isActionPerformed = await this.pageObjects.taxesPage.updateEnabledValue(
'1',
true,
);
if (isActionPerformed) {
const resultMessage = await this.pageObjects.taxesPage.getTextContent(
this.pageObjects.taxesPage.alertSuccessBlockParagraph,
);
await expect(resultMessage).to.contains(this.pageObjects.taxesPage.successfulUpdateStatusMessage);
}
const isStatusChanged = await this.pageObjects.taxesPage.elementVisible(
this.pageObjects.taxesPage.toggleColumnValidIcon.replace('%ROW', 1)
.replace('%COLUMN', 'active'),
100,
);
await expect(isStatusChanged).to.be.true;
});
it('should reset all filters', async function () {
if (await this.pageObjects.taxesPage.elementVisible(this.pageObjects.taxesPage.resetFilterButton, 2000)) {
await this.pageObjects.taxesPage.resetFilter();
}
const numberOfTaxesAfterReset = await this.pageObjects.taxesPage.getNumberFromText(
this.pageObjects.taxesPage.gridHeaderTitle,
);
await expect(numberOfTaxesAfterReset).to.equal(numberOfTaxes);
});
});
});