saleor-dashboard/cypress/support/api/requests/Product.js

360 lines
7.4 KiB
JavaScript
Raw Normal View History

import { stringify } from "../.././formatData/formatJson";
import { returnValueDependsOnShopVersion } from "../../formatData/dataDependingOnVersion";
import { getValueWithDefault, getVariantsListIds } from "./utils/Utils";
2021-02-23 12:09:58 +00:00
export function getFirstProducts(first, search) {
const filter = search
? `, filter:{
2021-02-16 14:19:46 +00:00
search:"${search}"
}`
: "";
const query = `query{
products(first:${first}${filter}){
edges{
node{
id
name
variants{
id
}
}
}
}
}`;
return cy
.sendRequestWithQuery(query)
.then(resp => resp.body.data.products.edges);
}
export function updateProduct(productId, input) {
const mutation = `mutation {
productUpdate(id:"${productId}", input:${stringify(input)} ){
productErrors{
field
message
}
product{
id
}
}
}
`;
return cy
.sendRequestWithQuery(mutation)
.its("body.data.productUpdate.product");
}
2021-02-04 11:15:27 +00:00
export function updateChannelInProduct({
productId,
channelId,
Add channel shipping zones (#1015) * Add naked input option to SingleAutocompleteSelectField and update it's stories * Add new icons - chevron up, down & trash * Add deletable item component and stories * Add card add items footer component to be used in warehouses and product stocks assign * Update schema and types * Add shipping zones card components * Update channel details page form to also include shipping zones * Update makeTopLevelSearch hook files directory and add getSearchFetchMoreProps function to avoid extracting it manually every time * Update channels types & fragments * Move getDefaultNotifierSuccessErrorData function to useNotifier utils, update dir etc., also make order discount provider use it from the new dir * Add shippinh zone to channel update and create and add shipping zone search * Update messages * Fix types * Fix lint, types etc * Small refactor from review and quick fix styles of shipping zones card * Refactor a bit and update snapshots * Refactor a bit and update snapshots * Addd / refactor channels availability components * Add useChannelsWithProductVariants hook with utils and types * Add / refactor more channels availability components * Move avatar from table cell avatar to separate component for it to be usable outside of tables * Add channels with variants logic to product create and update pages & views * Refactor components to use updated channels availability components * Remove unnecessary comments * Update storybook * Update types * Update messages * Fix prices for variants / simple product not uodating properly * Post merge cleanup, update schema, types, etc. * Change shipping zone details warehouses card into settings card and add ability to assign channels to shipping zone * Update types * Update snapshots * Fix selecting / deselecting all channels in channels with variants modal * Fixes after review, some types changes etc. * Update snapshots * Small types fixes * Make price rates views use parent shipping method channels instead of all * Make price rates views use parent shipping method channels instead of all * Update types * Fix bugs * Fixes after review * Fix channels availability data submission * Fix lint * Fix variant pricing card showing not related channels * Fixes after review * Fix types * Hide unaviable variants in add products to draft order dialog * Fix channels with variants availability modal showing confirm button as enabled when it shouldn't * Fix types * Update semi checked icon to match old designs * Update types * Update channels icon in channels with variants availability * Fix product cypress test after product channels mutation changed * Fix trash and chevron down colors in dark mode * Fix shipping zones card footer not updating query after click away * Fix types in schema, add condition not to display shipping zones select in channel details if all zones have already been selected * Fix products adding in order draft dialog * Fix simple productupdate * Update snapshots after merge with master * Update messages * Fix product api request for cypress * Add missing test id * Fix selecting if product is simple -> form being submitted with empty data sometimes * Update snapshots, messages and add fix for invalid date at product update * Remove unnecessary imports * Fix failing test in saleor 2552 (#1061) * fix * fix * fix Co-authored-by: Jakub Majorek <majorek.jakub@gmail.com> Co-authored-by: Karolina <rakoczy.karolina@gmail.com>
2021-04-14 13:44:25 +00:00
variantsIdsToAdd = "[]",
variantsIdsToRemove = "[]",
isPublished = true,
isAvailableForPurchase = true,
visibleInListings = true
}) {
const mutation = `mutation{
productChannelListingUpdate(id:"${productId}",
input:{
Add channel shipping zones (#1015) * Add naked input option to SingleAutocompleteSelectField and update it's stories * Add new icons - chevron up, down & trash * Add deletable item component and stories * Add card add items footer component to be used in warehouses and product stocks assign * Update schema and types * Add shipping zones card components * Update channel details page form to also include shipping zones * Update makeTopLevelSearch hook files directory and add getSearchFetchMoreProps function to avoid extracting it manually every time * Update channels types & fragments * Move getDefaultNotifierSuccessErrorData function to useNotifier utils, update dir etc., also make order discount provider use it from the new dir * Add shippinh zone to channel update and create and add shipping zone search * Update messages * Fix types * Fix lint, types etc * Small refactor from review and quick fix styles of shipping zones card * Refactor a bit and update snapshots * Refactor a bit and update snapshots * Addd / refactor channels availability components * Add useChannelsWithProductVariants hook with utils and types * Add / refactor more channels availability components * Move avatar from table cell avatar to separate component for it to be usable outside of tables * Add channels with variants logic to product create and update pages & views * Refactor components to use updated channels availability components * Remove unnecessary comments * Update storybook * Update types * Update messages * Fix prices for variants / simple product not uodating properly * Post merge cleanup, update schema, types, etc. * Change shipping zone details warehouses card into settings card and add ability to assign channels to shipping zone * Update types * Update snapshots * Fix selecting / deselecting all channels in channels with variants modal * Fixes after review, some types changes etc. * Update snapshots * Small types fixes * Make price rates views use parent shipping method channels instead of all * Make price rates views use parent shipping method channels instead of all * Update types * Fix bugs * Fixes after review * Fix channels availability data submission * Fix lint * Fix variant pricing card showing not related channels * Fixes after review * Fix types * Hide unaviable variants in add products to draft order dialog * Fix channels with variants availability modal showing confirm button as enabled when it shouldn't * Fix types * Update semi checked icon to match old designs * Update types * Update channels icon in channels with variants availability * Fix product cypress test after product channels mutation changed * Fix trash and chevron down colors in dark mode * Fix shipping zones card footer not updating query after click away * Fix types in schema, add condition not to display shipping zones select in channel details if all zones have already been selected * Fix products adding in order draft dialog * Fix simple productupdate * Update snapshots after merge with master * Update messages * Fix product api request for cypress * Add missing test id * Fix selecting if product is simple -> form being submitted with empty data sometimes * Update snapshots, messages and add fix for invalid date at product update * Remove unnecessary imports * Fix failing test in saleor 2552 (#1061) * fix * fix * fix Co-authored-by: Jakub Majorek <majorek.jakub@gmail.com> Co-authored-by: Karolina <rakoczy.karolina@gmail.com>
2021-04-14 13:44:25 +00:00
updateChannels:{
channelId:"${channelId}"
isPublished:${isPublished}
isAvailableForPurchase:${isAvailableForPurchase}
visibleInListings:${visibleInListings}
Add channel shipping zones (#1015) * Add naked input option to SingleAutocompleteSelectField and update it's stories * Add new icons - chevron up, down & trash * Add deletable item component and stories * Add card add items footer component to be used in warehouses and product stocks assign * Update schema and types * Add shipping zones card components * Update channel details page form to also include shipping zones * Update makeTopLevelSearch hook files directory and add getSearchFetchMoreProps function to avoid extracting it manually every time * Update channels types & fragments * Move getDefaultNotifierSuccessErrorData function to useNotifier utils, update dir etc., also make order discount provider use it from the new dir * Add shippinh zone to channel update and create and add shipping zone search * Update messages * Fix types * Fix lint, types etc * Small refactor from review and quick fix styles of shipping zones card * Refactor a bit and update snapshots * Refactor a bit and update snapshots * Addd / refactor channels availability components * Add useChannelsWithProductVariants hook with utils and types * Add / refactor more channels availability components * Move avatar from table cell avatar to separate component for it to be usable outside of tables * Add channels with variants logic to product create and update pages & views * Refactor components to use updated channels availability components * Remove unnecessary comments * Update storybook * Update types * Update messages * Fix prices for variants / simple product not uodating properly * Post merge cleanup, update schema, types, etc. * Change shipping zone details warehouses card into settings card and add ability to assign channels to shipping zone * Update types * Update snapshots * Fix selecting / deselecting all channels in channels with variants modal * Fixes after review, some types changes etc. * Update snapshots * Small types fixes * Make price rates views use parent shipping method channels instead of all * Make price rates views use parent shipping method channels instead of all * Update types * Fix bugs * Fixes after review * Fix channels availability data submission * Fix lint * Fix variant pricing card showing not related channels * Fixes after review * Fix types * Hide unaviable variants in add products to draft order dialog * Fix channels with variants availability modal showing confirm button as enabled when it shouldn't * Fix types * Update semi checked icon to match old designs * Update types * Update channels icon in channels with variants availability * Fix product cypress test after product channels mutation changed * Fix trash and chevron down colors in dark mode * Fix shipping zones card footer not updating query after click away * Fix types in schema, add condition not to display shipping zones select in channel details if all zones have already been selected * Fix products adding in order draft dialog * Fix simple productupdate * Update snapshots after merge with master * Update messages * Fix product api request for cypress * Add missing test id * Fix selecting if product is simple -> form being submitted with empty data sometimes * Update snapshots, messages and add fix for invalid date at product update * Remove unnecessary imports * Fix failing test in saleor 2552 (#1061) * fix * fix * fix Co-authored-by: Jakub Majorek <majorek.jakub@gmail.com> Co-authored-by: Karolina <rakoczy.karolina@gmail.com>
2021-04-14 13:44:25 +00:00
addVariants:${variantsIdsToAdd}
removeVariants:${variantsIdsToRemove}
}
}){
product{
id
name
}
}
}`;
return cy.sendRequestWithQuery(mutation);
}
2021-02-04 11:15:27 +00:00
export function updateChannelPriceInVariant(variantId, channelId) {
const mutation = `mutation{
productVariantChannelListingUpdate(id: "${variantId}", input: {
channelId: "${channelId}"
price: 10
costPrice: 10
}){
productChannelListingErrors{
message
}
2021-02-18 15:28:29 +00:00
}
} `;
return cy.sendRequestWithQuery(mutation);
}
export function createProduct({
attributeId,
2021-08-18 11:58:07 +00:00
attributeValue,
name,
productTypeId,
categoryId,
collectionId,
description
}) {
const collection = getValueWithDefault(
collectionId,
`collections:["${collectionId}"]`
);
const category = getValueWithDefault(categoryId, `category:"${categoryId}"`);
const descriptionLine = getValueWithDefault(
description,
`description:"{\\"blocks\\":[{\\"type\\":\\"paragraph\\",\\"data\\":{\\"text\\":\\"${description}\\"}}]}"`
);
2021-08-18 11:58:07 +00:00
const attributeValuesLine = getValueWithDefault(
attributeValue,
`values:["${attributeValue}"]`
);
const attributesLines = getValueWithDefault(
attributeId,
`attributes:[{
id:"${attributeId}"
${attributeValuesLine}
}]`
);
const mutation = `mutation{
productCreate(input:{
${attributesLines}
name:"${name}"
slug:"${name}"
seo:{title:"${name}" description:""}
productType:"${productTypeId}"
${category}
${collection}
${descriptionLine}
}){
product{
id
name
}
productErrors{
field
message
}
}
}`;
return cy
.sendRequestWithQuery(mutation)
.its("body.data.productCreate.product");
}
2021-02-04 11:15:27 +00:00
export function createVariant({
productId,
sku,
warehouseId,
quantityInWarehouse,
channelId,
attributeId,
price = 1,
costPrice = 1,
trackInventory = true,
weight = 1,
attributeName = "value",
preorder
}) {
const preorderLines = getValueWithDefault(
preorder,
`preorder:${stringify(preorder)}`
);
const skuLines = getValueWithDefault(sku, `sku: "${sku}"`);
const attributeLines = getValueWithDefault(
attributeId,
`attributes: [{
id:"${attributeId}"
values: ["${attributeName}"]
}]`,
"attributes:[]"
);
const channelListings = getValueWithDefault(
2021-02-04 11:15:27 +00:00
channelId,
`channelListings:{
2021-02-18 19:32:35 +00:00
channelId:"${channelId}"
price:"${price}"
costPrice:"${costPrice}"
}`
);
2021-02-23 12:09:58 +00:00
const stocks = getValueWithDefault(
warehouseId,
`stocks:{
2021-02-18 19:32:35 +00:00
warehouse:"${warehouseId}"
quantity:${quantityInWarehouse}
2021-02-18 19:32:35 +00:00
}`
);
2021-02-18 19:32:35 +00:00
const mutation = `mutation{
productVariantBulkCreate(product: "${productId}", variants: {
${preorderLines}
${attributeLines}
weight: ${weight}
${skuLines}
${channelListings}
trackInventory:${trackInventory}
${stocks}
}) {
productVariants{
id
name
}
errors{
field
message
}
}
}`;
return cy
.sendRequestWithQuery(mutation)
.its("body.data.productVariantBulkCreate.productVariants");
}
2021-02-04 11:15:27 +00:00
export function deleteProduct(productId) {
const mutation = `mutation{
productDelete(id: "${productId}"){
productErrors{
field
message
}
2021-02-18 15:28:29 +00:00
}
} `;
return cy.sendRequestWithQuery(mutation);
}
export function getVariants(variantsList) {
const variantsIds = getVariantsListIds(variantsList);
const query = `query{
productVariants(first:100 ids:[${variantsIds}]){
edges{
node{
stocks{
warehouse{
id
}
quantity
quantityAllocated
}
}
}
}
}`;
return cy.sendRequestWithQuery(query).its("body.data.productVariants");
}
export function getVariant(id, channelSlug, auth = "auth") {
const preorder = returnValueDependsOnShopVersion(
"3.1",
`preorder{
globalThreshold
globalSoldUnits
endDate
}`
);
const query = `query{
productVariant(id:"${id}" channel:"${channelSlug}"){
id
name
stocks{
warehouse{
id
}
quantityAllocated
}
${preorder}
sku
attributes{
attribute{
inputType
}
values{
name
}
}
pricing{
onSale
discount{
gross{
amount
}
}
price{
gross{
amount
}
}
priceUndiscounted{
gross{
amount
}
}
}
}
}`;
return cy.sendRequestWithQuery(query, auth).its("body.data.productVariant");
}
export function deactivatePreorderOnVariant(variantId) {
const mutation = `mutation{
productVariantPreorderDeactivate(id:"${variantId}"){
errors{
field
message
}
}
}`;
return cy
.sendRequestWithQuery(mutation)
.its("body.data.productVariantPreorderDeactivate");
}
export function activatePreorderOnVariant({
variantId,
threshold = 50,
endDate
}) {
const thresholdLine = getValueWithDefault(
threshold,
`globalThreshold:${threshold}`
);
const endDateLine = getValueWithDefault(endDate, `endDate:${endDate}`);
const mutation = `mutation{
productVariantUpdate(id:"${variantId}", input:{
preorder:{
${thresholdLine}
${endDateLine}
}
}){
errors{
field
message
}
}
}`;
return cy.sendRequestWithQuery(mutation);
}
export function updateVariantPrice({ variantId, channelId, price }) {
const mutation = `mutation {
productVariantChannelListingUpdate(id:"${variantId}", input:{
channelId:"${channelId}"
price:${price}
costPrice:${price}
}){
errors{
field
message
}
}
}`;
return cy
.sendRequestWithQuery(mutation)
.its("body.data.productVariantUpdate");
}