Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
84 changes: 84 additions & 0 deletions cypress/e2e/backoffice/purchasing-control/budget.cy.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,84 @@
import { container } from '@utils';
import { BackofficeBudgetCrudStaticFixtures, BackofficeBudgetCrudDynamicFixtures } from '@interfaces/backoffice';
import { BackofficeBudgetListPage, BackofficeBudgetCreatePage, BackofficeBudgetEditPage } from '@pages/backoffice';
import { UserLoginScenario } from '@scenarios/backoffice';

function formatDate(date: Date): string {
return date.toISOString().split('T')[0];
}

function getBudgetStartDate(): string {
const date = new Date();
date.setMonth(date.getMonth() + 1);
date.setDate(1);

return formatDate(date);
}

function getBudgetEndDate(): string {
const date = new Date();
date.setMonth(date.getMonth() + 4);
date.setDate(0);

return formatDate(date);
}

describe(
'purchasing control budget crud',
{
tags: ['@backoffice', '@purchasing-control', 'purchasing-control', 'spryker-core-back-office', 'spryker-core'],
},
(): void => {
if (['b2c', 'b2c-mp'].includes(Cypress.env('repositoryId'))) {
it.skip('skipped because tests run only for suite, b2b, and b2b-mp', () => {});
return;
}

const budgetListPage = container.get(BackofficeBudgetListPage);
const budgetCreatePage = container.get(BackofficeBudgetCreatePage);
const budgetEditPage = container.get(BackofficeBudgetEditPage);
const userLoginScenario = container.get(UserLoginScenario);

let staticFixtures: BackofficeBudgetCrudStaticFixtures;
let dynamicFixtures: BackofficeBudgetCrudDynamicFixtures;

before((): void => {
({ staticFixtures, dynamicFixtures } = Cypress.env());
});

beforeEach((): void => {
userLoginScenario.execute({
username: dynamicFixtures.rootUser.username,
password: staticFixtures.defaultPassword,
});
});

it('backoffice user should be able to create a budget for a cost center', (): void => {
budgetCreatePage.visitByCostCenter(dynamicFixtures.costCenter.id_cost_center);

budgetCreatePage.fillName(staticFixtures.newBudgetName);
budgetCreatePage.fillAmount(staticFixtures.budgetAmount);
budgetCreatePage.selectCurrency(staticFixtures.budgetCurrency);
budgetCreatePage.selectEnforcementRule(staticFixtures.budgetEnforcementRule);
budgetCreatePage.fillStartDate(getBudgetStartDate());
budgetCreatePage.fillEndDate(getBudgetEndDate());
budgetCreatePage.submit();

budgetCreatePage.assertSuccess();
});

it('backoffice user should see budget in the budget list after creation', (): void => {
budgetListPage.visitByCostCenter(dynamicFixtures.costCenter.id_cost_center);
budgetListPage.assertBudgetInTable(dynamicFixtures.preExistingBudget.name);
});

it('backoffice user should be able to edit a budget', (): void => {
budgetEditPage.visitById(dynamicFixtures.preExistingBudget.id_budget, dynamicFixtures.costCenter.id_cost_center);
budgetEditPage.fillName(staticFixtures.updatedBudgetName);
budgetEditPage.submit();

budgetEditPage.assertSuccess();
budgetListPage.assertBudgetInTable(staticFixtures.updatedBudgetName);
});
}
);
61 changes: 61 additions & 0 deletions cypress/e2e/backoffice/purchasing-control/cost-center.cy.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
import { container } from '@utils';
import {
BackofficeCostCenterCrudStaticFixtures,
BackofficeCostCenterCrudDynamicFixtures,
} from '@interfaces/backoffice';
import { CostCenterListPage, CostCenterCreatePage, CostCenterEditPage } from '@pages/backoffice';
import { UserLoginScenario } from '@scenarios/backoffice';

