From 27685b535c95ee40c488fc0b84c3c781c58c96e5 Mon Sep 17 00:00:00 2001 From: Progi1984 Date: Mon, 3 Mar 2025 13:40:17 +0100 Subject: [PATCH] Migrate `@pages/BO/international/taxes/add` from Core --- src/index.ts | 1 + .../BO/international/taxes/create.ts | 10 ++ src/pages/BO/international/taxes/create.ts | 9 ++ .../pages/BO/international/taxes/create.ts | 94 +++++++++++++++++++ 4 files changed, 114 insertions(+) create mode 100644 src/interfaces/BO/international/taxes/create.ts create mode 100644 src/pages/BO/international/taxes/create.ts create mode 100644 src/versions/develop/pages/BO/international/taxes/create.ts diff --git a/src/index.ts b/src/index.ts index 7c9df538..55436ef6 100644 --- a/src/index.ts +++ b/src/index.ts @@ -331,6 +331,7 @@ export {default as boSuppliersCreatePage} from '@pages/BO/catalog/suppliers/crea export {default as boSuppliersPage} from '@pages/BO/catalog/suppliers'; export {default as boSuppliersViewPage} from '@pages/BO/catalog/suppliers/view'; export {default as boTaxesPage} from '@pages/BO/international/taxes'; +export {default as boTaxesCreatePage} from '@pages/BO/international/taxes/create'; export {default as boTaxRulesPage} from '@pages/BO/international/taxes/taxRules'; export {default as boTaxRulesCreatePage} from '@pages/BO/international/taxes/taxRules/create'; export {default as boThemeAdvancedConfigurationPage} from '@pages/BO/design/themeAndLogo/advancedConfiguration'; diff --git a/src/interfaces/BO/international/taxes/create.ts b/src/interfaces/BO/international/taxes/create.ts new file mode 100644 index 00000000..541c4451 --- /dev/null +++ b/src/interfaces/BO/international/taxes/create.ts @@ -0,0 +1,10 @@ +import type FakerTax from '@data/faker/tax'; +import {BOBasePagePageInterface} from '@interfaces/BO'; +import {type Page} from '@playwright/test'; + +export interface BOTaxesCreatePageInterface extends BOBasePagePageInterface { + readonly pageTitleCreate: string; + readonly pageTitleEdit: string; + + createEditTax(page: Page, taxData: FakerTax): Promise; +} diff --git a/src/pages/BO/international/taxes/create.ts b/src/pages/BO/international/taxes/create.ts new file mode 100644 index 00000000..52c3fa1a --- /dev/null +++ b/src/pages/BO/international/taxes/create.ts @@ -0,0 +1,9 @@ +import {type BOTaxesCreatePageInterface} from '@interfaces/BO/international/taxes/create'; + +/* eslint-disable global-require, @typescript-eslint/no-require-imports, @typescript-eslint/no-var-requires */ +function requirePage(): BOTaxesCreatePageInterface { + return require('@versions/develop/pages/BO/international/taxes/create'); +} +/* eslint-enable global-require, @typescript-eslint/no-require-imports, @typescript-eslint/no-var-requires */ + +export default requirePage(); diff --git a/src/versions/develop/pages/BO/international/taxes/create.ts b/src/versions/develop/pages/BO/international/taxes/create.ts new file mode 100644 index 00000000..22a32b00 --- /dev/null +++ b/src/versions/develop/pages/BO/international/taxes/create.ts @@ -0,0 +1,94 @@ +import type FakerTax from '@data/faker/tax'; +import {type BOTaxesCreatePageInterface} from '@interfaces/BO/international/taxes/create'; +import BOBasePage from '@pages/BO/BOBasePage'; +import {type Page} from '@playwright/test'; + +/** + * Add tax page, contains functions that can be used on the page + * @class + * @extends BOBasePage + */ +class BOTaxesCreatePage extends BOBasePage implements BOTaxesCreatePageInterface { + public readonly pageTitleCreate: string; + + public readonly pageTitleEdit: string; + + private readonly successfulUpdateStatusMessage: string; + + private readonly nameEnInput: string; + + private readonly nameFrInput: string; + + private readonly inputLangDropdownButton: string; + + private readonly inputLangChoiceSpan: (lang: string) => string; + + private readonly rateInput: string; + + private readonly statusToggleInput: (toggle: number) => string; + + private readonly saveTaxButton: string; + + /** + * @constructs + * Setting up texts and selectors to use on add tax page + */ + constructor() { + super(); + + this.pageTitleCreate = `New tax • ${global.INSTALL.SHOP_NAME}`; + this.pageTitleEdit = 'Editing tax'; + this.successfulUpdateStatusMessage = 'The status has been successfully updated.'; + + // Selectors + this.nameEnInput = '#tax_name_1'; + this.nameFrInput = '#tax_name_2'; + this.inputLangDropdownButton = 'button#tax_name_dropdown'; + this.inputLangChoiceSpan = (lang: string) => `div.dropdown-menu span[data-locale='${lang}']`; + this.rateInput = '#tax_rate'; + this.statusToggleInput = (toggle: number) => `#tax_is_enabled_${toggle}`; + this.saveTaxButton = '#save-button'; + } + + /* + Methods + */ + + /** + * Change language for input name + * @param page {Page} Browser tab + * @param lang {string} Value of language to change + * @return {Promise} + */ + async changeInputLanguage(page: Page, lang: string): Promise { + await Promise.all([ + page.locator(this.inputLangDropdownButton).click(), + this.waitForVisibleSelector(page, `${this.inputLangDropdownButton}[aria-expanded='true']`), + ]); + await Promise.all([ + page.locator(this.inputLangChoiceSpan(lang)).click(), + this.waitForVisibleSelector(page, `${this.inputLangDropdownButton}[aria-expanded='false']`), + ]); + } + + /** + * Fill form for add/edit tax + * @param page {Page} Browser tab + * @param taxData {FakerTax} Data to set on new/edit tax page + * @returns {Promise} + */ + async createEditTax(page: Page, taxData: FakerTax): Promise { + await this.changeInputLanguage(page, 'en'); + await this.setValue(page, this.nameEnInput, taxData.name); + await this.changeInputLanguage(page, 'fr'); + await this.setValue(page, this.nameFrInput, taxData.frName); + await this.setValue(page, this.rateInput, taxData.rate); + await this.setChecked(page, this.statusToggleInput(taxData.enabled ? 1 : 0)); + // Save Tax + await this.clickAndWaitForURL(page, this.saveTaxButton); + + return this.getAlertSuccessBlockParagraphContent(page); + } +} + +module.exports = new BOTaxesCreatePage();