From 200bc77fdd3b6dd71b2a5817d1ab6d364f93f4b9 Mon Sep 17 00:00:00 2001 From: Progi1984 Date: Thu, 16 Jan 2025 15:46:14 +0100 Subject: [PATCH] Migrate `@pages/BO/catalog/products/add` from Core --- .../BO/catalog/products/create/index.ts | 2 +- src/interfaces/BO/index.ts | 1 + src/pages/BO/catalog/products/create/index.ts | 12 +- .../pages/BO/catalog/products/create/index.ts | 10 +- .../pages/BO/catalog/products/create/index.ts | 10 +- .../pages/BO/catalog/products/create/index.ts | 10 +- .../pages/BO/catalog/products/create/index.ts | 14 +- .../8.1/pages/BO/catalog/suppliers/create.ts | 2 +- .../pages/BO/catalog/products/create/index.ts | 10 +- .../pages/BO/catalog/products/create/index.ts | 318 +++++++++--------- 10 files changed, 195 insertions(+), 194 deletions(-) diff --git a/src/interfaces/BO/catalog/products/create/index.ts b/src/interfaces/BO/catalog/products/create/index.ts index 42fa9bb8..25378837 100644 --- a/src/interfaces/BO/catalog/products/create/index.ts +++ b/src/interfaces/BO/catalog/products/create/index.ts @@ -36,6 +36,6 @@ export interface BOProductsCreatePageInterface extends BOBasePagePageInterface { saveProduct(page: Page): Promise; selectStores(page: Page, storeID: number): Promise; setProduct(page: Page, productData: FakerProduct): Promise; - setProductName(page: Page, name: string, locale: string): Promise; + setProductName(page: Page, name: string, locale?: string): Promise; setProductStatus(page: Page, status: boolean): Promise; } diff --git a/src/interfaces/BO/index.ts b/src/interfaces/BO/index.ts index b035dd94..5b146f7d 100644 --- a/src/interfaces/BO/index.ts +++ b/src/interfaces/BO/index.ts @@ -93,6 +93,7 @@ export interface BOBasePagePageInterface extends CommonPageInterface { getAlertSuccessBlockParagraphContent(page: Frame | Page): Promise; getAllNotificationsNumber(page: Page): Promise; getCurrentEmployeeAvatar(page: Page): Promise; + getGrowlMessageContent(page: Page, timeout?: number): Promise; getHelpDocumentURL(page: Page): Promise; getNotificationsNumberInTab(page: Page, tabName: string): Promise; getPageSubTitle(page: Page): Promise; diff --git a/src/pages/BO/catalog/products/create/index.ts b/src/pages/BO/catalog/products/create/index.ts index 5667cb0b..eebb7ada 100644 --- a/src/pages/BO/catalog/products/create/index.ts +++ b/src/pages/BO/catalog/products/create/index.ts @@ -7,21 +7,21 @@ const psVersion = testContext.getPSVersion(); /* eslint-disable global-require, @typescript-eslint/no-require-imports, @typescript-eslint/no-var-requires */ function requirePage(): BOProductsCreatePageInterface { if (semver.lt(psVersion, '7.3.0')) { - return require('@versions/1.7.2/pages/BO/catalog/products/create').createProduct; + return require('@versions/1.7.2/pages/BO/catalog/products/create').boProductsCreatePage; } if (semver.lt(psVersion, '7.4.0')) { - return require('@versions/1.7.3/pages/BO/catalog/products/create').createProduct; + return require('@versions/1.7.3/pages/BO/catalog/products/create').boProductsCreatePage; } if (semver.lt(psVersion, '7.6.0')) { - return require('@versions/1.7.5/pages/BO/catalog/products/create').createProduct; + return require('@versions/1.7.5/pages/BO/catalog/products/create').boProductsCreatePage; } if (semver.lt(psVersion, '8.1.0')) { - return require('@versions/8.0/pages/BO/catalog/products/create').createProduct; + return require('@versions/8.0/pages/BO/catalog/products/create').boProductsCreatePage; } if (semver.lt(psVersion, '8.3.0')) { - return require('@versions/8.2/pages/BO/catalog/products/create').createProduct; + return require('@versions/8.2/pages/BO/catalog/products/create').boProductsCreatePage; } - return require('@versions/develop/pages/BO/catalog/products/create').createProduct; + return require('@versions/develop/pages/BO/catalog/products/create').boProductsCreatePage; } /* eslint-enable global-require, @typescript-eslint/no-require-imports, @typescript-eslint/no-var-requires */ diff --git a/src/versions/1.7.2/pages/BO/catalog/products/create/index.ts b/src/versions/1.7.2/pages/BO/catalog/products/create/index.ts index c41af88a..e38e610c 100644 --- a/src/versions/1.7.2/pages/BO/catalog/products/create/index.ts +++ b/src/versions/1.7.2/pages/BO/catalog/products/create/index.ts @@ -1,14 +1,14 @@ // Import pages import type {BOProductsCreatePageInterface} from '@interfaces/BO/catalog/products/create'; -import {CreateProduct} from '@versions/1.7.3/pages/BO/catalog/products/create'; +import {BOProductsCreatePage} from '@versions/1.7.3/pages/BO/catalog/products/create'; import {type Page} from '@playwright/test'; /** * Bo create product page, contains functions that can be used on the page * @class - * @extends CreateProduct + * @extends BOProductsCreatePage */ -class BOCreateProductVersion extends CreateProduct implements BOProductsCreatePageInterface { +class BOProductsCreatePageVersion extends BOProductsCreatePage implements BOProductsCreatePageInterface { private readonly confirmationModalContinueButton: string; /** @@ -36,5 +36,5 @@ class BOCreateProductVersion extends CreateProduct implements BOProductsCreatePa } } -const createProduct = new BOCreateProductVersion(); -export {createProduct, BOCreateProductVersion as CreateProduct}; +const boProductsCreatePage = new BOProductsCreatePageVersion(); +export {boProductsCreatePage, BOProductsCreatePageVersion as BOProductsCreatePage}; diff --git a/src/versions/1.7.3/pages/BO/catalog/products/create/index.ts b/src/versions/1.7.3/pages/BO/catalog/products/create/index.ts index ed164b52..e854234b 100644 --- a/src/versions/1.7.3/pages/BO/catalog/products/create/index.ts +++ b/src/versions/1.7.3/pages/BO/catalog/products/create/index.ts @@ -1,14 +1,14 @@ // Import pages import type {BOProductsCreatePageInterface} from '@interfaces/BO/catalog/products/create'; -import {CreateProduct} from '@versions/1.7.5/pages/BO/catalog/products/create'; +import {BOProductsCreatePage} from '@versions/1.7.5/pages/BO/catalog/products/create'; import {type Page} from '@playwright/test'; /** * Bo create product page, contains functions that can be used on the page * @class - * @extends CreateProduct + * @extends BOProductsCreatePage */ -class BOCreateProductVersion extends CreateProduct implements BOProductsCreatePageInterface { +class BOProductsCreatePageVersion extends BOProductsCreatePage implements BOProductsCreatePageInterface { /** * @constructs * Setting up texts and selectors to use on create products page @@ -31,5 +31,5 @@ class BOCreateProductVersion extends CreateProduct implements BOProductsCreatePa } } -const createProduct = new BOCreateProductVersion(); -export {createProduct, BOCreateProductVersion as CreateProduct}; +const boProductsCreatePage = new BOProductsCreatePageVersion(); +export {boProductsCreatePage, BOProductsCreatePageVersion as BOProductsCreatePage}; diff --git a/src/versions/1.7.5/pages/BO/catalog/products/create/index.ts b/src/versions/1.7.5/pages/BO/catalog/products/create/index.ts index eb1a5d22..fa010c09 100644 --- a/src/versions/1.7.5/pages/BO/catalog/products/create/index.ts +++ b/src/versions/1.7.5/pages/BO/catalog/products/create/index.ts @@ -1,13 +1,13 @@ // Import pages import type {BOProductsCreatePageInterface} from '@interfaces/BO/catalog/products/create'; -import {CreateProduct} from '@versions/8.0/pages/BO/catalog/products/create'; +import {BOProductsCreatePage} from '@versions/8.0/pages/BO/catalog/products/create'; /** * Bo create product page, contains functions that can be used on the page * @class - * @extends CreateProduct + * @extends BOProductsCreatePage */ -class BOCreateProductVersion extends CreateProduct implements BOProductsCreatePageInterface { +class BOProductsCreatePageVersion extends BOProductsCreatePage implements BOProductsCreatePageInterface { /** * @constructs * Setting up texts and selectors to use on create product page @@ -19,5 +19,5 @@ class BOCreateProductVersion extends CreateProduct implements BOProductsCreatePa } } -const createProduct = new BOCreateProductVersion(); -export {createProduct, BOCreateProductVersion as CreateProduct}; +const boProductsCreatePage = new BOProductsCreatePageVersion(); +export {boProductsCreatePage, BOProductsCreatePageVersion as BOProductsCreatePage}; diff --git a/src/versions/8.0/pages/BO/catalog/products/create/index.ts b/src/versions/8.0/pages/BO/catalog/products/create/index.ts index 314b3b04..87659df9 100644 --- a/src/versions/8.0/pages/BO/catalog/products/create/index.ts +++ b/src/versions/8.0/pages/BO/catalog/products/create/index.ts @@ -1,15 +1,15 @@ // Import pages import type {BOProductsCreatePageInterface} from '@interfaces/BO/catalog/products/create'; -import {CreateProduct} from '@versions/8.2/pages/BO/catalog/products/create'; +import {BOProductsCreatePage} from '@versions/8.2/pages/BO/catalog/products/create'; import type {Page} from 'playwright'; /** * Bo create product page, contains functions that can be used on the page * @class - * @extends CreateProduct + * @extends BOProductsCreatePage */ -class BOCreateProductVersion extends CreateProduct implements BOProductsCreatePageInterface { +class BOProductsCreatePageVersion extends BOProductsCreatePage implements BOProductsCreatePageInterface { public readonly productOnlineTitle: string; public readonly deleteProductLink: string; @@ -123,12 +123,12 @@ class BOCreateProductVersion extends CreateProduct implements BOProductsCreatePa * @param page {Page} Browser tab * @returns {Promise} */ - async saveProduct(page: Page): Promise { + async saveProduct(page: Page): Promise { await page.click(this.saveProductButton); const growlTextMessage = await this.getGrowlMessageContent(page, 30000); await this.closeGrowlMessage(page); - return growlTextMessage; + return growlTextMessage ?? ''; } /** @@ -203,5 +203,5 @@ class BOCreateProductVersion extends CreateProduct implements BOProductsCreatePa } } -const createProduct = new BOCreateProductVersion(); -export {createProduct, BOCreateProductVersion as CreateProduct}; +const boProductsCreatePage = new BOProductsCreatePageVersion(); +export {boProductsCreatePage, BOProductsCreatePageVersion as BOProductsCreatePage}; diff --git a/src/versions/8.1/pages/BO/catalog/suppliers/create.ts b/src/versions/8.1/pages/BO/catalog/suppliers/create.ts index 708bd760..9cc3748c 100644 --- a/src/versions/8.1/pages/BO/catalog/suppliers/create.ts +++ b/src/versions/8.1/pages/BO/catalog/suppliers/create.ts @@ -8,7 +8,7 @@ import type {Page} from 'playwright'; /** * Bo create supplier page, contains functions that can be used on the page * @class - * @extends CreateProduct + * @extends CreateSupplier */ class BOCreateSupplierVersion extends CreateSupplier implements BOSuppliersCreatePageInterface { /** diff --git a/src/versions/8.2/pages/BO/catalog/products/create/index.ts b/src/versions/8.2/pages/BO/catalog/products/create/index.ts index 0cca295c..249f1f45 100644 --- a/src/versions/8.2/pages/BO/catalog/products/create/index.ts +++ b/src/versions/8.2/pages/BO/catalog/products/create/index.ts @@ -1,6 +1,6 @@ // Import pages import type {BOProductsCreatePageInterface} from '@interfaces/BO/catalog/products/create'; -import {CreateProduct} from '@versions/develop/pages/BO/catalog/products/create'; +import {BOProductsCreatePage} from '@versions/develop/pages/BO/catalog/products/create'; import descriptionTab from '@pages/BO/catalog/products/create/tabDescription'; import pricingTab from '@pages/BO/catalog/products/create/tabPricing'; @@ -16,9 +16,9 @@ import type {Page} from 'playwright'; /** * Bo create product page, contains functions that can be used on the page * @class - * @extends CreateProduct + * @extends BOProductsCreatePage */ -class BOCreateProductVersion extends CreateProduct implements BOProductsCreatePageInterface { +class BOProductsCreatePageVersion extends BOProductsCreatePage implements BOProductsCreatePageInterface { /** * Set product * @param page {Page} Browser tab @@ -59,5 +59,5 @@ class BOCreateProductVersion extends CreateProduct implements BOProductsCreatePa } } -const createProduct = new BOCreateProductVersion(); -export {createProduct, BOCreateProductVersion as CreateProduct}; +const boProductsCreatePage = new BOProductsCreatePageVersion(); +export {boProductsCreatePage, BOProductsCreatePageVersion as BOProductsCreatePage}; diff --git a/src/versions/develop/pages/BO/catalog/products/create/index.ts b/src/versions/develop/pages/BO/catalog/products/create/index.ts index a813d70e..9bdb0a9f 100644 --- a/src/versions/develop/pages/BO/catalog/products/create/index.ts +++ b/src/versions/develop/pages/BO/catalog/products/create/index.ts @@ -1,26 +1,24 @@ -import BOBasePage from '@pages/BO/BOBasePage'; - -import productsPage from '@pages/BO/catalog/products'; -import virtualProductTab from '@pages/BO/catalog/products/create/tabVirtualProduct'; -import descriptionTab from '@pages/BO/catalog/products/create/tabDescription'; -import detailsTab from '@pages/BO/catalog/products/create/tabDetails'; -import stocksTab from '@pages/BO/catalog/products/create/tabStocks'; -import pricingTab from '@pages/BO/catalog/products/create/tabPricing'; -import packTab from '@pages/BO/catalog/products/create/tabPack'; -import tabSEO from '@pages/BO/catalog/products/create/tabSeo'; - import type FakerProduct from '@data/faker/product'; import type {ProductHeaderSummary} from '@data/types/product'; import type {BOProductsCreatePageInterface} from '@interfaces/BO/catalog/products/create'; - -import type {Frame, Page} from 'playwright'; +import BOBasePage from '@pages/BO/BOBasePage'; +import boProductsPage from '@pages/BO/catalog/products'; +import boProductsCreateTabVirtualProductPage from '@pages/BO/catalog/products/create/tabVirtualProduct'; +import boProductsCreateTabDescriptionPage from '@pages/BO/catalog/products/create/tabDescription'; +import boProductsCreateTabDetailsPage from '@pages/BO/catalog/products/create/tabDetails'; +import boProductsCreateTabPackPage from '@pages/BO/catalog/products/create/tabPack'; +import boProductsCreateTabPricingPage from '@pages/BO/catalog/products/create/tabPricing'; +import boProductsCreateTabSEOPage from '@pages/BO/catalog/products/create/tabSeo'; +import boProductsCreateTabShippingPage from '@pages/BO/catalog/products/create/tabShipping'; +import boProductsCreateTabStocksPage from '@pages/BO/catalog/products/create/tabStocks'; +import type {Frame, Page} from '@playwright/test'; /** * Create Product page, contains functions that can be used on the page * @class * @extends BOBasePage */ -class CreateProduct extends BOBasePage implements BOProductsCreatePageInterface { +class BOProductsCreatePage extends BOBasePage implements BOProductsCreatePageInterface { public readonly pageTitle: string; public readonly saveAndPublishButtonName: string; @@ -112,13 +110,13 @@ class CreateProduct extends BOBasePage implements BOProductsCreatePageInterface private readonly modalConfirmTypeBtnSubmit: string; /** - * @constructs - * Setting up texts and selectors to use on create product page - */ + * @constructs + * Setting up texts and selectors to use on products V2 page + */ constructor() { super(); - this.pageTitle = 'Product'; + this.pageTitle = 'Products'; this.saveAndPublishButtonName = 'Save and publish'; this.successfulDuplicateMessage = 'Successful duplication'; this.errorMessage = 'Unable to update settings.'; @@ -139,7 +137,7 @@ class CreateProduct extends BOBasePage implements BOProductsCreatePageInterface this.productNameLanguageButton = `${this.productName}_dropdown`; this.productNameLanguageDropdown = `${this.productName} .dropdown .dropdown-menu`; this.productNameLanguageDropdownItem = (locale: string) => `${this.productNameLanguageDropdown} span` - + `[data-locale="${locale}"]`; + + `[data-locale="${locale}"]`; this.productTypePreview = '.product-type-preview'; this.productTypePreviewLabel = `${this.productTypePreview}-label`; this.productTypeLabel = '.product-type-preview-label'; @@ -149,7 +147,7 @@ class CreateProduct extends BOBasePage implements BOProductsCreatePageInterface this.productHeaderQuantity = `${this.productHeaderSummary} div[data-role=quantity]`; this.productHeaderReferences = '.product-header-references'; this.productHeaderReference = (type: string) => `${this.productHeaderReferences} .product-reference` - + `[data-reference-type="${type}"] span`; + + `[data-reference-type="${type}"] span`; // Footer selectors this.footerProductDropDown = '#product_footer_actions_dropdown'; @@ -176,22 +174,22 @@ class CreateProduct extends BOBasePage implements BOProductsCreatePageInterface // Modal : Switch Product Type this.modalSwitchType = '#switch-product-type-modal'; this.modalSwitchTypeBtnChoice = (productType: string) => `${this.modalSwitchType} button.product-type-choice` - + `[data-value="${productType}"]`; + + `[data-value="${productType}"]`; this.modalSwitchTypeBtnSubmit = `${this.modalSwitchType} .modal-footer button.btn-confirm-submit`; this.modalConfirmType = '#modal-confirm-product-type'; this.modalConfirmTypeBtnSubmit = `${this.modalConfirmType} .modal-footer button.btn-confirm-submit`; } /* - Methods - */ + Methods + */ /** - * Select stores - * @param page {Page} Browser tab - * @param storeID {number} Store ID to select - * @returns {Promise} - */ + * Select stores + * @param page {Page} Browser tab + * @param storeID {number} Store ID to select + * @returns {Promise} + */ async selectStores(page: Page, storeID: number): Promise { await this.waitForSelectorAndClick(page, this.selectStoresLink); @@ -202,25 +200,25 @@ class CreateProduct extends BOBasePage implements BOProductsCreatePageInterface } /** - * Go to a tab - * @param page {Page} Browser tab - * @param tabName {'combinations'|'description'|'details'|'options'|'pricing'|'seo'|'shipping'|'stock'} Name of the tab - * @returns {Promise} - */ + * Go to a tab + * @param page {Page} Browser tab + * @param tabName {'combinations'|'description'|'details'|'options'|'pricing'|'seo'|'shipping'|'stock'} Name of the tab + * @returns {Promise} + */ async goToTab( page: Page, - tabName: string, + tabName: 'combinations' | 'description' | 'details' | 'options' | 'pricing' | 'seo' | 'shipping' | 'stock', ): Promise { await this.waitForSelectorAndClick(page, this.tabLink(tabName)); await this.waitForVisibleSelector(page, `${this.tabLink(tabName)} a.active`, 2000); } /** - * Is Tab active - * @param page {Page} Browser tab - * @param tabName {'combinations'|'description'|'details'|'options'|'pricing'|'seo'|'shipping'|'stock'} Name of the tab - * @returns {Promise} - */ + * Is Tab active + * @param page {Page} Browser tab + * @param tabName {'combinations'|'description'|'details'|'options'|'pricing'|'seo'|'shipping'|'stock'} Name of the tab + * @returns {Promise} + */ async isTabActive( page: Page, tabName: 'combinations' | 'description' | 'details' | 'options' | 'pricing' | 'seo' | 'shipping' | 'stock', @@ -229,11 +227,11 @@ class CreateProduct extends BOBasePage implements BOProductsCreatePageInterface } /** - * Is Tab visible - * @param page {Page} Browser tab - * @param tabName {'combinations'|'description'|'details'|'options'|'pricing'|'seo'|'shipping'|'stock'} Name of the tab - * @returns {Promise} - */ + * Is Tab visible + * @param page {Page} Browser tab + * @param tabName {'combinations'|'description'|'details'|'options'|'pricing'|'seo'|'shipping'|'stock'} Name of the tab + * @returns {Promise} + */ async isTabVisible( page: Page, tabName: 'combinations' | 'description' | 'details' | 'options' | 'pricing' | 'seo' | 'shipping' | 'stock', @@ -242,10 +240,10 @@ class CreateProduct extends BOBasePage implements BOProductsCreatePageInterface } /** - * Get product header summary - * @param page {Page} Browser tab - * @returns {Promise} - */ + * Get product header summary + * @param page {Page} Browser tab + * @returns {Promise} + */ async getProductHeaderSummary(page: Page): Promise { return { imageUrl: await this.getAttributeContent(page, this.productImageUrl, 'value'), @@ -271,19 +269,19 @@ class CreateProduct extends BOBasePage implements BOProductsCreatePageInterface } /** - * Get product header summary - * @param page {Page} Browser tab - * @returns {Promise} - */ + * Get product header summary + * @param page {Page} Browser tab + * @returns {Promise} + */ async getProductID(page: Page): Promise { return parseInt(await this.getAttributeContent(page, this.formProductPage, 'data-product-id'), 10); } /** - * Return the product type - * @param page {Page} Browser tab - * @returns {Promise} - */ + * Return the product type + * @param page {Page} Browser tab + * @returns {Promise} + */ async getProductType(page: Page): Promise { const typeLabel = await this.getTextContent(page, this.productTypePreviewLabel); @@ -302,11 +300,11 @@ class CreateProduct extends BOBasePage implements BOProductsCreatePageInterface } /** - * Set product status - * @param page {Page} Browser tab - * @param status {boolean} The product status - * @returns {Promise} - */ + * Set product status + * @param page {Page} Browser tab + * @param status {boolean} The product status + * @returns {Promise} + */ async setProductStatus(page: Page, status: boolean): Promise { if (await this.getProductStatus(page) !== status) { await this.clickAndWaitForLoadState(page, this.productActiveSwitchButton); @@ -317,20 +315,20 @@ class CreateProduct extends BOBasePage implements BOProductsCreatePageInterface } /** - * Apply changes to all stores - * @param page {Page} Browser tab - * @param status {boolean} True if we need to apply all changes - * @returns {Promise} - */ + * Apply changes to all stores + * @param page {Page} Browser tab + * @param status {boolean} True if we need to apply all changes + * @returns {Promise} + */ async applyChangesToAllStores(page: Page, status: boolean): Promise { await this.setChecked(page, this.modifyAllShopsNameSwitchButton, status, true); } /** - * Get product status - * @param page {Page} Browser tab - * @returns {Promise} - */ + * Get product status + * @param page {Page} Browser tab + * @returns {Promise} + */ async getProductStatus(page: Page): Promise { // Get value of the check input const inputValue = await this.getAttributeContent( @@ -344,63 +342,65 @@ class CreateProduct extends BOBasePage implements BOProductsCreatePageInterface } /** - * Set product - * @param page {Page} Browser tab - * @param productData {FakerProduct} Data to set in new product page - * @returns {Promise} - */ + * Set product + * @param page {Page} Browser tab + * @param productData {FakerProduct} Data to set in new product page + * @returns {Promise} + */ async setProduct(page: Page, productData: FakerProduct): Promise { await this.waitForVisibleSelector(page, this.productActiveSwitchButtonToggleInput); //// Tab "Description" + // Set status + await this.setProductStatus(page, productData.status); // Set description - await descriptionTab.setProductDescription(page, productData); + await boProductsCreateTabDescriptionPage.setProductDescription(page, productData); // Set name - await this.setProductName(page, productData.nameFR, 'fr'); await this.setProductName(page, productData.name, 'en'); + await this.setProductName(page, productData.nameFR, 'fr'); // Set categories if (productData.category !== '') { - await descriptionTab.addNewCategory(page, [productData.category]); - await descriptionTab.chooseDefaultCategory(page, productData.category); + await boProductsCreateTabDescriptionPage.addNewCategory(page, [productData.category]); + await boProductsCreateTabDescriptionPage.chooseDefaultCategory(page, productData.category); } // Set brand if (productData.brand) { - await descriptionTab.chooseBrand(page, productData.brand.name); + await boProductsCreateTabDescriptionPage.chooseBrand(page, productData.brand.name); } - // Set status - await this.setProductStatus(page, productData.status); //// Tab "Details" - await detailsTab.setProductDetails(page, productData); + await boProductsCreateTabDetailsPage.setProductDetails(page, productData); //// Tab "Stocks" if (productData.type === 'virtual') { - await virtualProductTab.setVirtualProduct(page, productData); + await boProductsCreateTabVirtualProductPage.setVirtualProduct(page, productData); } else if (productData.type !== 'combinations') { - await stocksTab.setProductStock(page, productData); + await boProductsCreateTabStocksPage.setProductStock(page, productData); } if (productData.type === 'pack') { - await packTab.setPackOfProducts(page, productData.pack); + await boProductsCreateTabPackPage.setPackOfProducts(page, productData.pack); + } + if (productData.type !== 'virtual') { + await boProductsCreateTabShippingPage.setPackageDimension(page, productData); } //// Tab "Pricing" - await pricingTab.setProductPricing(page, productData); - + await boProductsCreateTabPricingPage.setProductPricing(page, productData);//// Tab "SEO" //// Tab "SEO" await this.goToTab(page, 'seo'); - await tabSEO.setTag(page, productData.tags); + await boProductsCreateTabSEOPage.setTag(page, productData.tags); return this.saveProduct(page); } /** - * Set product name - * @param page {Page} Browser tab - * @param name {string} Name of the product - * @param locale {string} Locale - * @returns {Promise} - */ + * Set product name + * @param page {Page} Browser tab + * @param name {string} Name of the product + * @param locale {string} Locale + * @returns {Promise} + */ async setProductName(page: Page, name: string, locale: string = 'en'): Promise { await this.waitForSelectorAndClick(page, this.productNameLanguageButton); await this.waitForSelectorAndClick(page, this.productNameLanguageDropdownItem(locale)); @@ -412,40 +412,40 @@ class CreateProduct extends BOBasePage implements BOProductsCreatePageInterface } /** - * Click on save product button - * @param page {Page} Browser tab - * @returns {Promise} - */ + * Click on save product button + * @param page {Page} Browser tab + * @returns {Promise} + */ async clickOnSaveProductButton(page: Page): Promise { await page.locator(this.saveProductButton).click(); await page.waitForLoadState(); } /** - * Save product - * @param page {Page} Browser tab - * @returns {Promise} - */ - async saveProduct(page: Page): Promise { - await this.clickOnSaveProductButton(page); + * Save product + * @param page {Page} Browser tab + * @returns {Promise} + */ + async saveProduct(page: Page): Promise { + await this.clickAndWaitForURL(page, this.saveProductButton); return this.getAlertSuccessBlockParagraphContent(page); } /** - * Get save button name - * @param page {Page} Browser tab - * @returns {Promise} - */ + * Get save button name + * @param page {Page} Browser tab + * @returns {Promise} + */ async getSaveButtonName(page: Page): Promise { return this.getTextContent(page, this.saveProductButton); } /** - * Preview product in new tab - * @param page {Page} Browser tab - * @return {Promise} - */ + * Preview product in new tab + * @param page {Page} Browser tab + * @return {Promise} + */ async previewProduct(page: Page): Promise { await this.waitForSelectorAndClick(page, this.footerProductDropDown); const newPage = await this.openLinkWithTargetBlank(page, this.previewProductButton, 'body a'); @@ -458,45 +458,45 @@ class CreateProduct extends BOBasePage implements BOProductsCreatePageInterface } /** - * Delete product - * @param page {Page} Browser tab - * @returns {Promise} - */ + * Delete product + * @param page {Page} Browser tab + * @returns {Promise} + */ async deleteProduct(page: Page): Promise { await this.waitForSelectorAndClick(page, this.footerProductDropDown); await this.waitForSelectorAndClick(page, this.deleteProductButton); await this.waitForVisibleSelector(page, this.deleteProductFooterModal); await this.clickAndWaitForURL(page, this.deleteProductSubmitButton); - return this.getAlertSuccessBlockParagraphContent(page); + return boProductsPage.getAlertSuccessBlockParagraphContent(page); } /** - * Go to catalog page - * @param page {Page} Browser tab - * @returns {Promise} - */ + * Go to catalog page + * @param page {Page} Browser tab + * @returns {Promise} + */ async goToCatalogPage(page: Page): Promise { await this.clickAndWaitForURL(page, this.goToCatalogButton); } /** - * Click on new product button - * @param page {Page} Browser tab - * @returns {Promise} - */ + * Click on new product button + * @param page {Page} Browser tab + * @returns {Promise} + */ async clickOnNewProductButton(page: Page): Promise { await this.waitForSelectorAndClick(page, this.footerProductDropDown); await this.waitForSelectorAndClick(page, this.newProductButton); - return this.elementVisible(page, productsPage.modalCreateProduct, 1000); + return this.elementVisible(page, boProductsPage.modalCreateProduct, 1000); } /** - * Click on duplicate product button - * @param page {Page} Browser tab - * @returns {Promise} - */ + * Click on duplicate product button + * @param page {Page} Browser tab + * @returns {Promise} + */ async duplicateProduct(page: Page): Promise { await this.waitForSelectorAndClick(page, this.footerProductDropDown); await this.waitForSelectorAndClick(page, this.duplicateProductButton); @@ -507,25 +507,25 @@ class CreateProduct extends BOBasePage implements BOProductsCreatePageInterface } /** - * Choose product type - * @param page {Page} Browser tab - * @param productType {string} Data to choose in product type - * @returns {Promise} - */ + * Choose product type + * @param page {Page} Browser tab + * @param productType {string} Data to choose in product type + * @returns {Promise} + */ async chooseProductType(page: Page, productType: string): Promise { const currentUrl: string = page.url(); - await productsPage.selectProductType(page, productType); - await productsPage.clickOnAddNewProduct(page); + await boProductsPage.selectProductType(page, productType); + await boProductsPage.clickOnAddNewProduct(page); await page.waitForURL((url: URL): boolean => url.toString() !== currentUrl, {waitUntil: 'networkidle'}); } /** - * Change product type - * @param page {Page} Browser tab - * @param productType {string} Data to choose in product type - * @returns {Promise} - */ + * Change product type + * @param page {Page} Browser tab + * @param productType {string} Data to choose in product type + * @returns {Promise} + */ async changeProductType(page: Page, productType: string): Promise { // Click on the type label await page.locator(this.productTypePreview).click(); @@ -542,29 +542,29 @@ class CreateProduct extends BOBasePage implements BOProductsCreatePageInterface } /** - * Is choose product iframe visible - * @param page {Page} Browser tab - * @returns {Promise} - */ + * Is choose product iframe visible + * @param page {Page} Browser tab + * @returns {Promise} + */ async isChooseProductIframeVisible(page: Page): Promise { - return !(await this.elementNotVisible(page, `${productsPage.modalCreateProduct} iframe`, 1000)); + return !(await this.elementNotVisible(page, `${boProductsPage.modalCreateProduct} iframe`, 1000)); } /** - * Return the product name - * @param page {Page} Browser tab - * @param locale {string} Locale - * @returns {Promise} - */ + * Return the product name + * @param page {Page} Browser tab + * @param locale {string} Locale + * @returns {Promise} + */ async getProductName(page: Page, locale: string = 'en'): Promise { return this.getAttributeContent(page, this.productNameInput(locale), 'value'); } /** - * Get the error message when short description is too long - * @param page {Page} Browser tab - * @returns {Promise} - */ + * Get the error message when short description is too long + * @param page {Page} Browser tab + * @returns {Promise} + */ async getErrorMessageWhenSummaryIsTooLong(page: Page): Promise { await this.clickAndWaitForURL(page, this.saveProductButton); @@ -572,5 +572,5 @@ class CreateProduct extends BOBasePage implements BOProductsCreatePageInterface } } -const createProduct = new CreateProduct(); -export {createProduct, CreateProduct}; +const boProductsCreatePage = new BOProductsCreatePage(); +export {boProductsCreatePage, BOProductsCreatePage};