/// /// import faker from "faker"; import { urlList } from "../../fixtures/urlList"; import { ONE_PERMISSION_USERS } from "../../fixtures/users"; import { createChannel } from "../../support/api/requests/Channels"; import { createProduct, updateChannelInProduct } from "../../support/api/requests/Product"; import { getDefaultChannel } from "../../support/api/utils/channelsUtils"; import * as productUtils from "../../support/api/utils/products/productsUtils"; import * as shippingUtils from "../../support/api/utils/shippingUtils"; import { getProductVariants } from "../../support/api/utils/storeFront/storeFrontProductUtils"; import filterTests from "../../support/filterTests"; import { createFirstVariant, createVariant, variantsShouldBeVisible } from "../../support/pages/catalog/products/VariantsPage"; import { enterHomePageChangeChannelAndReturn, selectChannelInHeader } from "../../support/pages/channelsPage"; filterTests({ definedTags: ["all", "critical", "refactored"] }, () => { describe("As an admin I should be able to create variant", () => { const startsWith = "CyCreateVariants-"; const attributeValues = ["value1", "value2"]; let defaultChannel; let warehouse; let attribute; let productType; let category; let newChannel; before(() => { const name = `${startsWith}${faker.datatype.number()}`; cy.clearSessionData().loginUserViaRequest(); productUtils .createShippingProductTypeAttributeAndCategory(name, attributeValues) .then(resp => { attribute = resp.attribute; productType = resp.productType; category = resp.category; defaultChannel = resp.defaultChannel; warehouse = resp.warehouse; createChannel({ isActive: true, name, currencyCode: "USD" }); }) .then(resp => (newChannel = resp)); }); beforeEach(() => { cy.clearSessionData().loginUserViaRequest( "auth", ONE_PERMISSION_USERS.product ); }); it("should be able to create variant visible for the customers in all channels. TC: SALEOR_2901", () => { const name = `${startsWith}${faker.datatype.number()}`; const price = 10; let createdProduct; createProduct({ attributeId: attribute.id, name, productTypeId: productType.id, categoryId: category.id }) .then(resp => { createdProduct = resp; updateChannelInProduct({ productId: createdProduct.id, channelId: defaultChannel.id }); updateChannelInProduct({ productId: createdProduct.id, channelId: newChannel.id }); cy.visit(`${urlList.products}${createdProduct.id}`); createFirstVariant({ sku: name, price, attribute: attributeValues[0] }); enterHomePageChangeChannelAndReturn(defaultChannel.name); variantsShouldBeVisible({ name, price }); getProductVariants(createdProduct.id, defaultChannel.slug); }) .then(([variant]) => { expect(variant).to.have.property("name", attributeValues[0]); expect(variant).to.have.property("price", price); selectChannelInHeader(newChannel.name); variantsShouldBeVisible({ name, price }); getProductVariants(createdProduct.id, defaultChannel.slug); }) .then(([variant]) => { expect(variant).to.have.property("name", attributeValues[0]); expect(variant).to.have.property("price", price); getProductVariants(createdProduct.id, newChannel.slug); }) .then(([variant]) => { expect(variant).to.have.property("name", attributeValues[0]); expect(variant).to.have.property("price", price); }); }); it("should be able to create several variants visible for the customers. TC: SALEOR_2902", () => { const name = `${startsWith}${faker.datatype.number()}`; const secondVariantSku = `${startsWith}${faker.datatype.number()}`; const variants = [{ price: 7 }, { name: attributeValues[1], price: 16 }]; let createdProduct; productUtils .createProductInChannel({ name, attributeId: attribute.id, channelId: defaultChannel.id, warehouseId: warehouse.id, productTypeId: productType.id, categoryId: category.id, price: variants[0].price }) .then(({ product: productResp }) => { createdProduct = productResp; cy.visit(`${urlList.products}${createdProduct.id}`); createVariant({ sku: secondVariantSku, attributeName: variants[1].name, price: variants[1].price, channelName: defaultChannel.name }); }) .then(() => { enterHomePageChangeChannelAndReturn(defaultChannel.name); variantsShouldBeVisible({ name: variants[1].name, price: variants[1].price }); getProductVariants(createdProduct.id, defaultChannel.slug); }) .then(([firstVariant, secondVariant]) => { expect(firstVariant).to.have.property("price", variants[0].price); expect(secondVariant).to.have.property("name", variants[1].name); expect(secondVariant).to.have.property("price", variants[1].price); }); }); }); });