describe(
'purchasing control cost center crud',
{
tags: ['@backoffice', '@purchasing-control', 'purchasing-control', 'spryker-core-back-office', 'spryker-core'],
},
(): void => {
if (['b2c', 'b2c-mp'].includes(Cypress.env('repositoryId'))) {
it.skip('skipped because tests run only for suite, b2b, and b2b-mp', () => {});
return;
}

const costCenterListPage = container.get(CostCenterListPage);
const costCenterCreatePage = container.get(CostCenterCreatePage);
const costCenterEditPage = container.get(CostCenterEditPage);
const userLoginScenario = container.get(UserLoginScenario);

let staticFixtures: BackofficeCostCenterCrudStaticFixtures;
let dynamicFixtures: BackofficeCostCenterCrudDynamicFixtures;

before((): void => {
({ staticFixtures, dynamicFixtures } = Cypress.env());
});

beforeEach((): void => {
userLoginScenario.execute({
username: dynamicFixtures.rootUser.username,
password: staticFixtures.defaultPassword,
});
});

it('backoffice user should be able to create a cost center', (): void => {
costCenterListPage.waitForTable();
costCenterListPage.clickCreateButton();

costCenterCreatePage.fillName(staticFixtures.newCostCenterName);
costCenterCreatePage.fillDescription(staticFixtures.newCostCenterDescription);
costCenterCreatePage.selectCompany(dynamicFixtures.company.name);
costCenterCreatePage.selectBusinessUnit(dynamicFixtures.businessUnit.name);
costCenterCreatePage.submit();

costCenterCreatePage.assertSuccess();
});

it('backoffice user should be able to edit a cost center', (): void => {
costCenterEditPage.visitById(dynamicFixtures.preExistingCostCenter.id_cost_center);
costCenterEditPage.fillName(staticFixtures.updatedCostCenterName);
costCenterEditPage.submit();

costCenterEditPage.assertSuccess();
costCenterListPage.assertCostCenterInTable(staticFixtures.updatedCostCenterName);
});
}
);
79 changes: 79 additions & 0 deletions cypress/e2e/yves/purchasing-control/budget-enforcement.cy.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
import { container } from '@utils';
import { BudgetEnforcementStaticFixtures, BudgetEnforcementDynamicFixtures } from '@interfaces/yves';
import {
CartPage,
CheckoutAddressPage,
CheckoutPaymentPage,
CheckoutShipmentPage,
CheckoutSummaryPage,
CheckoutSummaryBudgetPage,
} from '@pages/yves';
import { CustomerLoginScenario } from '@scenarios/yves';

describe(
'purchasing control budget enforcement at checkout',
{ tags: ['@yves', '@purchasing-control', 'purchasing-control', 'spryker-core'] },
(): void => {
if (['b2c', 'b2c-mp'].includes(Cypress.env('repositoryId'))) {
it.skip('skipped because tests run only for suite, b2b, and b2b-mp', () => {});
return;
}

const customerLoginScenario = container.get(CustomerLoginScenario);
const cartPage = container.get(CartPage);
const checkoutAddressPage = container.get(CheckoutAddressPage);
const checkoutShipmentPage = container.get(CheckoutShipmentPage);
const checkoutPaymentPage = container.get(CheckoutPaymentPage);
const checkoutSummaryPage = container.get(CheckoutSummaryPage);
const checkoutSummaryBudgetPage = container.get(CheckoutSummaryBudgetPage);

let staticFixtures: BudgetEnforcementStaticFixtures;
let dynamicFixtures: BudgetEnforcementDynamicFixtures;

before((): void => {
({ staticFixtures, dynamicFixtures } = Cypress.env());
});

const loginAsCompanyBuyer = (email: string): void => {
customerLoginScenario.execute({ email, password: staticFixtures.defaultPassword, withoutSession: true });
};

const proceedThroughCheckoutToSummary = (email: string): void => {
loginAsCompanyBuyer(email);
cartPage.visit();
cartPage.startCheckout();
checkoutAddressPage.fillShippingAddress();
checkoutShipmentPage.setStandardShippingMethod();
checkoutPaymentPage.setDummyPaymentMethod();
};

it('buyer should be able to place order when grand total is within budget', (): void => {
proceedThroughCheckoutToSummary(dynamicFixtures.buyerForWithin.email);
checkoutSummaryPage.placeOrder();

cy.url().should('include', '/checkout/success');
});

it('buyer should be blocked from placing order when block budget is exceeded', (): void => {
proceedThroughCheckoutToSummary(dynamicFixtures.buyerForBlock.email);

checkoutSummaryBudgetPage.assertEnforcementError();
cy.url().should('include', '/checkout/summary');
});

it('buyer should see warning but still place order when warn budget is exceeded', (): void => {
proceedThroughCheckoutToSummary(dynamicFixtures.buyerForWarn.email);
checkoutSummaryPage.placeOrder();

cy.url().should('include', '/checkout/success');
checkoutSummaryBudgetPage.assertWarnFlashMessage();
});

it('buyer should be blocked from placing order when require_approval budget is exceeded without approval', (): void => {
proceedThroughCheckoutToSummary(dynamicFixtures.buyerForRequireApproval.email);

checkoutSummaryBudgetPage.assertEnforcementError();
cy.url().should('include', '/checkout/summary');
});
}
);
86 changes: 86 additions & 0 deletions cypress/e2e/yves/purchasing-control/budget.cy.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@
import { container } from '@utils';
import { YvesBudgetCrudStaticFixtures, YvesBudgetCrudDynamicFixtures } from '@interfaces/yves';
import { YvesBudgetListPage, YvesBudgetCreatePage, YvesBudgetUpdatePage } from '@pages/yves';
import { CustomerLoginScenario } from '@scenarios/yves';

