From 27e5d912e403a981420abbb9726ad80e3fb7dbdc Mon Sep 17 00:00:00 2001 From: Karolina Rakoczy Date: Thu, 11 Feb 2021 13:20:00 +0100 Subject: [PATCH] tests for dashboard --- cypress/apiRequests/Channels.js | 4 +- cypress/apiRequests/Checkout.js | 2 +- .../elements/dashboard/dashboard-selectors.js | 17 +++--- cypress/integration/dashboard.js | 55 +++++++++++-------- cypress/support/softAsserations/index.js | 11 ++++ cypress/utils/ordersUtils.js | 4 +- cypress/utils/productsUtils.js | 2 +- src/components/AppLayout/AppChannelSelect.tsx | 1 + .../SingleSelectField/SingleSelectField.tsx | 5 +- .../HomeActivityCard/HomeActivityCard.tsx | 5 +- .../HomeAnalyticsCard/HomeAnalyticsCard.tsx | 5 +- .../HomeNotificationTable.tsx | 6 +- src/home/components/HomePage/HomePage.tsx | 8 ++- .../HomeProductListCard.tsx | 5 +- 14 files changed, 81 insertions(+), 49 deletions(-) diff --git a/cypress/apiRequests/Channels.js b/cypress/apiRequests/Channels.js index 9afa7cc6b..197a709bc 100644 --- a/cypress/apiRequests/Channels.js +++ b/cypress/apiRequests/Channels.js @@ -55,10 +55,10 @@ class Channels { }); } - deleteChannel(channelId, targetChennelId) { + deleteChannel(channelId, targetChannelId) { const deleteChannelMutation = `mutation{ channelDelete(id: "${channelId}", input:{ - targetChannel: "${targetChennelId}" + targetChannel: "${targetChannelId}" }){ channel{ name diff --git a/cypress/apiRequests/Checkout.js b/cypress/apiRequests/Checkout.js index ca63560f4..0b611f883 100644 --- a/cypress/apiRequests/Checkout.js +++ b/cypress/apiRequests/Checkout.js @@ -50,7 +50,7 @@ class Checkout { }`; return cy.sendRequestWithQuery(mutation); } - compliteCheckout(checkoutId) { + completeCheckout(checkoutId) { const mutation = `mutation{ checkoutComplete(checkoutId:"${checkoutId}"){ order{ diff --git a/cypress/elements/dashboard/dashboard-selectors.js b/cypress/elements/dashboard/dashboard-selectors.js index 5c71fe47e..ad81a2ad8 100644 --- a/cypress/elements/dashboard/dashboard-selectors.js +++ b/cypress/elements/dashboard/dashboard-selectors.js @@ -1,11 +1,10 @@ export const DASHBOARD_SELECTORS = { - sales: "div:nth-child(1) > [class*='HomeAnalyticsCard-cardContent']", - orders: "div:nth-child(2) > [class*='HomeAnalyticsCard-cardContent']", - activity: "[class*='Grid-root'] > div:nth-child(2) > [class*='MuiPaper']", - topProducts: - "[class*='Grid-root'] > div:nth-child(1) > [class*='MuiPaper']:nth-child(4)", - ordersReadyToFulfill: "[class*='HomeNotificationTable'] > tr:nth-child(1)", - paymentsWaitingForCapture: - "[class*='HomeNotificationTable'] > tr:nth-child(2)", - productsOutOfStock: "[class*='HomeNotificationTable'] > tr:nth-child(3)" + sales: "[data-test-id='sales-analytics']", + orders: "[data-test-id='orders-analytics']", + activity: "[data-test-id='activity-card']", + topProducts: "[data-test-id='top-products']", + ordersReadyToFulfill: "[data-test-id='orders-to-fulfill']", + paymentsWaitingForCapture: "[data-test-id='orders-to-capture']", + productsOutOfStock: "[data-test-id='products-out-of-stock']", + dataAreLoading: "[class*='Skeleton-skeleton']" }; diff --git a/cypress/integration/dashboard.js b/cypress/integration/dashboard.js index 4251afa72..471634092 100644 --- a/cypress/integration/dashboard.js +++ b/cypress/integration/dashboard.js @@ -30,15 +30,15 @@ describe("User authorization", () => { cy.clearSessionData().loginUserViaRequest(); }); - xit("should all elements be visible on the dashboard", () => { - cy.visit("/"); - softAssertVisibility(DASHBOARD_SELECTORS.sales); - softAssertVisibility(DASHBOARD_SELECTORS.orders); - softAssertVisibility(DASHBOARD_SELECTORS.activity); - softAssertVisibility(DASHBOARD_SELECTORS.topProducts); - softAssertVisibility(DASHBOARD_SELECTORS.ordersReadyToFulfill); - softAssertVisibility(DASHBOARD_SELECTORS.paymentsWaitingForCapture); - softAssertVisibility(DASHBOARD_SELECTORS.productsOutOfStock); + it("should all elements be visible on the dashboard", () => { + cy.visit("/") + .softAssertVisibility(DASHBOARD_SELECTORS.sales) + .softAssertVisibility(DASHBOARD_SELECTORS.orders) + .softAssertVisibility(DASHBOARD_SELECTORS.activity) + .softAssertVisibility(DASHBOARD_SELECTORS.topProducts) + .softAssertVisibility(DASHBOARD_SELECTORS.ordersReadyToFulfill) + .softAssertVisibility(DASHBOARD_SELECTORS.paymentsWaitingForCapture) + .softAssertVisibility(DASHBOARD_SELECTORS.productsOutOfStock); }); it("should correct amount of orders be displayed", () => { @@ -47,6 +47,9 @@ describe("User authorization", () => { const randomNameProductOutOfStock = `${startsWith}${faker.random.number()}`; const shippingPrice = 12; const productPrice = 22; + let sales = productPrice * 2 + shippingPrice; + + // Create channel, customer, product - everything needed to create order cy.fixture("addresses").then(json => { channels .createChannel(true, randomName, randomName, json.plAddress.currency) @@ -87,12 +90,16 @@ describe("User authorization", () => { ) .then(() => { const variantsList = productsUtils.getCreatedVariants(); - ordersUtils.createReadyToFullfillOrder( + + // Create order ready to fulfill + ordersUtils.createReadyToFulfillOrder( customerId, shippingId, channelId, variantsList ); + + // Create order waiting for capture ordersUtils.createWaitingForCaptureOrder( channelSlug, customerEmail, @@ -100,6 +107,8 @@ describe("User authorization", () => { shippingId ); }); + + // Create product out of stock productsUtils.createProductInChannel( randomNameProductOutOfStock, channelId, @@ -120,18 +129,18 @@ describe("User authorization", () => { .click() .get(HEADER_SELECTORS.channelSelectList) .contains(randomName) - .click(); + .click() + .get(DASHBOARD_SELECTORS.dataAreLoading) + .should("not.exist"); + const regex = /^1\D+/; + sales = sales.toFixed(2).replace(".", ","); + cy.softAssertMatch(DASHBOARD_SELECTORS.ordersReadyToFulfill, regex) + .softAssertMatch(DASHBOARD_SELECTORS.paymentsWaitingForCapture, regex) + .softAssertMatch(DASHBOARD_SELECTORS.productsOutOfStock, regex) + .softAssertMatch( + DASHBOARD_SELECTORS.sales, + new RegExp(`\\D+${sales}\\D+`) + ) + .softAssertMatch(DASHBOARD_SELECTORS.orders, /\D+2\D*/); }); - - function softAssertVisibility(selector) { - cy.get(selector).then(element => chai.softExpect(element).to.be.visible); - } - - function softAssertMatch(selector, regexp) { - cy.get(selector) - .invoke("text") - .then(text => - chai.softExpect(assert.match(text, regexp, "regexp matches")) - ); - } }); diff --git a/cypress/support/softAsserations/index.js b/cypress/support/softAsserations/index.js index 07dc3dcff..559ae921f 100644 --- a/cypress/support/softAsserations/index.js +++ b/cypress/support/softAsserations/index.js @@ -76,3 +76,14 @@ afterEach(() => { errors = []; isSoftAssertion = false; }); + +Cypress.Commands.add("softAssertMatch", (selector, regexp) => { + cy.get(selector) + .invoke("text") + .then(text => + chai.softExpect(assert.match(text, regexp, "regexp matches")) + ); +}); +Cypress.Commands.add("softAssertVisibility", selector => { + cy.get(selector).then(element => chai.softExpect(element).to.be.visible); +}); diff --git a/cypress/utils/ordersUtils.js b/cypress/utils/ordersUtils.js index dad9ebc29..e1416cbc7 100644 --- a/cypress/utils/ordersUtils.js +++ b/cypress/utils/ordersUtils.js @@ -19,11 +19,11 @@ class OrdersUtils { .then(() => checkout .addPayment(checkoutId, "mirumee.payments.dummy", "not-charged") - .then(() => checkout.compliteCheckout(checkoutId)) + .then(() => checkout.completeCheckout(checkoutId)) ); }); } - createReadyToFullfillOrder( + createReadyToFulfillOrder( customerId, shippingMethodId, channelId, diff --git a/cypress/utils/productsUtils.js b/cypress/utils/productsUtils.js index d02efde08..af6601b19 100644 --- a/cypress/utils/productsUtils.js +++ b/cypress/utils/productsUtils.js @@ -121,4 +121,4 @@ class ProductsUtils { }); } } -export default productsUtils; +export default ProductsUtils; diff --git a/src/components/AppLayout/AppChannelSelect.tsx b/src/components/AppLayout/AppChannelSelect.tsx index c9385288a..944443585 100644 --- a/src/components/AppLayout/AppChannelSelect.tsx +++ b/src/components/AppLayout/AppChannelSelect.tsx @@ -38,6 +38,7 @@ const AppChannelSelect: React.FC = ({ return (
= props => { hint, selectProps, placeholder, - InputProps + InputProps, + testId } = props; const classes = useStyles(props); @@ -84,6 +86,7 @@ export const SingleSelectField: React.FC = props => { {label}