| /** | 
|  * @file         ADSO-10174 | 
|  * @description  Stocking costs list is filtered by accounts | 
|  * @testcategory Web - Financials - Stocking points | 
|  * @author       Adrian Foo (adrian.foo@3ds.com) | 
|  * @copyright    Dassault Systèmes | 
|  */ | 
| import { qCustomMatcher } from '../../../e2elib/lib/src/main/qmatchers.const'; | 
| import { ListRow } from '../../../e2elib/lib/src/pageobjects/list/listrow.component'; | 
| import { ColumnIDValueMap } from '../../../libappbase/listbase'; | 
| import { LogMessage } from '../../../libappbase/logmessage'; | 
| import { AppMP, Demo, Scenario } from '../../../libmp/appmp'; | 
| import { DataFoodBaseEntityName } from '../../../libmp/data/data.navigation'; | 
| import { DataFoodBaseAccountCostDriver, DataFoodBaseAccountName, DataFoodBaseAccountTimeUnit } from '../../../libmp/data/data.account'; | 
| import { ListAccountColumn } from '../../../libmp/forms/form.inventoryaccounts'; | 
| import { ListStockingCostColumn } from '../../../libmp/forms/form.stockingcost'; | 
| import { ActionTriggerType } from '../../../libappbase/utils'; | 
| import { ListAccountContextMenuItem } from '../../../libmp/forms/form.account'; | 
|   | 
| describe('ADSO-10174 - Stocking costs list is filtered by accounts', () => { | 
|   // Componenet used | 
|   const appMP = AppMP.getInstance(); | 
|   const viewStockingCost = appMP.viewStockingCost; | 
|   const formStockingAccount = viewStockingCost.frmStockingAccount; | 
|   const formStockingCost = viewStockingCost.frmStockingCost; | 
|   const listStockingAccount = formStockingAccount.lstStockingAccount; | 
|   const listStockingCost = formStockingCost.lstStockingCost; | 
|   const listAccount = appMP.viewAccount.frmAccount.listAccount; | 
|   const navigationPanel = appMP.formNavigation; | 
|   | 
|   // Variable used across multiple steps | 
|   const accNameGFC = DataFoodBaseAccountName.GeneralFixedCosts; | 
|   const accNameSC = DataFoodBaseAccountName.StockingCosts; | 
|   const stockingPoint = DataFoodBaseEntityName.DCAustria; | 
|   const accDefaultCost = 12345; | 
|   const costDriver = DataFoodBaseAccountCostDriver.Fixed; | 
|   | 
|   beforeAll(async () => { | 
|     jasmine.addMatchers(qCustomMatcher); | 
|     await appMP.login(); | 
|   }); | 
|   | 
|   afterAll(async () => { | 
|     await appMP.viewAccount.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.viewAccount.viewPath}`, async () => { | 
|     await appMP.viewAccount.switchTo(); | 
|   }); | 
|   | 
|   it(`Setup - In Accounts list, create account "${accNameSC}" with cost driver = "${costDriver}" and default cost = "${accDefaultCost}"`, async () => { | 
|     const [dlgAccount] = await listAccount.selectContextMenu(ListAccountContextMenuItem.Create); | 
|     await dlgAccount.updateDialogValues({ ParentAccountName: '', Name: accNameSC, CostDriver: costDriver, Cost: accDefaultCost.toString(), TimeUnit: DataFoodBaseAccountTimeUnit.Year, LengthOfTime: '1' }); | 
|   | 
|     await dlgAccount.clickOK(); | 
|     await listAccount.verifyRowExists({ Name: accNameSC }); | 
|   }); | 
|   | 
|   it(`Setup - Open view ${appMP.viewStockingCost.viewPath}`, async () => { | 
|     await appMP.viewStockingCost.switchTo(); | 
|   }); | 
|   | 
|   it(`Setup - Ensure a stocking point cost is created for "${stockingPoint}" under account "${accNameSC}" with default value`, async () => { | 
|     const searchCriteria: ColumnIDValueMap[] = [ | 
|       { columnID: ListStockingCostColumn.Account, value: accNameSC }, | 
|       { columnID: ListStockingCostColumn.StockingPoint, value: stockingPoint }, | 
|       { columnID: ListStockingCostColumn.Cost, value: accDefaultCost.toLocaleString('en') }, | 
|     ]; | 
|   | 
|     const dlgStockingCost = await listStockingCost.openStockingCostDialog(ActionTriggerType.ContextMenu); | 
|     await dlgStockingCost.ddlAccount.selectItemSOP(accNameSC); | 
|     await dlgStockingCost.ddlStockingPoint.selectItemSOP(stockingPoint); | 
|     await dlgStockingCost.clickOK(); | 
|     const stockingcostRow: ListRow | undefined = await listStockingCost.getRowByValue(searchCriteria); | 
|     expect(stockingcostRow).toBeDefined(LogMessage.row_notFound(`${accNameSC} with ${stockingPoint} stocking point`)); | 
|   }); | 
|   | 
|   it('Step 1 - Click "Home" in navigation panel. Then, toggle on "Filter by Accounts" checkbox', async () => { | 
|     await navigationPanel.resetNaviToRoot(); | 
|     await formStockingCost.cbFilterByAccount.toggle(true); | 
|     expect(await formStockingCost.cbFilterByAccount.isChecked()).toBe(true, LogMessage.checkbox_isChecked('Filter by Accounts')); | 
|   }); | 
|   | 
|   it(`Step 2 - In "Stocking Accounts" form, select "${accNameGFC}" account and verify "Stocking Costs" list showing 17 "${accNameGFC}".`, async () => { | 
|     await listStockingAccount.selectListRowsByValue([[{ columnID: ListAccountColumn.Account, value: accNameGFC }]]); | 
|     await listStockingCost.waitForScreenUpdate(2000); | 
|   | 
|     // verification | 
|     const allRows = await listStockingCost.getAllRows(); | 
|     expect(allRows.length).toBe(17, 'Expect 17 rows to be found in "Stocking Cost" list'); | 
|     const areAllFixedCost = await listStockingCost.rowHasValidValue(allRows, ListStockingCostColumn.Account, accNameGFC); | 
|     expect(areAllFixedCost).toBe(true, `Expect "Acount" of all rows in "Stocking Cost" list to be ${accNameGFC}`); | 
|   }); | 
|   | 
|   it(`Step 3 - In "Stocking Accounts" form, select "${accNameSC}" account and verify "Stocking Costs" list showing 1 "${accNameSC}" of ${stockingPoint}.`, async () => { | 
|     await listStockingAccount.selectListRowsByValue([[{ columnID: ListAccountColumn.Account, value: accNameSC }]]); | 
|     await listStockingCost.waitForScreenUpdate(2000); | 
|   | 
|     // Verification | 
|     const allRows = await listStockingCost.getAllRows(); | 
|     expect(allRows.length).toBe(1, 'Expect 1 rows to be found in "Stocking Cost" list'); | 
|     const areAllStockingCost = await listStockingCost.rowHasValidValue(allRows, ListStockingCostColumn.Account, accNameSC); | 
|     expect(areAllStockingCost).toBe(true, `Expect "Acount" of all rows in "Stocking Cost" list to be ${accNameSC}`); | 
|   }); | 
|   | 
|   it(`Step 4 - Toggle off "Filter by Accounts" checkbox in "Stocking Costs" form and verify that now there are 18 Stocking Costs instances (1 ${accNameSC} and 17 ${accNameGFC})`, async () => { | 
|     await formStockingCost.cbFilterByAccount.toggle(false); | 
|   | 
|     // Verification | 
|     const allRows = await listStockingCost.getAllRows(); | 
|     expect(allRows.length).toBe(18, 'Expect 18 rows to be found in "Stocking Cost" list'); | 
|     const allRowsAccountType = await listStockingCost.getCellValueFromRow(ListStockingCostColumn.Account, allRows); | 
|     const nrOfStockingCost = allRowsAccountType.filter((account: string) => account === accNameSC).length; | 
|     const nrOfFixedCost = allRowsAccountType.filter((account: string) => account === accNameGFC).length; | 
|     expect(nrOfStockingCost).toBe(1, `Expect 1 "${accNameSC}" row to be found in "Stocking Costs" list`); | 
|     expect(nrOfFixedCost).toBe(17, `Expect 17 "${accNameGFC}" row to be found in "Stocking Costs" list`); | 
|   }); | 
| }); |