From bc9d6a0666782d2f1f581129994058e4b18fa3a7 Mon Sep 17 00:00:00 2001 From: Karolina Rakoczy Date: Thu, 4 Mar 2021 15:51:55 +0100 Subject: [PATCH] tests for collections --- cypress/integration/collections.js | 56 ++++++++++++------- .../availableForPurchaseProducts.js | 20 +++---- .../menageProducts/publishedProducts.js | 17 ++++-- .../visibleInListingsProducts.js | 31 +++++++--- cypress/utils/storeFront/collectionsUtils.js | 32 ++++------- .../storeFront/storeFrontProductUtils.js | 45 +++++++-------- cypress/utils/storeFront/utils.js | 23 -------- 7 files changed, 109 insertions(+), 115 deletions(-) delete mode 100644 cypress/utils/storeFront/utils.js diff --git a/cypress/integration/collections.js b/cypress/integration/collections.js index 86ea68200..8b854822f 100644 --- a/cypress/integration/collections.js +++ b/cypress/integration/collections.js @@ -2,6 +2,8 @@ import faker from "faker"; import Product from "../apiRequests/Product"; +import Collections from "../apiRequests/storeFront/Collections"; +import Search from "../apiRequests/storeFront/Search"; import CollectionsSteps from "../steps/collectionsSteps"; import { urlList } from "../url/urlList"; import ChannelsUtils from "../utils/channelsUtils"; @@ -16,6 +18,8 @@ import { isProductVisibleInSearchResult } from "../utils/storeFront/storeFrontPr describe("Collections", () => { const productRequest = new Product(); + const collectionsRequest = new Collections(); + const search = new Search(); const channelsUtils = new ChannelsUtils(); const productsUtils = new ProductsUtils(); const collectionsUtils = new CollectionsUtils(); @@ -73,25 +77,34 @@ describe("Collections", () => { collectionsSteps.assignProductsToCollection(name); }) .then(() => { - isCollectionVisible(collection.id, defaultChannel.slug); + collectionsRequest.getCollection(collection.id, defaultChannel.slug); }) - .then(isVisible => expect(isVisible).to.equal(false)); + .then(resp => { + const isVisible = isCollectionVisible(resp, collection.id); + expect(isVisible).to.equal(false); + }); }); it("should display collections", () => { const collectionName = `${startsWith}${faker.random.number()}`; + let collection; cy.visit(urlList.collections); - collectionsSteps .createCollection(collectionName, true, defaultChannel) - .then(collection => { + .then(collectionResp => { + collection = collectionResp; collectionsSteps.assignProductsToCollection(name); - isCollectionVisible(collection.id, defaultChannel.slug); + collectionsRequest.getCollection(collection.id, defaultChannel.slug); }) - .then(isVisible => expect(isVisible).to.equal(true)); + .then(resp => { + const isVisible = isCollectionVisible(resp, collection.id); + expect(isVisible).to.equal(true); + }); }); it("should not display collection not set as available in channel", () => { const collectionName = `${startsWith}${faker.random.number()}`; + let collection; + channelsUtils .createChannel({ name: collectionName }) .then(() => { @@ -108,11 +121,15 @@ describe("Collections", () => { channelsUtils.getCreatedChannel() ); }) - .then(collection => { + .then(collectionResp => { + collection = collectionResp; collectionsSteps.assignProductsToCollection(name); - isCollectionVisible(collection.id, defaultChannel.slug); + collectionsRequest.getCollection(collection.id, defaultChannel.slug); }) - .then(isVisible => expect(isVisible).to.equal(false)); + .then(resp => { + const isVisible = isCollectionVisible(resp, collection.id); + expect(isVisible).to.equal(false); + }); }); it("should display products hidden in listing", () => { // Products "hidden in listings" are not displayed in Category listings or search results, @@ -137,22 +154,23 @@ describe("Collections", () => { collectionsSteps.assignProductsToCollection(randomName); }) .then(() => { - isProductInCollectionVisible( - collection.id, - defaultChannel.slug, + collectionsRequest.getCollection(collection.id, defaultChannel.slug); + }) + .then(resp => { + const isVisible = isProductInCollectionVisible( + resp, hiddenProductUtils.getCreatedProduct().id ); - }) - .then(isVisible => { expect(isVisible).to.equal(true); }) .then(() => { - isProductVisibleInSearchResult( - hiddenProductUtils.getCreatedProduct().name, - defaultChannel.slug - ); + search.searchInShop(hiddenProductUtils.getCreatedProduct().name); }) - .then(isVisible => { + .then(resp => { + const isVisible = isProductVisibleInSearchResult( + resp, + hiddenProductUtils.getCreatedProduct().name + ); expect(isVisible).to.equal(false); }); }); diff --git a/cypress/integration/products/menageProducts/availableForPurchaseProducts.js b/cypress/integration/products/menageProducts/availableForPurchaseProducts.js index aa33c504e..d7a86e084 100644 --- a/cypress/integration/products/menageProducts/availableForPurchaseProducts.js +++ b/cypress/integration/products/menageProducts/availableForPurchaseProducts.js @@ -1,5 +1,6 @@ import faker from "faker"; +import ProductDetails from "../../../apiRequests/storeFront/ProductDetails"; import ProductSteps from "../../../steps/products/productSteps"; import { productDetailsUrl } from "../../../url/urlList"; import ChannelsUtils from "../../../utils/channelsUtils"; @@ -9,6 +10,7 @@ import { isProductAvailableForPurchase } from "../../../utils/storeFront/storeFr // describe("Products available in listings", () => { + const productDetails = new ProductDetails(); const shippingUtils = new ShippingUtils(); const channelsUtils = new ChannelsUtils(); const productsUtils = new ProductsUtils(); @@ -73,14 +75,13 @@ describe("Products available in listings", () => { productSteps.updateProductIsAvailableForPurchase(productUrl, true); }) .then(() => { - isProductAvailableForPurchase( + productDetails.getProductDetails( productsUtils.getCreatedProduct().id, - defaultChannel.slug, - productName + defaultChannel.slug ); }) - .then(isVisibleResp => { - expect(isVisibleResp).to.be.eq(true); + .then(resp => { + expect(isProductAvailableForPurchase(resp)).to.be.eq(true); }); }); it("should update product to not available for purchase", () => { @@ -101,14 +102,13 @@ describe("Products available in listings", () => { productSteps.updateProductIsAvailableForPurchase(productUrl, false); }) .then(() => { - isProductAvailableForPurchase( + productDetails.getProductDetails( productsUtils.getCreatedProduct().id, - defaultChannel.slug, - productName + defaultChannel.slug ); }) - .then(isProductVisible => { - expect(isProductVisible).to.be.eq(false); + .then(resp => { + expect(isProductAvailableForPurchase(resp)).to.be.eq(false); }); }); }); diff --git a/cypress/integration/products/menageProducts/publishedProducts.js b/cypress/integration/products/menageProducts/publishedProducts.js index e5661b7bf..ab5548a93 100644 --- a/cypress/integration/products/menageProducts/publishedProducts.js +++ b/cypress/integration/products/menageProducts/publishedProducts.js @@ -1,5 +1,6 @@ import faker from "faker"; +import ProductDetails from "../../../apiRequests/storeFront/ProductDetails"; import ProductSteps from "../../../steps/products/productSteps"; import { productDetailsUrl } from "../../../url/urlList"; import ChannelsUtils from "../../../utils/channelsUtils"; @@ -8,6 +9,7 @@ import { isProductVisible } from "../../../utils/storeFront/storeFrontProductUti // describe("Published products", () => { + const productDetails = new ProductDetails(); const channelsUtils = new ChannelsUtils(); const productsUtils = new ProductsUtils(); const productSteps = new ProductSteps(); @@ -52,9 +54,10 @@ describe("Published products", () => { const product = productsUtils.getCreatedProduct(); const productUrl = productDetailsUrl(product.id); productSteps.updateProductPublish(productUrl, true); - isProductVisible(product.id, defaultChannel.slug, productName); + productDetails.getProductDetails(product.id, defaultChannel.slug); }) - .then(isVisible => { + .then(resp => { + const isVisible = isProductVisible(resp, productName); expect(isVisible).to.be.eq(true); }); }); @@ -79,16 +82,18 @@ describe("Published products", () => { product = productsUtils.getCreatedProduct(); const productUrl = productDetailsUrl(product.id); productSteps.updateProductPublish(productUrl, false); - isProductVisible(product.id, defaultChannel.slug, productName); + productDetails.getProductDetails(product.id, defaultChannel.slug); }) - .then(isVisible => { + .then(resp => { + const isVisible = isProductVisible(resp, productName); expect(isVisible).to.be.eq(false); cy.loginInShop(); }) .then(() => { - isProductVisible(product.id, defaultChannel.slug, productName); + productDetails.getProductDetails(product.id, defaultChannel.slug); }) - .then(isVisible => { + .then(resp => { + const isVisible = isProductVisible(resp, productName); expect(isVisible).to.be.eq(true); }); }); diff --git a/cypress/integration/products/menageProducts/visibleInListingsProducts.js b/cypress/integration/products/menageProducts/visibleInListingsProducts.js index e34e1c413..9d5d06c54 100644 --- a/cypress/integration/products/menageProducts/visibleInListingsProducts.js +++ b/cypress/integration/products/menageProducts/visibleInListingsProducts.js @@ -1,5 +1,6 @@ import faker from "faker"; +import Search from "../../../apiRequests/storeFront/Search"; import ProductSteps from "../../../steps/products/productSteps"; import { productDetailsUrl } from "../../../url/urlList"; import ChannelsUtils from "../../../utils/channelsUtils"; @@ -8,6 +9,7 @@ import { isProductVisibleInSearchResult } from "../../../utils/storeFront/storeF // describe("Products displayed in listings", () => { + const search = new Search(); const channelsUtils = new ChannelsUtils(); const productsUtils = new ProductsUtils(); const productSteps = new ProductSteps(); @@ -52,9 +54,13 @@ describe("Products displayed in listings", () => { const product = productsUtils.getCreatedProduct(); const productUrl = productDetailsUrl(product.id); productSteps.updateProductVisibleInListings(productUrl); - isProductVisibleInSearchResult(productName, defaultChannel.slug); + search.searchInShop(productName); }) - .then(isProductVisible => { + .then(resp => { + const isProductVisible = isProductVisibleInSearchResult( + resp, + productName + ); expect(isProductVisible).to.be.eq(true); }); }); @@ -78,17 +84,24 @@ describe("Products displayed in listings", () => { const product = productsUtils.getCreatedProduct(); const productUrl = productDetailsUrl(product.id); productSteps.updateProductVisibleInListings(productUrl); - isProductVisibleInSearchResult(productName, defaultChannel.slug).then( - isProductVisible => { - expect(isProductVisible).to.be.eq(false); - } - ); + + search.searchInShop(productName).then(resp => { + const isProductVisible = isProductVisibleInSearchResult( + resp, + productName + ); + expect(isProductVisible).to.be.eq(false); + }); cy.loginInShop(); }) .then(() => { - isProductVisibleInSearchResult(productName, defaultChannel.slug); + search.searchInShop(productName); }) - .then(isProductVisible => { + .then(resp => { + const isProductVisible = isProductVisibleInSearchResult( + resp, + productName + ); expect(isProductVisible).to.be.eq(true); }); }); diff --git a/cypress/utils/storeFront/collectionsUtils.js b/cypress/utils/storeFront/collectionsUtils.js index e94345f70..278300ce9 100644 --- a/cypress/utils/storeFront/collectionsUtils.js +++ b/cypress/utils/storeFront/collectionsUtils.js @@ -1,23 +1,11 @@ -import Collections from "../../apiRequests/storeFront/Collections"; -import { isVisible } from "./utils"; +export const isCollectionVisible = (resp, collectionId) => { + const collection = resp.body.data.collection; + return collection !== null && collection.id === collectionId; +}; -const collectionsRequest = new Collections(); - -export const isCollectionVisible = (collectionId, channelSlug) => - isVisible({ - request: collectionsRequest.getCollection(collectionId, channelSlug), - respObjectKey: ["collection"], - responseValueKey: ["id"], - value: collectionId - }); -export const isProductInCollectionVisible = ( - collectionId, - channelSlug, - productId -) => - isVisible({ - request: collectionsRequest.getCollection(collectionId, channelSlug), - respObjectKey: ["collection", "products"], - responseValueKey: ["edges", 0, "node", "id"], - value: productId - }); +export const isProductInCollectionVisible = (resp, productId) => { + const productsList = resp.body.data.collection.products; + return ( + productsList.totalCount !== 0 && productsList.edges[0].node.id === productId + ); +}; diff --git a/cypress/utils/storeFront/storeFrontProductUtils.js b/cypress/utils/storeFront/storeFrontProductUtils.js index e6872c738..54c3a1205 100644 --- a/cypress/utils/storeFront/storeFrontProductUtils.js +++ b/cypress/utils/storeFront/storeFrontProductUtils.js @@ -1,37 +1,30 @@ import ProductDetails from "../../apiRequests/storeFront/ProductDetails"; -import Search from "../../apiRequests/storeFront/Search"; -import { isVisible } from "./utils"; -const productDetails = new ProductDetails(); -const search = new Search(); +export const isProductVisible = (resp, name) => { + const product = resp.body.data.product; + return product !== null && product.name === name; +}; -export const isProductVisible = (productId, channelSlug, name) => - isVisible({ - request: productDetails.getProductDetails(productId, channelSlug), - respObjectKey: ["product"], - responseValueKey: ["name"], - value: name - }); +export const isProductAvailableForPurchase = resp => { + const product = resp.body.data.product; + return product.isAvailableForPurchase; +}; -export const isProductAvailableForPurchase = (productId, channelSlug) => - isVisible({ - request: productDetails.getProductDetails(productId, channelSlug), - respObjectKey: ["product"], - responseValueKey: ["isAvailableForPurchase"] - }); -export const isProductVisibleInSearchResult = (productName, channelSlug) => - isVisible({ - request: search.searchInShop(productName, channelSlug), - respObjectKey: ["products"], - responseValueKey: ["edges", 0, "node", "name"], - value: productName - }); +export const isProductVisibleInSearchResult = (resp, productName) => { + const productsList = resp.body.data.products; + return ( + productsList.totalCount !== 0 && + productsList.edges[0].node.name === productName + ); +}; -export const getProductVariants = (productId, channelSlug) => - productDetails.getProductDetails(productId, channelSlug).then(resp => { +export const getProductVariants = (productId, channelSlug) => { + const productDetails = new ProductDetails(); + return productDetails.getProductDetails(productId, channelSlug).then(resp => { const variantsList = resp.body.data.product.variants; return variantsList.map(element => ({ name: element.name, price: element.pricing.price.gross.amount })); }); +}; diff --git a/cypress/utils/storeFront/utils.js b/cypress/utils/storeFront/utils.js deleted file mode 100644 index a16911fe4..000000000 --- a/cypress/utils/storeFront/utils.js +++ /dev/null @@ -1,23 +0,0 @@ -export const isVisible = ({ - request, - respObjectKey, - responseValueKey, - value = true -}) => - request.then(resp => { - resp = resp.body.data; - respObjectKey.forEach(element => { - resp = resp[element]; - }); - if (resp === null) { - return false; - } - if ("totalCount" in resp && resp.totalCount === 0) { - return false; - } - let respValue = resp; - responseValueKey.forEach(element => { - respValue = respValue[element]; - }); - return respValue === value; - });