/**
|
* @file ADSO-10101 - Create unit cost for Fixed cost driver (from list context menu)
|
* @description Create unit cost for Fixed cost driver (from list context menu)
|
* @testcategory Web - Financials - Units
|
* @author Umar Adkhamov (umar.adkhamov@3ds.com)
|
* @copyright Dassault Systemes
|
*/
|
import { qCustomMatcher } from '../../../e2elib/lib/src/main/qmatchers.const';
|
import { AppMP, Demo, Scenario } from '../../../libmp/appmp';
|
import { ListUnitCostColumn } from '../../../libmp/forms/form.unitcost';
|
import { CostLabel, DataFoodBaseAccountName, DataFoodBaseAccountUoM } from '../../../libmp/data/data.account';
|
import { startOfPlanningYear } from '../../../libmp/data/data.period';
|
|
describe('ADSO-10101 - Create unit cost for Fixed cost driver (from list context menu)', () => {
|
const appMP = AppMP.getInstance();
|
const entity = 'DE Fermenter';
|
const account = DataFoodBaseAccountName.GeneralFixedCosts;
|
const costDriver = 'Fixed';
|
const timeUnit = 'Year';
|
const cost = 100.23;
|
let eopString: string;
|
let sopYear: string;
|
const uom = DataFoodBaseAccountUoM.EuroPerMonth;
|
const janSOPMinus1 = `1-Jan-${startOfPlanningYear - 1}`;
|
|
beforeAll(async () => {
|
jasmine.addMatchers(qCustomMatcher);
|
await appMP.login();
|
});
|
|
afterAll(async () => {
|
await appMP.cleanupAndLogout();
|
});
|
|
afterEach(async () => {
|
await appMP.checkToastMessage();
|
});
|
|
it(`Setup - ${AppMP.getDemoDataPath(Demo.Food, Scenario.Base)}`, async () => {
|
await appMP.createDemoDataset(Demo.Food, Scenario.Base, false);
|
});
|
|
it(`Setup - Open view ${appMP.viewPeriod.viewPath}. Get start and end of planning`, async () => {
|
// Open Periods view
|
await appMP.viewPeriod.switchTo();
|
const formPeriod = appMP.viewPeriod.frmPeriod;
|
({ sopYear, eopString } = await formPeriod.getStartAndEndOfPlanning());
|
});
|
|
it(`Step 1 - Open view ${appMP.viewUnitCost.viewPath}. Verify General Fixed Costs account exists with UoM as ${uom}`, async () => {
|
await appMP.viewUnitCost.switchTo();
|
|
const accountRow = await appMP.viewUnitCost.frmUnitAccount.listAccount.getRow({ Account: account });
|
await appMP.viewUnitCost.frmUnitAccount.listAccount.verifyRowValues(accountRow, { 'Default UoM': uom });
|
});
|
|
it('Step 2 - Verify navigation panel is show and open Stocking points and units list', async () => {
|
// Verify if navigation panel is showed by default
|
expect(await appMP.formNavigation.isVisible()).toBe(true, 'Navigation panel should be visible');
|
// Open 'StockingPoints and Units' list (ListEntity) in navigation panel by clicking on 'StockingPoints and Units' button (ButtonNavEntity)
|
await appMP.formNavigation.btnEntity.click();
|
expect(await appMP.formNavigation.listEntity.isVisible()).toBe(true, 'Entitiy list in navigation panel should be visible');
|
});
|
|
it(`Step 3 - Check ${entity} units checkbox`, async () => {
|
// Resize DisplayName column incase DisplayName value will be show as "Denmerk Pl..."
|
const entityDisplayNameColumn = await appMP.formNavigation.listEntity.getColumnByValue('DisplayName');
|
await entityDisplayNameColumn.resizeColumn(100);
|
// Check 2 leaf units DE Fermenter (to get row in hierarchy list can refer to getBookmarkByName function)
|
const deFermenterUnitRow = await appMP.formNavigation.listEntity.getEntityRowByName(entity, ['Europe', 'Plants', 'Denmark Plant']);
|
expect(deFermenterUnitRow).toBeDefined(`${entity} row should be found`);
|
await appMP.formNavigation.listEntity.scrollToRow(deFermenterUnitRow);
|
await deFermenterUnitRow.checkboxClick();
|
expect(await deFermenterUnitRow.isChecked()).toBe(true, `${entity} row checkbox should be checked`);
|
});
|
|
it(`Step 4: Verify Exactly 1 cost exists for ${entity} with start = ${janSOPMinus1}`, async () => {
|
const unitCostRows = await appMP.viewUnitCost.frmUnitCost.listUnitCost.getAllRows();
|
let counter = 0;
|
for (const row of unitCostRows) {
|
const cellValue = await appMP.viewUnitCost.frmUnitCost.listUnitCost.getCellValueFromRow('Unit', row);
|
if (cellValue === entity) {
|
counter++;
|
}
|
}
|
expect(counter).toBe(1, `There should be exactly 1 cost exists for ${entity}`);
|
const unitCostRow = await appMP.viewUnitCost.frmUnitCost.listUnitCost.getRowByValue([{ columnID: ListUnitCostColumn.Unit, value: entity }]);
|
const startValue = await appMP.viewUnitCost.frmUnitCost.listUnitCost.getCellValueFromRow(ListUnitCostColumn.Start, unitCostRow);
|
expect(startValue).toBe(janSOPMinus1, `Cost for unit '${entity}' should have start = ${janSOPMinus1}`);
|
});
|
|
it('Step 5 - Input data for unit account', async () => {
|
// Create new Unit Cost
|
const dlgUnitCost = await appMP.viewUnitCost.frmUnitCost.listUnitCost.openEditDialog();
|
let btnMessage = '';
|
|
// Verify that dlgUnitCost fields have correct values
|
expect(await dlgUnitCost.verifyDropDownCount(dlgUnitCost.ddlAccount, 3)).toBe(true, 'There should be exactly 3 items in the Account DropDownList');
|
const values = [account, DataFoodBaseAccountName.ChangeoverCost, DataFoodBaseAccountName.ShiftPatternCosts];
|
expect(await dlgUnitCost.verifyDropDownContainValues(dlgUnitCost.ddlAccount, values)).toBe(true, `${values.join(', ')} should exist in Account drop down`);
|
|
expect(await dlgUnitCost.verifyDropDownCount(dlgUnitCost.ddlCostDriver, 4)).toBe(true, 'There should be exactly 4 items in the Cost Driver DropDownList');
|
const driverValues = [costDriver, 'Number of units', 'Changeover', 'Staffing'];
|
expect(await dlgUnitCost.verifyDropDownContainValues(dlgUnitCost.ddlCostDriver, driverValues)).toBe(true, `${driverValues.join(', ')} should exist in Cost Driver drop down`);
|
|
// Update value in dialog
|
await dlgUnitCost.updateUnitCostValue(account, costDriver, entity, new Date(Number(sopYear), 1, 1), timeUnit, 1, cost);
|
// Verify that Cost Label displays correct value
|
expect(await dlgUnitCost.efCost.getComponentLabel()).toBe(CostLabel.euro(timeUnit), `Cost label should be ${CostLabel.euro(timeUnit)}`);
|
// Confirm dialog
|
const isUnitCostCreate = await dlgUnitCost.clickOK();
|
if (!isUnitCostCreate) {
|
btnMessage = await dlgUnitCost.getOKButtonTooltip();
|
}
|
expect(isUnitCostCreate).toBe(true, `Values for new Unit Cost should be inserted successfully. OK button disabled with tooltip ${btnMessage}`);
|
|
// Click Cancel if create is not allowed
|
if (!isUnitCostCreate) {
|
await dlgUnitCost.clickCancel();
|
}
|
});
|
|
it('Step 6 - Verify the new Unit Cost is created with correct details', async () => {
|
// Get the newly created Unit Cost based on start date (1-Feb-SOP Year)
|
const unitCostRow = await appMP.viewUnitCost.frmUnitCost.listUnitCost.getRowByValue([{ columnID: ListUnitCostColumn.Start, value: `1-Feb-${sopYear}` }]);
|
|
// Verify the values are set correctly
|
let cellValue = await appMP.viewUnitCost.frmUnitCost.listUnitCost.getCellValueFromRow(ListUnitCostColumn.Account, unitCostRow);
|
expect(cellValue).toBe(account, `Account name should be ${account}`);
|
|
cellValue = await appMP.viewUnitCost.frmUnitCost.listUnitCost.getCellValueFromRow(ListUnitCostColumn.CostDriver, unitCostRow);
|
expect(cellValue).toBe(costDriver, `Cost Driver should be ${costDriver}`);
|
|
cellValue = await appMP.viewUnitCost.frmUnitCost.listUnitCost.getCellValueFromRow(ListUnitCostColumn.Cost, unitCostRow);
|
// Round the cost to compare, as the cost in the list is rounded
|
const roundedCost = Math.round(cost).toString();
|
expect(cellValue).toBe(roundedCost, `Cost should be ${roundedCost}`);
|
|
cellValue = await appMP.viewUnitCost.frmUnitCost.listUnitCost.getCellValueFromRow(ListUnitCostColumn.UoM, unitCostRow);
|
expect(cellValue).toBe(`${DataFoodBaseAccountUoM.EuroPer}${timeUnit}`, `Time unit should be ${DataFoodBaseAccountUoM.EuroPer}${timeUnit}`);
|
|
cellValue = await appMP.viewUnitCost.frmUnitCost.listUnitCost.getCellValueFromRow(ListUnitCostColumn.End, unitCostRow);
|
expect(cellValue).toBe(eopString, `End should be ${eopString}`);
|
});
|
|
it('Step 7 - Verify the previous Unit Cost ', async () => {
|
// Get the previous Unit Cost based on start date (1-Jan-SOPYear minus 1)
|
const unitCostRow = await appMP.viewUnitCost.frmUnitCost.listUnitCost.getRowByValue([{ columnID: ListUnitCostColumn.Start, value: janSOPMinus1 }]);
|
// Verify the End is set correctly
|
const cellValue = await appMP.viewUnitCost.frmUnitCost.listUnitCost.getCellValueFromRow(ListUnitCostColumn.End, unitCostRow);
|
expect(cellValue).toBe(`1-Feb-${sopYear}`, `End should be 1-Feb-${sopYear}`);
|
});
|
|
it(`Step 8 - Open view ${appMP.viewScenarioAnalysisCost.viewPath} and verify if the values are correct`, async () => {
|
// Open ViewScenarioAnalysis
|
await appMP.viewScenarioAnalysisCost.switchTo();
|
|
// Select another account before choosing General fixed cost, else chart not refreshed to what we need
|
await appMP.viewScenarioAnalysisCost.frmCost.drpdAccount.selectItemSOP(DataFoodBaseAccountName.OperatingCost);
|
await appMP.viewScenarioAnalysisCost.frmCost.drpdAccount.selectItemSOP(account);
|
|
// Get the cost value from the chart for 1-Feb-SOP Year and verify whether it is as expected
|
const chartValues = await appMP.viewScenarioAnalysisCost.frmCost.chartCost.getChartDataValue('DashboardChartSeriesSenarioAnalysisCostPerPeriodBaseCost', [account, account, account, account], [`1-Feb-${sopYear}`, `1-Mar-${sopYear}`, `1-Apr-${sopYear}`, `1-Dec-${+sopYear + 1}`]);
|
// Calculate monthly cost and limit decimal points to 4
|
const expectedCostPerMonth = (cost / 12).toFixed(4);
|
|
// Verify that starting from 1-Feb-SOP year the the chart displays the expectedCostPerMonth
|
expect(chartValues[0].values[0]).toBe(expectedCostPerMonth, `Value should be ${expectedCostPerMonth} starting from 1-Feb-${sopYear}`);
|
expect(chartValues[1].values[0]).toBe(expectedCostPerMonth, `Value should be ${expectedCostPerMonth} starting from 1-Mar-${sopYear}`);
|
expect(chartValues[2].values[0]).toBe(expectedCostPerMonth, `Value should be ${expectedCostPerMonth} starting from 1-Apr-${sopYear}`);
|
expect(chartValues[3].values[0]).toBe(expectedCostPerMonth, `Value should be ${expectedCostPerMonth} starting from 1-Dec-${+sopYear + 1}`);
|
});
|
});
|