diff --git a/cypress.json b/cypress.json index f3b5e2cf7..68d5704a0 100644 --- a/cypress.json +++ b/cypress.json @@ -1,8 +1,5 @@ { "baseUrl": "http://localhost:9000", - "env": { - "API_URI": "https://pwa.demo.saleor.rocks/graphql/" - }, "defaultCommandTimeout": 15000, "requestTimeout": 15000, "viewportWidth": 1400, diff --git a/cypress/elements/account/left-menu/left-menu-selectors.js b/cypress/elements/account/left-menu/left-menu-selectors.js index 45728f0d2..453e686ca 100644 --- a/cypress/elements/account/left-menu/left-menu-selectors.js +++ b/cypress/elements/account/left-menu/left-menu-selectors.js @@ -1,16 +1,4 @@ /* eslint-disable sort-keys */ export const LEFT_MENU_SELECTORS = { - catalog: "[data-testid='catalog']", - - PRODUCTS_SELECTORS: { - products: "[data-testid='catalogue']", - createProductBtn: "[data-test='add-product']", - productNameInput: "[name='name']", - productTypeInput: "data-test='product-type'", - categoryInput: "[data-test='category']", - categoryDropdown: "[data-test='singleautocomplete-select-option']", - visibleRadioBtn: "[name='isPublished']", - saveBtn: "[data-test='button-bar-confirm']", - confirmationMsg: "[data-test='notification']" - } + catalog: "[data-testid='catalogue']" }; diff --git a/cypress/elements/catalog/product-selectors.js b/cypress/elements/catalog/product-selectors.js new file mode 100644 index 000000000..aae2d0b9f --- /dev/null +++ b/cypress/elements/catalog/product-selectors.js @@ -0,0 +1,13 @@ +/* eslint-disable sort-keys */ +export const PRODUCTS_SELECTORS = { + products: "[href='/dashboard/products?']", + createProductBtn: "[data-test='add-product']", + productNameInput: "[name='name']", + productTypeInput: "[data-test='product-type']", + categoryInput: "[data-test='category']", + categoryItem: "[data-test='singleautocomplete-select-option']", + firstCategoryItem: "#downshift-0-item-0", + visibleRadioBtn: "[name='isPublished']", + saveBtn: "[data-test='button-bar-confirm']", + confirmationMsg: "[data-test='notification']" +}; diff --git a/cypress/integration/products.js b/cypress/integration/products.js index 778e432aa..b7a034c69 100644 --- a/cypress/integration/products.js +++ b/cypress/integration/products.js @@ -1,37 +1,43 @@ import { LEFT_MENU_SELECTORS } from "../elements/account/left-menu/left-menu-selectors"; -import { LOGIN_SELECTORS } from "../elements/account/login-selectors"; +import { PRODUCTS_SELECTORS } from "../elements/catalog/product-selectors"; // describe("Products", () => { beforeEach(() => { - cy.clearSessionData(); - cy.visit("/"); - cy.loginUser(); + cy.clearSessionData().loginUserViaRequest(); }); it("should add new visible product", () => { - cy.get(LEFT_MENU_SELECTORS.catalog) + cy.visit("/") + .get(LEFT_MENU_SELECTORS.catalog) .click() - .get(LEFT_MENU_SELECTORS.PRODUCTS_SELECTORS.products) + .get(PRODUCTS_SELECTORS.products) .click() - .get(LEFT_MENU_SELECTORS.PRODUCTS_SELECTORS.createProductBtn) + .get(PRODUCTS_SELECTORS.createProductBtn) .click() - .get(LEFT_MENU_SELECTORS.PRODUCTS_SELECTORS.productNameInput) + .get(PRODUCTS_SELECTORS.productNameInput) .click() .type("Visible test product") - .get(LEFT_MENU_SELECTORS.PRODUCTS_SELECTORS.productTypeInput) + .get(PRODUCTS_SELECTORS.productTypeInput) .click() - .type("Cushion{'enter'}") - .get(LEFT_MENU_SELECTORS.PRODUCTS_SELECTORS.categoryInput) + .type("Cushion") + .get(PRODUCTS_SELECTORS.categoryItem) + .should("have.length", 1) + .get(PRODUCTS_SELECTORS.firstCategoryItem) .click() - .get(LEFT_MENU_SELECTORS.PRODUCTS_SELECTORS.categoryDropdown) + .get(PRODUCTS_SELECTORS.categoryInput) + .click() + .get(PRODUCTS_SELECTORS.categoryItem) .first() .click() - .get(LEFT_MENU_SELECTORS.PRODUCTS_SELECTORS.visibleRadioBtn) + .get(PRODUCTS_SELECTORS.visibleRadioBtn) + .first() .click() - .get(LEFT_MENU_SELECTORS.PRODUCTS_SELECTORS.saveBtn) + .get(PRODUCTS_SELECTORS.saveBtn) .click() - .get(LEFT_MENU_SELECTORS.PRODUCTS_SELECTORS.confirmationMsg) - .contains("Product save"); + .get(PRODUCTS_SELECTORS.confirmationMsg, { + timeout: 1000 + }) + .contains("Product created"); }); }); diff --git a/cypress/plugins/index.js b/cypress/plugins/index.js index d72976627..9c5d27c8c 100644 --- a/cypress/plugins/index.js +++ b/cypress/plugins/index.js @@ -16,6 +16,7 @@ * @type {Cypress.PluginConfig} */ module.exports = (on, config) => { - // `on` is used to hook into various events Cypress emits - // `config` is the resolved Cypress config + config.env.API_URI = process.env.API_URI; + + return config; }; diff --git a/cypress/support/user/index.js b/cypress/support/user/index.js index 4889d7d41..ae5c2565f 100644 --- a/cypress/support/user/index.js +++ b/cypress/support/user/index.js @@ -9,3 +9,23 @@ Cypress.Commands.add("loginUser", () => .get(LOGIN_SELECTORS.signInButton) .click() ); + +Cypress.Commands.add("loginUserViaRequest", () => + cy + .request({ + method: "POST", + url: Cypress.env("API_URI"), + body: { + operationName: "TokenAuth", + variables: { + email: Cypress.env("USER_NAME"), + password: Cypress.env("USER_PASSWORD") + }, + query: + "mutation TokenAuth($email: String!, $password: String!) {\n tokenCreate(email: $email, password: $password) {\n token\n errors: accountErrors {\n code\n field\n message\n __typename\n }\n user {\n id\n __typename\n }\n __typename\n }\n}\n" + } + }) + .then(resp => { + window.sessionStorage.setItem("auth", resp.body.data.tokenCreate.token); + }) +);