diff --git a/.changeset/nervous-weeks-nail.md b/.changeset/nervous-weeks-nail.md new file mode 100644 index 00000000000..2c28738f0c9 --- /dev/null +++ b/.changeset/nervous-weeks-nail.md @@ -0,0 +1,5 @@ +--- +"saleor-dashboard": minor +--- + +E2E Test for adding promotion rules diff --git a/playwright/data/e2eTestData.ts b/playwright/data/e2eTestData.ts index 944605356c5..3e5b32ae802 100644 --- a/playwright/data/e2eTestData.ts +++ b/playwright/data/e2eTestData.ts @@ -37,7 +37,16 @@ promotionWithoutRulesToBeDeleted: { promotionWithRulesToBeDeleted: { name: "e2e Catalog predicate promotion with rules", id: "UHJvbW90aW9uOjY0N2M2MzdhLTZjNTEtNDYxZC05MjQ2LTc0YTY0OGM0ZjAxNA==", -}} +}, +cataloguePromotion:{ + name: "e2e Catalog promotion for adding rules", + id: "UHJvbW90aW9uOjNmODZjZDAwLTUwNWEtNGVkNC04ZTliLTJmOGI4NGM3NGNlOQ==", +}, +orderPromotion: { + name: "e2e Order promotion for adding rules", + id: "UHJvbW90aW9uOjJlM2VhNDkyLTRhMTAtNDYzOS05MWVmLTc1YzQ1OTUxNGQyMQ==", + }, +} export const CUSTOMER_ADDRESS = { changeBillingAddress: { @@ -74,6 +83,10 @@ export const CATEGORIES = { "a cateogry to be bulk deleted 2/2", ], }, + e2eCategory: { + id: "Q2F0ZWdvcnk6NTEx", + name: "e2e category" + } }; export const COLLECTIONS = { collectionToBeUpdated: { @@ -83,6 +96,10 @@ export const COLLECTIONS = { collectionsToBeBulkDeleted: { names: ["Collection to be deleted 1/2", "Collection to be deleted 2/2"], }, + e2eCollection: { + id: "Q29sbGVjdGlvbjoxNjc=", + name: "e2e collection" + } }; export const COUNTRIES = { afghanistan: { @@ -122,6 +139,7 @@ export const CHANNELS = { channelPLN: { id: "Q2hhbm5lbDoyMjQ0", name: "Channel-PLN", + currency: "PLN", }, }; export const GIFT_CARDS = { @@ -180,6 +198,14 @@ export const PRODUCTS = { id: "UHJvZHVjdDo3NjE%3D", info: "Single product type to be updated", }, + e2eProduct1: { + id: "UHJvZHVjdDo3OQ==", + name: "Bean Juice" + }, + e2eProduct2:{ + id: "UHJvZHVjdDoxMTU=", + name: "Black Hoodie" + }, productAvailableOnlyInPlnChannel: { id: "UHJvZHVjdDo3NjM%3D", name: "a beer available only in pln channel", @@ -195,6 +221,18 @@ export const PRODUCTS = { name: "beer with variants", info: "Product that does not contain any variant yet", }, + e2eProductWithVariant1: { + id: "UHJvZHVjdDo4NQ==", + name: "Colored Parrot Cushion", + variantId: "UHJvZHVjdFZhcmlhbnQ6OTgy", + variantName: "70 / 70", + }, + e2eProductWithVariant2: { + id: "UHJvZHVjdDoxMTY=", + name: "Blue Hoodie 2", + variantId: "UHJvZHVjdFZhcmlhbnQ6MzAx", + variantName: "S", + }, productWithOneVariant: { id: "UHJvZHVjdDo3MzM%3D", info: "Product that contains single variant", diff --git a/playwright/pages/dialogs/promotionRuleDialog.ts b/playwright/pages/dialogs/promotionRuleDialog.ts new file mode 100644 index 00000000000..bfca843def0 --- /dev/null +++ b/playwright/pages/dialogs/promotionRuleDialog.ts @@ -0,0 +1,148 @@ +import type { Page } from "@playwright/test"; + +export class PromotionRuleDialog { + readonly page: Page; + constructor( + page: Page, + readonly ruleNameInput = page.getByTestId("rule-name-input"), + readonly ruleChannelDropdown = page.getByText("Channel", { exact: true }), + readonly ruleChannelDropdownOptions = page.getByRole("listbox"), + readonly selectOption = page.getByTestId( + "select-option", + ), + readonly ruleDescriptionInput = page.getByTestId("rich-text-editor-rule-description"), + readonly addFirstRuleConditionButton = page.getByTestId("add-first-condition-button"), + readonly addAnotherRuleConditionButton = page.getByTestId("add-another-condition-button"), + readonly addRuleConditionSection = page.getByTestId("conditions-section"), + readonly addRuleConditionPredicateDropdown = page.getByTestId("rule-condition-predicate-dropdown"), + readonly addRuleConditionTypeDropdown = page.getByTestId("rule-condition-type-dropdown"), + readonly addRuleConditionValueDropdown = page.getByTestId("rule-condition-value-dropdown"), + readonly rewardTypeSelect = page.getByTestId("reward-type-select"), + readonly rewardValueInput = page.getByTestId("reward-value-input"), + readonly rewardGiftSelect = page.getByTestId("reward-gifts-select"), + readonly percentageRewardValueTypeOption = page.getByTestId("percentage-reward-value-type"), + readonly fixedRewardValueTypeOption = page.getByTestId("fixed-reward-value-type"), + readonly saveRuleButton = page.getByTestId("saveRuleButton"), + readonly gteConditionValueInput = page.getByTestId("condition-value-0").first(), + readonly lteConditionValueInput = page.getByTestId("condition-value-0").last(), + + ) { + this.page = page; + } + + async typePromotionRuleDescription(description: string) { + await this.ruleDescriptionInput.locator('[contenteditable="true"]').fill(description) + } + + async clickChannelsDropdown() { + await this.ruleChannelDropdown.click(); + } + + async selectSingleChannel(channel:string) { + await this.clickChannelsDropdown(); + await this.page.getByTestId("select-option").getByText(channel).click(); + } + + async typePromotionRuleName(name: string) { + await this.ruleNameInput.fill(name); + } + + async clickFirstAddRuleConditionButton() { + await this.addFirstRuleConditionButton.click(); + await this.addRuleConditionSection.waitFor({ + state: "visible", + timeout: 10000, + }); + } + + async clickAnotherAddRuleConditionButton() { + await this.addAnotherRuleConditionButton.click(); + await this.addRuleConditionSection.waitFor({ + state: "visible", + timeout: 10000, + }); + } + + async selectPercentageRewardValueType() { + await this.percentageRewardValueTypeOption.click(); + } + + async selectFixedRewardValueType() { + await this.fixedRewardValueTypeOption.click(); + } + + async selectOrderRewardType(type: string) { + await this.rewardTypeSelect.click(); + await this.selectOption.filter({hasText:type}).click() + } + + async selectSubtotalDiscountType() { + await this.selectOrderRewardType("Subtotal Discount"); + } + + async selectGiftRewardDiscountType() { + await this.selectOrderRewardType("Gift"); + } + + async typeRewardValue(value: string) { + await this.rewardValueInput.fill(value); + } + + async selectPredicate(predicate: string, index: number = 0) { + await this.page.getByTestId(`condition-name-${index}`).click(); + await this.page.getByRole("listbox").waitFor({ + state: "visible", + timeout: 10000, + }); + await this.page.getByTestId('select-option').getByText(predicate, { exact: true }).click(); + } + + async selectRuleConditionType(type: string) { + await this.addRuleConditionTypeDropdown.last().click(); + await this.page.getByRole("listbox").waitFor({ + state: "visible", + timeout: 10000, + }); + await this.page.getByTestId('select-option').getByText(type).click(); + } + + async typeRuleConditionValue(value: string, index: number = 0) { + await this.addRuleConditionValueDropdown.locator('[contenteditable="true"]') + await this.page.getByTestId(`condition-value-${index}`).click(); + await this.page.getByTestId(`condition-value-${index}`).fill(value); + } + + async typeRuleConditionBoundaryValues(gte: string, lte: string) { + await this.gteConditionValueInput.fill(gte); + await this.lteConditionValueInput.fill(lte); + } + + + async clickRuleConditionPredicateDropdown(){ + await this.addRuleConditionPredicateDropdown.last().click(); + await this.page.getByRole("listbox").waitFor({ + state: "visible", + timeout: 10000, + }); + } + + async selectGiftReward(giftName: string) { + await this.rewardGiftSelect.fill(giftName); + await this.page.getByRole("listbox").waitFor({ + state: "visible", + timeout: 10000, + }); + await this.page.getByTestId('select-option').getByText(giftName).first().click(); + } + + async selectRuleConditionValue(name: string) { + await this.addRuleConditionValueDropdown.locator('[contenteditable="true"]') + await this.page.getByTestId('condition-value-0').click(); + await this.page.getByTestId('condition-value-0').fill(name); + await this.page.getByTestId('select-option').getByText(name, { exact: false }).first().click(); + } + + async clickSaveRuleButton() { + await this.saveRuleButton.click(); + } +} diff --git a/playwright/pages/discountsPage.ts b/playwright/pages/discountsPage.ts index fd24a73c3cd..f329ba812b9 100644 --- a/playwright/pages/discountsPage.ts +++ b/playwright/pages/discountsPage.ts @@ -1,12 +1,14 @@ import type { Page } from "@playwright/test"; import { URL_LIST } from "@data/url"; import { DeleteDiscountDialog } from "@dialogs/deleteDiscountDialog"; +import { PromotionRuleDialog } from "@pages/dialogs/promotionRuleDialog"; import { BasePage } from "@pages/basePage"; import { date } from "faker"; export class DiscountsPage extends BasePage { deleteDialog: DeleteDiscountDialog; + promotionRuleDialog: PromotionRuleDialog; constructor( @@ -25,12 +27,14 @@ export class DiscountsPage extends BasePage { readonly addRuleButton = page.getByTestId("add-rule"), readonly editRuleButton = page.getByTestId("rule-edit-button"), readonly deleteRuleButton = page.getByTestId("rule-delete-button"), - readonly existingRule = page.getByTestId("added-rule"), readonly addRuleDialog = page.getByTestId("add-rule-dialog"), readonly ruleSection = page.getByTestId("rule-list"), + readonly existingRule = ruleSection.getByTestId("added-rule"), + ) { super(page) this.deleteDialog = new DeleteDiscountDialog(page); + this.promotionRuleDialog = new PromotionRuleDialog(page); } async clickCreateDiscountButton() { await this.createDiscountButton.click(); @@ -89,15 +93,17 @@ export class DiscountsPage extends BasePage { }); } - async clickEditRuleButton() { - await this.editRuleButton.click(); - } + async clickAddRuleButton() { + await this.page.getByTestId('add-rule').click();} + + async clickEditRuleButton(){ + await this.page.getByTestId('rule-edit-button').click();} + async clickDeleteRuleButton() { await this.deleteRuleButton.click() } - async openExistingPromotionRuleModal(promotionId: string) { - await this.gotoExistingDiscount(promotionId); - await this.editRuleButton.click(); + async openPromotionRuleModal() { + await this.addRuleButton.click(); await this.addRuleDialog.waitFor({ state: "visible", timeout: 10000, diff --git a/playwright/tests/discounts.spec.ts b/playwright/tests/discounts.spec.ts index 5be2f40bab8..8a8c5839e7f 100644 --- a/playwright/tests/discounts.spec.ts +++ b/playwright/tests/discounts.spec.ts @@ -1,4 +1,4 @@ -import { DISCOUNTS } from "@data/e2eTestData"; +import { CATEGORIES, CHANNELS, COLLECTIONS, DISCOUNTS, PRODUCTS } from "@data/e2eTestData"; import { DiscountsPage } from "@pages/discountsPage"; import { expect, test } from "@playwright/test"; import faker from "faker"; @@ -12,25 +12,25 @@ test.beforeEach(({ page }) => { }); const discountType = ['Order', 'Catalog']; -for (const type of discountType) { -test(`TC: SALEOR_97 Create promotion with ${type} predicate @discounts @e2e`, async () => { - const discountName = `${faker.lorem.word()}+${type}`; - await discounts.gotoListView(); - await discounts.clickCreateDiscountButton(); - await discounts.typeDiscountName(discountName); - await discounts.selectDiscountType(type); - await discounts.typePromotionDescription(faker.lorem.sentence()); - await discounts.typeStartDate(); - await discounts.typeStartHour(); - await discounts.clickEndDateCheckbox(); - await discounts.typeEndDate(); - await discounts.typeEndHour(); - await discounts.clickSaveButton(); - await expect(discounts.successBanner).toBeVisible({ timeout: 10000 }); - await expect(discounts.pageHeader).toHaveText(discountName); - await expect(discounts.discountTypeSelect).toHaveText(type); - await expect(discounts.ruleSection).toHaveText("Add your first rule to set up a promotion"); -})}; + for (const type of discountType) { + test(`TC: SALEOR_97 Create promotion with ${type} predicate @discounts @e2e`, async () => { + const discountName = `${faker.lorem.word()}+${type}`; + await discounts.gotoListView(); + await discounts.clickCreateDiscountButton(); + await discounts.typeDiscountName(discountName); + await discounts.selectDiscountType(type); + await discounts.typePromotionDescription(faker.lorem.sentence()); + await discounts.typeStartDate(); + await discounts.typeStartHour(); + await discounts.clickEndDateCheckbox(); + await discounts.typeEndDate(); + await discounts.typeEndHour(); + await discounts.clickSaveButton(); + await expect(discounts.successBanner).toBeVisible({ timeout: 10000 }); + await expect(discounts.pageHeader).toHaveText(discountName); + await expect(discounts.discountTypeSelect).toHaveText(type); + await expect(discounts.ruleSection).toHaveText("Add your first rule to set up a promotion"); + })}; test(`TC: SALEOR_98 Update existing promotion @discounts @e2e`, async () => { @@ -57,14 +57,119 @@ test(`TC: SALEOR_98 Update existing promotion @discounts @e2e`, async () => { const promotions = [DISCOUNTS.promotionWithoutRulesToBeDeleted, DISCOUNTS.promotionWithRulesToBeDeleted]; for (const promotion of promotions) { -test(`TC: SALEOR_99 Delete existing ${promotion.name} @discounts @e2e`, async () => { - await discounts.gotoExistingDiscount(promotion.id); - await discounts.ruleSection.waitFor({ + test(`TC: SALEOR_99 Delete existing ${promotion.name} @discounts @e2e`, async () => { + await discounts.gotoExistingDiscount(promotion.id); + await discounts.ruleSection.waitFor({ + state: "visible", + timeout: 10000, + }); + await expect(discounts.discountNameInput).toHaveValue(promotion.name, {timeout: 30000}); + await discounts.clickDeleteButton(); + await discounts.deleteDialog.clickConfirmDeleteButton(); + await expect(discounts.successBanner).toBeVisible({ timeout: 10000 }); + })}; + +const promotion = DISCOUNTS.cataloguePromotion +const products = { promotionRule: "Products", predicateValue: PRODUCTS.e2eProductWithVariant1.name, predicate: PRODUCTS.e2eProductWithVariant1.name }; +const categories = { promotionRule: "Categories", predicateValue: CATEGORIES.e2eCategory.name, predicate: CATEGORIES.e2eCategory.name }; +const collections = { promotionRule: "Collections", predicateValue: COLLECTIONS.e2eCollection.name, predicate: COLLECTIONS.e2eCollection.name }; +const variant = PRODUCTS.e2eProductWithVariant1.variantName +const productWithVariant = PRODUCTS.e2eProductWithVariant1.name +const productWithVariantName = `${ productWithVariant }` + ` - ` + `${ variant }` +const variants = {promotionRule: "Variants", predicateValue: `${productWithVariant}`, predicate: `${productWithVariantName}`} +const predicateValues = [categories, collections, products, variants]; +const rewardValue = "10"; +const channelName = CHANNELS.channelPLN.name +for (const { promotionRule, predicateValue, predicate } of predicateValues) { + test(`TC: SALEOR_100 Create ${promotionRule} rule for ${predicate} in a catalogue promotion @discounts @e2e`, async () => { + await discounts.gotoExistingDiscount(promotion.id); + await discounts.ruleSection.waitFor({ state: "visible", timeout: 10000, }); - await expect(discounts.discountNameInput).toHaveValue(promotion.name, {timeout: 30000}); - await discounts.clickDeleteButton(); - await discounts.deleteDialog.clickConfirmDeleteButton(); - await expect(discounts.successBanner).toBeVisible({ timeout: 10000 }); - })}; + const name = `Rule for ${promotionRule}`; + await discounts.openPromotionRuleModal(); + await discounts.promotionRuleDialog.typePromotionRuleName(name); + await discounts.promotionRuleDialog.typePromotionRuleDescription(faker.lorem.sentence()); + await discounts.promotionRuleDialog.selectSingleChannel(channelName); + await discounts.promotionRuleDialog.selectPercentageRewardValueType() + await discounts.promotionRuleDialog.typeRewardValue(rewardValue); + await discounts.promotionRuleDialog.clickFirstAddRuleConditionButton(); + await discounts.promotionRuleDialog.clickRuleConditionPredicateDropdown(); + await discounts.promotionRuleDialog.selectPredicate(promotionRule); + await discounts.promotionRuleDialog.selectRuleConditionValue(predicateValue); + await discounts.promotionRuleDialog.selectPercentageRewardValueType() + await discounts.promotionRuleDialog.typeRewardValue(rewardValue); + await discounts.promotionRuleDialog.clickSaveRuleButton(); + await expect(discounts.successBanner).toBeVisible({ timeout: 10000 }); + await expect(discounts.existingRule.filter({ hasText: `Catalog rule: ${name}` })).toContainText(`Catalog rule: ${name}Discount of ${rewardValue}% on the purchase of ${promotionRule}: ${predicate} through the ${channelName}`) + } +)}; + +const currency = CHANNELS.channelPLN.currency +const rewardValueFixed = "15.00" +const conditionLte = { conditionType: "lower", value: "50.00", conditionDesc: "lower than"} +const conditionGte = { conditionType: "greater", value: "20.00", conditionDesc: "greater than"} +const notEqConditions = [conditionLte, conditionGte] +const orderPromotion = DISCOUNTS.orderPromotion +for (const { conditionType, value, conditionDesc } of notEqConditions) { + test(`TC: SALEOR_101 Create subtotal type rule with multiple conditions with ${conditionDesc} in order promotion @discounts @e2e`, async () => { + await discounts.gotoExistingDiscount(orderPromotion.id); + await discounts.ruleSection.waitFor({ + state: "visible", + timeout: 10000, + }) + const name = `Rule with multiple conditions with ${conditionDesc} in order promotion`; + await discounts.openPromotionRuleModal(); + await discounts.promotionRuleDialog.typePromotionRuleName(name); + await discounts.promotionRuleDialog.typePromotionRuleDescription(faker.lorem.sentence()); + await discounts.promotionRuleDialog.selectSingleChannel(channelName); + await discounts.promotionRuleDialog.selectSubtotalDiscountType() + await discounts.promotionRuleDialog.selectFixedRewardValueType() + await discounts.promotionRuleDialog.typeRewardValue(rewardValueFixed); + await discounts.promotionRuleDialog.clickFirstAddRuleConditionButton(); + await discounts.promotionRuleDialog.clickRuleConditionPredicateDropdown(); + await discounts.promotionRuleDialog.selectPredicate("Subtotal price"); + await discounts.promotionRuleDialog.selectRuleConditionType("is") + await discounts.promotionRuleDialog.typeRuleConditionValue("100.00"); + await discounts.promotionRuleDialog.clickAnotherAddRuleConditionButton(); + await discounts.promotionRuleDialog.clickRuleConditionPredicateDropdown(); + await discounts.promotionRuleDialog.selectPredicate("Total price", 1); + await discounts.promotionRuleDialog.selectRuleConditionType(conditionType) + await discounts.promotionRuleDialog.typeRuleConditionValue(value, 1); + await discounts.promotionRuleDialog.clickSaveRuleButton(); + await expect(discounts.successBanner).toBeVisible({ timeout: 10000 }); + await expect(discounts.existingRule.filter({ hasText: `Order rule: ${name}` })).toContainText(`Order rule: ${name}Discount of ${currency} ${rewardValueFixed} on the purchase of Subtotal price: ${currency} 100.00Total price: ${conditionDesc} ${currency} ${value} through the ${channelName}`) + ;} +)} + + +const condition1 = { condition: "Subtotal", gte:"150.00", lte: "170.00"} +const condition2 = { condition: "Total", gte:"20.00", lte: "50.00"} +const conditionsBetween = [condition1, condition2] +for (const { condition, lte, gte } of conditionsBetween) { + test(`TC: SALEOR_102 Create gift reward rule with ${condition} between ${gte} and ${lte} in order promotion @discounts @e2e`, async () => { + await discounts.gotoExistingDiscount(orderPromotion.id); + await discounts.ruleSection.waitFor({ + state: "visible", + timeout: 10000, + }) + const name = `Gift reward rule for ${condition} between ${gte} and ${lte}`; + await discounts.openPromotionRuleModal(); + await discounts.promotionRuleDialog.typePromotionRuleName(name); + await discounts.promotionRuleDialog.typePromotionRuleDescription(faker.lorem.sentence()); + await discounts.promotionRuleDialog.selectSingleChannel(channelName); + await discounts.promotionRuleDialog.selectGiftRewardDiscountType() + await discounts.promotionRuleDialog.selectGiftReward("Polo Shirt") + await discounts.promotionRuleDialog.clickFirstAddRuleConditionButton(); + await discounts.promotionRuleDialog.clickRuleConditionPredicateDropdown(); + await discounts.promotionRuleDialog.selectPredicate(`${condition} price`); + await discounts.promotionRuleDialog.selectRuleConditionType("between") + await discounts.promotionRuleDialog.typeRuleConditionBoundaryValues(gte, lte); + await discounts.promotionRuleDialog.clickSaveRuleButton(); + await expect(discounts.successBanner).toBeVisible({ timeout: 10000 }); + await expect(discounts.existingRule.filter({ hasText: `Order rule: ${name}` })).toContainText( + `Order rule: ${name}Discount of Gift on the purchase of ${condition} price: PLN ${ gte }–${ lte } through the ${ channelName }`); + } + ) +} diff --git a/src/discounts/components/DiscountRules/componenets/RuleForm/components/RuleConditionRow/RuleConditionRow.tsx b/src/discounts/components/DiscountRules/componenets/RuleForm/components/RuleConditionRow/RuleConditionRow.tsx index fad78eb0e72..4f8439533dc 100644 --- a/src/discounts/components/DiscountRules/componenets/RuleForm/components/RuleConditionRow/RuleConditionRow.tsx +++ b/src/discounts/components/DiscountRules/componenets/RuleForm/components/RuleConditionRow/RuleConditionRow.tsx @@ -28,7 +28,7 @@ export const RuleConditionRow = ({ placeItems="center" alignItems="start" > - + - + - + diff --git a/src/discounts/components/DiscountRules/componenets/RuleForm/components/RuleConditions/RuleConditions.tsx b/src/discounts/components/DiscountRules/componenets/RuleForm/components/RuleConditions/RuleConditions.tsx index 53d7bcedd5f..54c4d7d0fbe 100644 --- a/src/discounts/components/DiscountRules/componenets/RuleForm/components/RuleConditions/RuleConditions.tsx +++ b/src/discounts/components/DiscountRules/componenets/RuleForm/components/RuleConditions/RuleConditions.tsx @@ -97,6 +97,7 @@ export const RuleConditions = ({ alignSelf="start" disabled={disabled} onClick={() => append(createEmptyCodition())} + data-test-id="add-another-condition-button" > diff --git a/src/discounts/components/DiscountRules/componenets/RuleForm/components/RuleConditions/components/AddConditionsSection/AddConditionsSection.tsx b/src/discounts/components/DiscountRules/componenets/RuleForm/components/RuleConditions/components/AddConditionsSection/AddConditionsSection.tsx index 07bbb9cf47d..317f1c2e39d 100644 --- a/src/discounts/components/DiscountRules/componenets/RuleForm/components/RuleConditions/components/AddConditionsSection/AddConditionsSection.tsx +++ b/src/discounts/components/DiscountRules/componenets/RuleForm/components/RuleConditions/components/AddConditionsSection/AddConditionsSection.tsx @@ -27,7 +27,7 @@ export const AddConditionsSection = ({ alignSelf="start" disabled={disabled} onClick={addCondition} - data-test-id="add-rule-condition-button" + data-test-id="add-first-condition-button" > diff --git a/src/discounts/components/DiscountRules/componenets/RuleForm/components/RuleRewardTypeSelect/RuleRewardTypeSelect.tsx b/src/discounts/components/DiscountRules/componenets/RuleForm/components/RuleRewardTypeSelect/RuleRewardTypeSelect.tsx index 34ca185ac83..941bea54e43 100644 --- a/src/discounts/components/DiscountRules/componenets/RuleForm/components/RuleRewardTypeSelect/RuleRewardTypeSelect.tsx +++ b/src/discounts/components/DiscountRules/componenets/RuleForm/components/RuleRewardTypeSelect/RuleRewardTypeSelect.tsx @@ -24,6 +24,7 @@ export const RuleRewardTypeSelect = () => { return (