/**
|
* @file ADSO-10177
|
* @description Create one Stocking cost from context menu (list/action bar)
|
* @author Mehrab Kamrani (mehrab.hassan@3ds.com)
|
* @copyright Dassault Systèmes
|
*/
|
import { qCustomMatcher } from '../../../e2elib/lib/src/main/qmatchers.const';
|
import { AppMP, Demo, Scenario } from '../../../libmp/appmp';
|
import { DialogStockingCost } from '../../../libmp/dialogs/dialog.stockingcost';
|
import { ListStockingCostColumn } from '../../../libmp/forms/form.stockingcost';
|
import { CostLabel, DataFoodBaseAccountCost, DataFoodBaseAccountCostDriver, DataFoodBaseAccountName, DataFoodBaseAccountTimeUnit, DataFoodBaseAccountUoM } from '../../../libmp/data/data.account';
|
import { DataFoodBaseEntityName } from '../../../libmp/data/data.navigation';
|
import { DataFoodBaseStockingCostStartDate } from '../../../libmp/data/data.stockingcost';
|
import { ActionTriggerType } from '../../../libappbase/utils';
|
import { startOfPlanningYear } from '../../../libmp/data/data.period';
|
|
describe('ADSO-10177 - Create one Stocking cost from context menu (list and action bar)', () => {
|
const appMP = AppMP.getInstance();
|
const viewStockingCost = appMP.viewStockingCost;
|
const listStockingCost = viewStockingCost.frmStockingCost.lstStockingCost;
|
const formNavigation = appMP.formNavigation;
|
const listEntity = formNavigation.listEntity;
|
|
// Variables used in multiple "it"
|
const entity = DataFoodBaseEntityName.Europe;
|
const stockingPoint = DataFoodBaseEntityName.DCAustria;
|
const accountName = DataFoodBaseAccountName.GeneralFixedCosts;
|
const accountParentName = DataFoodBaseAccountName.CostOfSales;
|
const costDriver = DataFoodBaseAccountCostDriver.Fixed;
|
const timeUnit = DataFoodBaseAccountTimeUnit.Month;
|
const uom = DataFoodBaseAccountUoM.EuroPerMonth;
|
const cost = DataFoodBaseAccountCost._122_22.toString();
|
const newCost = DataFoodBaseAccountCost._15000;
|
const newCostInString = newCost.toString();
|
const newCostInStringWComma = newCost.toLocaleString();
|
const deSPArray: string[] = [DataFoodBaseEntityName.DEWarehouse, DataFoodBaseEntityName.DEWarehousePackagingMaterial, DataFoodBaseEntityName.DEWarehouseRawMaterial];
|
const date1JanSOPYearMinus1 = `1-Jan-${startOfPlanningYear - 1}`;
|
const date1Feb = DataFoodBaseStockingCostStartDate._1FebWithoutYear;
|
const date1Mar = DataFoodBaseStockingCostStartDate._1MarWithoutYear;
|
const dateLastMonthOfPlanning = `1-Dec-${startOfPlanningYear}`;
|
const expectedDropdownCount = 17;
|
const chartLegendGroup = 'DashboardChartSeriesSenarioAnalysisCostPerPeriodBaseCost';
|
|
let sopString: string;
|
let eopString: string;
|
let sopYear: string;
|
let dlgStockingCost: DialogStockingCost;
|
|
beforeAll(async () => {
|
jasmine.addMatchers(qCustomMatcher);
|
await appMP.login();
|
});
|
|
afterAll(async () => {
|
// Reset
|
await appMP.formNavigation.reset();
|
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();
|
({ sopYear, eopString, sopString } = await appMP.viewPeriod.frmPeriod.getStartAndEndOfPlanning());
|
});
|
|
it(`Setup - Open view ${appMP.viewAccount.viewPath}, select account "${accountName}" (child of "${accountParentName}"), change the Cost to ${cost}.`, async () => {
|
await appMP.viewAccount.switchTo();
|
// Edit General fixed costs to have 122.22 for its cost
|
const generalFixedCostRow = await appMP.viewAccount.frmAccount.listAccount.getRow({ Name: accountName }, [{ Name: accountParentName }]);
|
const dlgAccount = await appMP.viewAccount.frmAccount.listAccount.openAcountDialogViaEditContextMenu(generalFixedCostRow);
|
await dlgAccount.createEditAccount(undefined, undefined, cost, timeUnit);
|
});
|
|
it(`Step 1 - Open view ${viewStockingCost.viewPath}.`, async () => {
|
await viewStockingCost.switchTo();
|
});
|
|
it(`Step 2 - In left navigation panel, click Stocking points and units button to show the list. Select unit ${entity}.`, async () => {
|
await formNavigation.toggleEntityList();
|
const row = await listEntity.toggleEntityRowCheckbox(true, entity);
|
const isChecked = await row.isChecked();
|
expect(isChecked).toBe(true, `Unit '${entity}' should be checked.`);
|
});
|
|
it('Step 3 - In Stocking Costs list, right click Create.', async () => {
|
// Create new Stocking Cost
|
dlgStockingCost = await listStockingCost.openStockingCostDialog(ActionTriggerType.ContextMenu);
|
expect(dlgStockingCost).toBeDefined('Stocking Cost Dialog should be visible.');
|
});
|
|
it('Step 4 - In Stocking Costs dialog, Verify default value', async () => {
|
// Verify that Stocking Costs dialog fields have correct default values
|
expect(await dlgStockingCost.ddlAccount.getSelectedString()).toBe(accountName, `Default Account should be: ${accountName}`);
|
expect(await dlgStockingCost.ddlCostDriver.getSelectedString()).toBe(costDriver, `Default Cost Driver should be: ${costDriver}`);
|
expect(await dlgStockingCost.getStartDate()).toBe(sopString, `Default Start should be: ${sopString}`);
|
expect(await dlgStockingCost.ddslTimeUnit.getSelectedString()).toBe(timeUnit, `Default Time Unit should be: ${timeUnit}`);
|
expect(await dlgStockingCost.efCost.getText()).toBe(cost, `Default Cost should be: ${cost}`);
|
// Cost label UoM in dialog should match with UoM of selected SP
|
const selectedSP = await dlgStockingCost.ddlStockingPoint.getSelectedString();
|
const costLabel = deSPArray.includes(selectedSP) ? CostLabel.dollar(timeUnit) : CostLabel.euro(timeUnit);
|
expect(await dlgStockingCost.efCost.getComponentLabel()).toBe(costLabel, `Cost label should be: ${costLabel}`);
|
});
|
|
it(`Step 5 - In the dialog, Verify that stocking point dropdown list has ${expectedDropdownCount} SPs beneath ${entity}`, async () => {
|
// Verify that stocking point dropdown list has 17 SPs beneath Europe
|
const isDropDownCountCorrect = await dlgStockingCost.verifyDropDownCount(dlgStockingCost.ddlStockingPoint, expectedDropdownCount);
|
expect(isDropDownCountCorrect).toBe(true, `There should be exactly ${expectedDropdownCount} items in the Stocking Point DropDown List`);
|
});
|
|
it('Step 6 - In the dialog, modify value of Cost and Stocking Point then Click OK', async () => {
|
// modify value of Cost and Stocking Point then Click OK
|
await dlgStockingCost.updateDialog(undefined, undefined, stockingPoint, undefined, newCost);
|
await dlgStockingCost.clickOK();
|
});
|
|
it(`Step 7 - Verify row created with values from step 4 & 6. Additionally verify: UoM = ${uom}, Start = 1-Jan (SOP year) and End = End of planning horizon`, async () => {
|
// Verify that new stocking is created with correct value
|
const isNewStockingCostExisted = await listStockingCost.isStockingCostExisted(stockingPoint, accountName, costDriver, newCostInStringWComma, uom, sopString, eopString);
|
expect(isNewStockingCostExisted).toBe(true, 'New Stocking Cost should have correct value.');
|
});
|
|
it(`Step 8 - Verify previous cost for ${stockingPoint} as following: Start = ${date1JanSOPYearMinus1} and End = 1-Jan (SOP year)`, async () => {
|
// Get the previous Unit Cost based on start date (1-Jan-SOPYear minus 1)
|
const dcAustriaStockingCostRow = await listStockingCost.getRowByValue([
|
{ columnID: ListStockingCostColumn.StockingPoint, value: stockingPoint },
|
{ columnID: ListStockingCostColumn.Start, value: date1JanSOPYearMinus1 },
|
]);
|
// Verify the End is set correctly
|
const dcAustriaEnd = await listStockingCost.getCellValueFromRow(ListStockingCostColumn.End, dcAustriaStockingCostRow);
|
expect(dcAustriaEnd).toBe(sopString, `End should be ${sopString}`);
|
});
|
|
it(`Step 9 - Open view ${appMP.viewScenarioAnalysisCost.viewPath} and verify correct value for cost starting from 1-Jan-SOP year`, 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(accountName);
|
|
// Uncheck Europe and check DC- Austria in the navigation panel
|
await listEntity.toggleEntityRowCheckbox(false, entity);
|
const entityRowDCAustria = await listEntity.toggleEntityRowCheckbox(true, stockingPoint, [entity]);
|
expect(await entityRowDCAustria.isChecked()).toBe(true, `${stockingPoint} row checkbox should be checked`);
|
|
// Get the cost value from the chart for 1-Jan-SOP Year and verify whether it is as expected
|
await appMP.viewScenarioAnalysisCost.frmCost.chartCost.waitForStable();
|
const chartValues = await appMP.viewScenarioAnalysisCost.frmCost.chartCost.getChartDataValue(chartLegendGroup, [accountName], [sopString, `${date1Feb}${sopYear}`, `${date1Mar}${sopYear}`, dateLastMonthOfPlanning]);
|
expect(chartValues[0].values[0]).toBe(newCostInString, `Cost should be ${newCostInString} starting for ${sopString}`);
|
expect(chartValues[0].values[1]).toBe(newCostInString, `Cost should be ${newCostInString} starting for ${date1Feb}${sopYear}`);
|
expect(chartValues[0].values[2]).toBe(newCostInString, `Cost should be ${newCostInString} starting for ${date1Mar}${sopYear}`);
|
expect(chartValues[0].values[3]).toBe(newCostInString, `Cost should be ${newCostInString} starting for last month of Planning (${dateLastMonthOfPlanning})`);
|
});
|
|
it(`Step 10 - Open view ${viewStockingCost.viewPath}. Delete the newly created stocking cost`, async () => {
|
// Uncheck DC - Austria and check Europe in the navigation panel
|
await formNavigation.resetNaviToRoot();
|
const entityRowEurope = await listEntity.toggleEntityRowCheckbox(true, entity);
|
expect(await entityRowEurope.isChecked()).toBe(true, `${entity} row checkbox should be checked`);
|
// Delete the newly created stocking cost
|
await viewStockingCost.switchTo();
|
const newStockingCostRow = await listStockingCost.getStockingCost(stockingPoint, newCostInStringWComma);
|
await listStockingCost.deleteStockingCost(newStockingCostRow);
|
// Verify that new stocking is deleted
|
const isNewStockingCostExisted = await listStockingCost.isStockingCostExisted(stockingPoint, accountName, costDriver, newCostInStringWComma, uom, sopString, eopString);
|
expect(isNewStockingCostExisted).toBe(false, 'New Stocking Cost should be deleted from Stocking Cost list');
|
});
|
|
it('Step 11 - Repeat step 3-9 by clicking Create button from the action bar', async () => {
|
// Step 3 - Create stocking cost using Create button from the action bar
|
dlgStockingCost = await listStockingCost.openStockingCostDialogViaAbp();
|
|
// Step 4 - Verify that Stocking Costs dialog fields have correct default values
|
expect(await dlgStockingCost.ddlAccount.getSelectedString()).toBe(accountName, `Default Account should be: ${accountName}`);
|
expect(await dlgStockingCost.ddlCostDriver.getSelectedString()).toBe(costDriver, `Default Cost Driver should be: ${costDriver}`);
|
expect(await dlgStockingCost.getStartDate()).toBe(sopString, `Default Start should be: ${sopString}`);
|
expect(await dlgStockingCost.ddslTimeUnit.getSelectedString()).toBe(timeUnit, `Default Time Unit should be: ${timeUnit}`);
|
expect(await dlgStockingCost.efCost.getText()).toBe(cost, `Default Cost should be: ${cost}`);
|
// Cost label UoM in dialog should match with UoM of selected SP
|
const selectedSP = await dlgStockingCost.ddlStockingPoint.getSelectedString();
|
const costLabel = deSPArray.includes(selectedSP) ? CostLabel.dollar(timeUnit) : CostLabel.euro(timeUnit);
|
expect(await dlgStockingCost.efCost.getComponentLabel()).toBe(costLabel, `Cost label should be: ${costLabel}`);
|
|
// Step 5 - Verify that stocking point dropdown list has 17 SPs beneath Europe
|
const isDropDownCountCorrect = await dlgStockingCost.verifyDropDownCount(dlgStockingCost.ddlStockingPoint, expectedDropdownCount);
|
expect(isDropDownCountCorrect).toBe(true, `There should be exactly ${expectedDropdownCount} items in the Stocking Point DropDown List`);
|
|
// Step 6 - modify value of Cost and Stocking Point then Click OK
|
await dlgStockingCost.updateDialog(undefined, undefined, stockingPoint, undefined, newCost);
|
await dlgStockingCost.clickOK();
|
|
// Step 7 - Verify that new stocking is created with correct value
|
const isNewStockingCostExisted = await listStockingCost.isStockingCostExisted(stockingPoint, accountName, costDriver, newCostInStringWComma, uom, sopString, eopString);
|
expect(isNewStockingCostExisted).toBe(true, 'New Stocking Cost should have correct value.');
|
|
// Step 8 - Get the previous Unit Cost based on start date (1-Jan-SOPYear minus 1)
|
const dcAustriaStockingCostRow = await listStockingCost.getRowByValue([
|
{ columnID: ListStockingCostColumn.StockingPoint, value: stockingPoint },
|
{ columnID: ListStockingCostColumn.Start, value: date1JanSOPYearMinus1 },
|
]);
|
// Verify the End is set correctly
|
const dcAustriaEnd = await listStockingCost.getCellValueFromRow(ListStockingCostColumn.End, dcAustriaStockingCostRow);
|
expect(dcAustriaEnd).toBe(sopString, `End should be ${sopString}`);
|
|
// Step 9 - Open ViewScenarioAnalysis
|
await appMP.viewScenarioAnalysisCost.switchTo();
|
await appMP.viewScenarioAnalysisCost.frmCost.drpdAccount.selectItemSOP(accountName);
|
// Uncheck Europe and check DC- Austria in the navigation panel
|
await listEntity.toggleEntityRowCheckbox(false, entity);
|
const entityRowDCAustria = await listEntity.toggleEntityRowCheckbox(true, stockingPoint, [entity]);
|
expect(await entityRowDCAustria.isChecked()).toBe(true, `${stockingPoint} row checkbox should be checked`);
|
// Get the cost value from the chart for 1-Jan-SOP Year and verify whether it is as expected
|
await appMP.viewScenarioAnalysisCost.frmCost.chartCost.waitForStable();
|
const chartValues = await appMP.viewScenarioAnalysisCost.frmCost.chartCost.getChartDataValue(chartLegendGroup, [accountName, accountName, accountName, accountName], [sopString, `${date1Feb}${sopYear}`, `${date1Mar}${sopYear}`, dateLastMonthOfPlanning]);
|
expect(chartValues[0].values[0]).toBe(newCostInString, `Cost should be ${newCostInString} starting for ${sopString}`);
|
expect(chartValues[0].values[1]).toBe(newCostInString, `Cost should be ${newCostInString} starting for ${date1Feb}${sopYear}`);
|
expect(chartValues[0].values[2]).toBe(newCostInString, `Cost should be ${newCostInString} starting for ${date1Mar}${sopYear}`);
|
expect(chartValues[0].values[3]).toBe(newCostInString, `Cost should be ${newCostInString} starting for last month of Planning (${dateLastMonthOfPlanning})`);
|
});
|
});
|