From 50a45b45ec842a6ab485c4159f2e1a90b6bab6b4 Mon Sep 17 00:00:00 2001 From: Jonathan LELIEVRE Date: Tue, 27 Jan 2026 15:57:37 +0100 Subject: [PATCH 1/2] Handle discount feature flag --- src/interfaces/BO/advancedParameters/featureFlag.ts | 1 + .../develop/pages/BO/advancedParameters/featureFlag.ts | 4 ++++ 2 files changed, 5 insertions(+) diff --git a/src/interfaces/BO/advancedParameters/featureFlag.ts b/src/interfaces/BO/advancedParameters/featureFlag.ts index 3f253502e..0d1057efb 100644 --- a/src/interfaces/BO/advancedParameters/featureFlag.ts +++ b/src/interfaces/BO/advancedParameters/featureFlag.ts @@ -5,6 +5,7 @@ export interface BOFeatureFlagInterface extends BOBasePagePageInterface { readonly featureFlagAdminAPI: string; readonly featureFlagAdminAPIMultistore: string; readonly featureFlagImprovedShipment: string; + readonly featureFlagDiscount: string; readonly featureFlagProductPageV2: string; readonly pageTitle: string; diff --git a/src/versions/develop/pages/BO/advancedParameters/featureFlag.ts b/src/versions/develop/pages/BO/advancedParameters/featureFlag.ts index 05fe4d4b0..009cc0b43 100644 --- a/src/versions/develop/pages/BO/advancedParameters/featureFlag.ts +++ b/src/versions/develop/pages/BO/advancedParameters/featureFlag.ts @@ -18,6 +18,8 @@ class BOFeatureFlag extends BOBasePage implements BOFeatureFlagInterface { public readonly featureFlagImprovedShipment: string; + public readonly featureFlagDiscount: string; + public readonly featureFlagMultipleImageFormats: string; private readonly featureFlagSwitchButton: (status: string, feature: string, toggle: number) => string; @@ -46,6 +48,7 @@ class BOFeatureFlag extends BOBasePage implements BOFeatureFlagInterface { this.featureFlagAdminAPI = 'admin_api'; this.featureFlagAdminAPIMultistore = 'admin_api_multistore'; this.featureFlagImprovedShipment = 'improved_shipment'; + this.featureFlagDiscount = 'discount'; // Selectors this.featureFlagSwitchButton = (status: string, feature: string, toggle: number) => `#feature_flag_${ status}_feature_flags_${feature}_enabled_${toggle}`; @@ -75,6 +78,7 @@ class BOFeatureFlag extends BOBasePage implements BOFeatureFlagInterface { isStable = false; break; case this.featureFlagImprovedShipment: + case this.featureFlagDiscount: isStable = false; break; default: From 4ca3a4570f63b46acd85952b7302828f186102d1 Mon Sep 17 00:00:00 2001 From: Jonathan LELIEVRE Date: Tue, 27 Jan 2026 16:39:59 +0100 Subject: [PATCH 2/2] Create discounts listing component, add add method to create new discount by type --- src/index.ts | 1 + .../BO/catalog/discounts/discounts/index.ts | 8 +++ .../BO/catalog/discounts/discounts/index.ts | 9 ++++ .../BO/catalog/discounts/discounts/index.ts | 50 +++++++++++++++++++ 4 files changed, 68 insertions(+) create mode 100644 src/interfaces/BO/catalog/discounts/discounts/index.ts create mode 100644 src/pages/BO/catalog/discounts/discounts/index.ts create mode 100644 src/versions/develop/pages/BO/catalog/discounts/discounts/index.ts diff --git a/src/index.ts b/src/index.ts index ad93f14bc..8436b0f42 100644 --- a/src/index.ts +++ b/src/index.ts @@ -223,6 +223,7 @@ export {default as boBrandsPage} from '@pages/BO/catalog/brands'; export {default as boCarriersPage} from '@pages/BO/shipping/carriers'; export {default as boCarriersCreatePage} from '@pages/BO/shipping/carriers/create'; export {default as boCartRulesPage} from '@pages/BO/catalog/discounts'; +export {default as boDiscountsPage} from '@pages/BO/catalog/discounts/discounts'; export {default as boCartRulesCreatePage} from '@pages/BO/catalog/discounts/create'; export {default as boCatalogPriceRulesPage} from '@pages/BO/catalog/discounts/catalogPriceRules'; export {default as boCatalogPriceRulesCreatePage} from '@pages/BO/catalog/discounts/catalogPriceRules/create'; diff --git a/src/interfaces/BO/catalog/discounts/discounts/index.ts b/src/interfaces/BO/catalog/discounts/discounts/index.ts new file mode 100644 index 000000000..f48d01f7c --- /dev/null +++ b/src/interfaces/BO/catalog/discounts/discounts/index.ts @@ -0,0 +1,8 @@ +import {BOBasePagePageInterface} from '@interfaces/BO'; +import type {Page} from '@playwright/test'; + +export interface BODiscountsPageInterface extends BOBasePagePageInterface { + readonly pageTitle: string; + + addNewDiscountByType(page: Page, discountType: string): Promise; +} diff --git a/src/pages/BO/catalog/discounts/discounts/index.ts b/src/pages/BO/catalog/discounts/discounts/index.ts new file mode 100644 index 000000000..082db51b4 --- /dev/null +++ b/src/pages/BO/catalog/discounts/discounts/index.ts @@ -0,0 +1,9 @@ +import {type BODiscountsPageInterface} from '@interfaces/BO/catalog/discounts/discounts'; + +/* eslint-disable global-require, @typescript-eslint/no-require-imports, @typescript-eslint/no-var-requires */ +function requirePage(): BODiscountsPageInterface { + return require('@versions/develop/pages/BO/catalog/discounts/discounts'); +} +/* 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/catalog/discounts/discounts/index.ts b/src/versions/develop/pages/BO/catalog/discounts/discounts/index.ts new file mode 100644 index 000000000..7de595f6f --- /dev/null +++ b/src/versions/develop/pages/BO/catalog/discounts/discounts/index.ts @@ -0,0 +1,50 @@ +import BOBasePage from '@pages/BO/BOBasePage'; +import { + type Page, +} from '@playwright/test'; +import type {BODiscountsPageInterface} from '@interfaces/BO/catalog/discounts/discounts'; + +class BODiscountsPage extends BOBasePage implements BODiscountsPageInterface { + public readonly pageTitle: string; + + protected readonly addNewDiscountButton: string; + + protected readonly newDiscountForm: string; + + protected readonly discountTypeOption: (discountType: string) => string; + + protected readonly discountTypeSubmit: string; + + /** + * @constructs + * Setting up texts and selectors to use on cart rules page + */ + constructor() { + super(); + + this.pageTitle = 'Discounts •'; + + // Selectors + this.newDiscountForm = '#discount_type_selector'; + this.addNewDiscountButton = '#page-header-desc-configuration-add_discount'; + this.discountTypeOption = (discountType: string) => `${this.newDiscountForm} .form-check-radio:has(` + + '[name="discount_type_selector[discount_type_selector]"]' + + `[value="${discountType}"])`; + this.discountTypeSubmit = '#discountTypeSubmit'; + } + + /** + * Open modal select type and create new discount by type + * + * @param page {Page} Browser tab + * @param discountType {string} Discount to select (cart_level, product_level, ...) + * @returns {Promise} + */ + async addNewDiscountByType(page: Page, discountType: string): Promise { + await this.waitForSelectorAndClick(page, this.addNewDiscountButton); + await this.waitForSelectorAndClick(page, this.discountTypeOption(discountType)); + await this.waitForSelectorAndClick(page, this.discountTypeSubmit); + } +} + +module.exports = new BODiscountsPage();