import { Button, WebElement } from '@contour/fet/lib/elements'; import { scrollToElement } from '@contour/fet/lib/support/action/scrollToElement'; import { DataTable } from '@cucumber/cucumber'; import { P2PBUTTONS } from '../../../enum/p2p/p2pButtons'; import { ensureElementIsVisible, retry } from '../../../util/common'; import scenarioContext from '../../../util/scenarioContext'; import { loginToMainPageForScenario } from '../../login/glue'; import * as nav from '../../navigation/glue'; export async function ensureActionButtonVisibilityInDcForm( party: string, type: string, uuid: string, page: string, element: string, role = 'maker' ) { const actionButton = new Button(contourfet.getPageElement(page, element)); const dcImportTab = new WebElement(contourfet.getPageElement('sideMenu', 'dcImport')); try { await actionButton.waitForVisible(); } catch (error) { await browser.refresh(); await dcImportTab.clickElement(); await navigateToPageByDocumentType(party, type, uuid, role); } } export async function executeMCAWorkflow(party: string, type: string, scenario: string, datatable: DataTable) { if (!datatable) { throw Error('Data Table is missing!'); } const data = datatable.raw(); for (let i = 1; i < data.length; i++) { if (type != 'cancellation') { loginToMainPageForScenario(party, data[i][0], scenario); } const dcRef = scenarioContext().dc.uuid.substring(0, 8); await navigateToPageByDocumentType(party, type, dcRef, data[i][0]); const actionButtonList = data[i][1].split(','); const McaActionButtons = getMcaActionButtons(actionButtonList); const pageAndElements = getButtonPageElements(actionButtonList); await performDocumentMcaAction(McaActionButtons, pageAndElements); } } async function navigateToPageByDocumentType(party: string, type: string, dcRef: string, role?: string) { switch (type) { case 'dc': case 'DCCancellation': nav.navigateToCurrentDC(party, dcRef); break; case 'draft': await nav.navigateToAmendmentDraft(party, dcRef); break; case 'draftText': await nav.navigateToAmendmentOrDraftText(party, type, 1, dcRef); break; case 'amendment': await nav.navigateToAmendmentOrDraftText(party, type, 1, dcRef); break; case 'cancellation': await nav.navigateToDcCancellationMessage(party, role); break; case 'presentation': await nav.navigateToCurrentDP(party, dcRef); break; } } function getMcaActionButtons(actionButtons: string[]): Button[] { return actionButtons.map((e) => { if (Object.values(P2PBUTTONS).includes(e)) { return new Button(contourfet.getPageElement('p2pMessageView', e)); } else { return new Button(contourfet.getPageElement('actionButton', e)); } }); } function getButtonPageElements(actionButtons: string[]): string[] { return actionButtons.map((e) => { if (Object.values(P2PBUTTONS).includes(e)) { return `p2pMessageView.${e}`; } else { return `actionButton.${e}`; } }); } async function performDocumentMcaAction(mcaButtons: Button[], pageAndElements: string[]) { for (let i = 0; i < mcaButtons.length; i++) { retry(5, ensureElementIsVisible, [mcaButtons[i]]); const pageElement = pageAndElements[i].split('.'); const page = pageElement[0]; const element = pageElement[1]; await browser.pause(2000); await scrollToElement(page, element); await mcaButtons[i].clickElement(); await browser.pause(1500); } }