From 82cd6477042a92ebd145f70d47917ccba9692c79 Mon Sep 17 00:00:00 2001 From: "M.Graczyk" Date: Mon, 18 Nov 2024 15:18:35 +0100 Subject: [PATCH] Improve test functionality - SALEOR_215 (#5255) * Improve test functionality * add changset * improved changeset * Add more details to changeset * remove unnecessery line * empty commit --- .changeset/violet-laws-hang.md | 5 +++ playwright/tests/orders.spec.ts | 47 +++++++++++++++--------- playwright/tests/shippingMethods.spec.ts | 1 + 3 files changed, 35 insertions(+), 18 deletions(-) create mode 100644 .changeset/violet-laws-hang.md diff --git a/.changeset/violet-laws-hang.md b/.changeset/violet-laws-hang.md new file mode 100644 index 00000000000..f11bd3b9451 --- /dev/null +++ b/.changeset/violet-laws-hang.md @@ -0,0 +1,5 @@ +--- +"saleor-dashboard": patch +--- + +Adjust inline discount test for precise floating-point comparison with .toFixed(2) diff --git a/playwright/tests/orders.spec.ts b/playwright/tests/orders.spec.ts index 62ebb82e36b..b8464f131c3 100644 --- a/playwright/tests/orders.spec.ts +++ b/playwright/tests/orders.spec.ts @@ -342,46 +342,58 @@ for (const refund of orderRefunds) { await expect(ordersPage.orderRefundList).not.toContainText(refund.status); }); } + test(`TC: SALEOR_215 Inline discount is applied in a draft order @draft @discounts @e2e`, async () => { test.slow(); + const calculateDiscountedPrice = ( + undiscountedPrice: number, + discountPercentage: number, + ): number => { + return undiscountedPrice - (undiscountedPrice * discountPercentage) / 100; + }; + + const formatPrice = (price: string): number => parseFloat(price.slice(3)); + const discountedProduct = PRODUCTS.productWithDiscountChannelPLN; const productAlreadyInBasket = ORDERS.draftOrderChannelPLN.productInBasket; + const totalPriceLocator = ordersPage.orderSummary.locator(ordersPage.totalPrice); await ordersPage.goToExistingOrderPage(ORDERS.draftOrderChannelPLN.id); - await draftOrdersPage.basketProductList.waitFor({ state: "visible" }); - const initialTotal = await ordersPage.orderSummary.locator(ordersPage.totalPrice).innerText(); + const [initialTotal] = await Promise.all([ + totalPriceLocator.innerText(), + draftOrdersPage.basketProductList.isVisible(), + ]); expect(initialTotal).toContain(productAlreadyInBasket.price.toString()); + await draftOrdersPage.clickAddProductsButton(); await draftOrdersPage.addProductsDialog.searchForProductInDialog(discountedProduct.name); await draftOrdersPage.addProductsDialog.selectVariantBySKU(discountedProduct.variant.sku); await draftOrdersPage.addProductsDialog.clickConfirmButton(); + await draftOrdersPage.expectElementIsHidden(draftOrdersPage.dialog); await draftOrdersPage.expectElementIsHidden(draftOrdersPage.successBanner); - const calculatedDiscountForAddedProduct = - (await discountedProduct.variant.undiscountedPrice) - - (discountedProduct.variant.undiscountedPrice * - discountedProduct.rewardPercentageDiscountValue) / - 100; - - expect(discountedProduct.variant.discountedPrice).toEqual(calculatedDiscountForAddedProduct); - - const undiscountedTotal = - productAlreadyInBasket.price + discountedProduct.variant.undiscountedPrice; + const expectedDiscountedPrice = calculateDiscountedPrice( + discountedProduct.variant.undiscountedPrice, + discountedProduct.rewardPercentageDiscountValue, + ); - await ordersPage.totalPrice.waitFor({ state: "visible" }); + expect(discountedProduct.variant.discountedPrice).toEqual(expectedDiscountedPrice); - const finalTotal = await ordersPage.orderSummary.locator(ordersPage.totalPrice).innerText(); + await totalPriceLocator.waitFor({ state: "visible" }); - expect(finalTotal.slice(3)).not.toContain(undiscountedTotal.toString()); + const finalTotal = await totalPriceLocator.innerText(); - const discountedTotal = productAlreadyInBasket.price + discountedProduct.variant.discountedPrice; + const expectedTotal = ( + productAlreadyInBasket.price + discountedProduct.variant.discountedPrice + ).toFixed(2); - expect(finalTotal.slice(3)).toContain(discountedTotal.toString()); + expect(formatPrice(finalTotal).toFixed(2)).toEqual(expectedTotal); }); + test(`TC: SALEOR_216 Order type discount is applied to a draft order @draft @discounts @e2e`, async () => { test.slow(); await draftOrdersPage.goToDraftOrdersListView(); @@ -439,7 +451,6 @@ test(`TC: SALEOR_216 Order type discount is applied to a draft order @draft @dis PRODUCTS.productWithPriceLowerThan20.price + PRODUCTS.productWithPriceHigherThan20.price; const finalTotalPrice = await ordersPage.orderSummary.locator(ordersPage.totalPrice).innerText(); - expect(finalTotalPrice.slice(3)).not.toContain(initialSubTotalPrice); expect(finalTotalPrice.slice(3)).not.toContain(initialSubTotalPrice); const discountedOrderSubTotal = undiscountedOrderSubTotal - (undiscountedOrderSubTotal * 5) / 100; diff --git a/playwright/tests/shippingMethods.spec.ts b/playwright/tests/shippingMethods.spec.ts index efccc4d0941..85a21c52d7c 100644 --- a/playwright/tests/shippingMethods.spec.ts +++ b/playwright/tests/shippingMethods.spec.ts @@ -157,6 +157,7 @@ test("TC: SALEOR_37 Update a shipping method @shipping-method @e2e", async () => await shippingMethodsPage.rightSideDetailsPage.typeAndSelectMultipleWarehousesShippingPage( warehousesToBeAssigned, ); + await shippingMethodsPage.expectSuccessBanner(); await shippingMethodsPage.saveShippingZone(); await shippingMethodsPage.expectSuccessBanner();