function formatDate(date: Date): string {
return date.toISOString().split('T')[0];
}

function getBudgetStartDate(): string {
const date = new Date();
date.setMonth(date.getMonth() + 1);
date.setDate(1);

return formatDate(date);
}

function getBudgetEndDate(): string {
const date = new Date();
date.setMonth(date.getMonth() + 4);
date.setDate(0);

return formatDate(date);
}

describe(
'purchasing control budget crud',
{
tags: ['@yves', '@purchasing-control', 'purchasing-control', 'spryker-core'],
},
(): void => {
if (['b2c', 'b2c-mp'].includes(Cypress.env('repositoryId'))) {
it.skip('skipped because tests run only for suite, b2b, and b2b-mp', () => {});
return;
}

const customerLoginScenario = container.get(CustomerLoginScenario);
const budgetListPage = container.get(YvesBudgetListPage);
const budgetCreatePage = container.get(YvesBudgetCreatePage);
const budgetUpdatePage = container.get(YvesBudgetUpdatePage);

let staticFixtures: YvesBudgetCrudStaticFixtures;
let dynamicFixtures: YvesBudgetCrudDynamicFixtures;

before((): void => {
({ staticFixtures, dynamicFixtures } = Cypress.env());
});

beforeEach((): void => {
customerLoginScenario.execute({
email: dynamicFixtures.authorizedCustomer.email,
password: staticFixtures.defaultPassword,
});
});

it('authorized company user should see budget list for a cost center', (): void => {
budgetListPage.visitByCostCenterUuid(dynamicFixtures.costCenter.uuid);

budgetListPage.assertBudgetInTable(dynamicFixtures.preExistingBudget.name);
});

it('authorized company user should be able to create a budget', (): void => {
budgetCreatePage.visitByCostCenterUuid(dynamicFixtures.costCenter.uuid);

budgetCreatePage.fillName(staticFixtures.newBudgetName);
budgetCreatePage.fillAmount(staticFixtures.budgetAmount);
budgetCreatePage.selectCurrency(staticFixtures.budgetCurrency);
budgetCreatePage.selectEnforcementRule(staticFixtures.budgetEnforcementRule);
budgetCreatePage.fillStartDate(getBudgetStartDate());
budgetCreatePage.fillEndDate(getBudgetEndDate());
budgetCreatePage.submit();

budgetCreatePage.assertSuccess();
});

it('authorized company user should be able to update a budget', (): void => {
budgetUpdatePage.visitByUuid(dynamicFixtures.preExistingBudget.uuid, dynamicFixtures.costCenter.uuid);
budgetUpdatePage.fillName(staticFixtures.updatedBudgetName);
budgetUpdatePage.submit();

budgetUpdatePage.assertSuccess();
budgetListPage.visitByCostCenterUuid(dynamicFixtures.costCenter.uuid);
budgetListPage.assertBudgetInTable(staticFixtures.updatedBudgetName);
});
}
);
Loading
Loading