
* Feed preorder data to product variant forms * Add end preorder date input and handle date data * Translate strings, refactor date parsing * Fix snapshots * CR response * CR response * CR response * Fix negative threshold, product variant preorder toggle, product variant update, and simple product creation * Make preorder data optional * Prevent setting past date as preorder end * Disable replacing preorder variant in order * Adjust fulfill view to preorder in variant * CR response + prevent subbmiting form when endPreorderDate is in the past and display warning * Add ErrorNoticeBar * Translate preorder end date in past error message, fix form submissison disabling logic * Rebase fixes * Fix preorder form disabling logic, remove isPreorder field * Fix edge cases aroud preorder inputs * Update storyshots
1817 lines
45 KiB
TypeScript
1817 lines
45 KiB
TypeScript
/* eslint-disable sort-keys */
|
|
import { FormsetData } from "@saleor/hooks/useFormset";
|
|
import {
|
|
FulfillmentStatus,
|
|
OrderStatus,
|
|
PaymentChargeStatusEnum
|
|
} from "@saleor/types/globalTypes";
|
|
|
|
import { LineItemData } from "../components/OrderReturnPage/form";
|
|
import {
|
|
OrderDetails_order,
|
|
OrderDetails_order_fulfillments_lines,
|
|
OrderDetails_order_lines
|
|
} from "../types/OrderDetails";
|
|
import {
|
|
OrderRefundData_order_fulfillments,
|
|
OrderRefundData_order_lines
|
|
} from "../types/OrderRefundData";
|
|
import {
|
|
getAllFulfillmentLinesPriceSum,
|
|
getPreviouslyRefundedPrice,
|
|
getRefundedLinesPriceSum,
|
|
getReplacedProductsAmount,
|
|
getReturnSelectedProductsAmount,
|
|
getWarehousesFromOrderLines,
|
|
mergeRepeatedOrderLines,
|
|
OrderLineWithStockWarehouses,
|
|
OrderWithTotalAndTotalCaptured
|
|
} from "./data";
|
|
|
|
const orderBase: OrderDetails_order = {
|
|
__typename: "Order",
|
|
actions: [],
|
|
availableShippingMethods: [],
|
|
canFinalize: true,
|
|
channel: null,
|
|
billingAddress: {
|
|
__typename: "Address",
|
|
city: "Port Danielshire",
|
|
cityArea: "",
|
|
companyName: "",
|
|
country: {
|
|
__typename: "CountryDisplay",
|
|
code: "SE",
|
|
country: "Szwecja"
|
|
},
|
|
countryArea: "",
|
|
firstName: "Elizabeth",
|
|
id: "QWRkcmVzczoy",
|
|
lastName: "Vaughn",
|
|
phone: "",
|
|
postalCode: "52203",
|
|
streetAddress1: "419 Ruiz Orchard Apt. 199",
|
|
streetAddress2: ""
|
|
},
|
|
created: "2018-09-11T09:37:30.124154+00:00",
|
|
id: "T3JkZXI6MTk=",
|
|
number: "19",
|
|
paymentStatus: PaymentChargeStatusEnum.FULLY_CHARGED,
|
|
status: OrderStatus.FULFILLED,
|
|
// @ts-ignore
|
|
total: {
|
|
__typename: "TaxedMoney",
|
|
gross: {
|
|
__typename: "Money",
|
|
amount: 1215.89,
|
|
currency: "USD"
|
|
}
|
|
}
|
|
};
|
|
|
|
describe("Get warehouses used in order", () => {
|
|
it("is able to calculate number of used warehouses from order", () => {
|
|
const lines: OrderLineWithStockWarehouses[] = [
|
|
{
|
|
variant: {
|
|
stocks: [
|
|
{
|
|
warehouse: {
|
|
__typename: "Warehouse",
|
|
id: "warehouse-1",
|
|
name: "Warehouse 1"
|
|
}
|
|
},
|
|
{
|
|
warehouse: {
|
|
__typename: "Warehouse",
|
|
id: "warehouse-2",
|
|
name: "Warehouse 2"
|
|
}
|
|
}
|
|
]
|
|
}
|
|
},
|
|
{
|
|
variant: {
|
|
stocks: [
|
|
{
|
|
warehouse: {
|
|
__typename: "Warehouse",
|
|
id: "warehouse-1",
|
|
name: "Warehouse 1"
|
|
}
|
|
},
|
|
{
|
|
warehouse: {
|
|
__typename: "Warehouse",
|
|
id: "warehouse-2",
|
|
name: "Warehouse 2"
|
|
}
|
|
}
|
|
]
|
|
}
|
|
},
|
|
{
|
|
variant: {
|
|
stocks: [
|
|
{
|
|
warehouse: {
|
|
__typename: "Warehouse",
|
|
id: "warehouse-2",
|
|
name: "Warehouse 2"
|
|
}
|
|
},
|
|
{
|
|
warehouse: {
|
|
__typename: "Warehouse",
|
|
id: "warehouse-3",
|
|
name: "Warehouse 3"
|
|
}
|
|
}
|
|
]
|
|
}
|
|
}
|
|
];
|
|
|
|
const orderWarehouses = getWarehousesFromOrderLines(lines);
|
|
|
|
expect(orderWarehouses.length).toBe(3);
|
|
});
|
|
});
|
|
|
|
describe("Get previously refunded price", () => {
|
|
it("is able to calculate refunded price from order", () => {
|
|
const order: OrderWithTotalAndTotalCaptured = {
|
|
total: {
|
|
__typename: "TaxedMoney",
|
|
gross: {
|
|
__typename: "Money",
|
|
amount: 160,
|
|
currency: "USD"
|
|
}
|
|
},
|
|
totalCaptured: {
|
|
__typename: "Money",
|
|
amount: 100,
|
|
currency: "USD"
|
|
}
|
|
};
|
|
|
|
const refundedPrice = getPreviouslyRefundedPrice(order);
|
|
|
|
expect(refundedPrice.amount).toBe(-60);
|
|
});
|
|
});
|
|
|
|
describe("Get refunded lines price sum", () => {
|
|
const lines: OrderRefundData_order_lines[] = [
|
|
{
|
|
__typename: "OrderLine",
|
|
id: "1",
|
|
productName: "Milk 1",
|
|
quantity: 1,
|
|
quantityToFulfill: 0,
|
|
thumbnail: undefined,
|
|
unitPrice: {
|
|
__typename: "TaxedMoney",
|
|
gross: {
|
|
__typename: "Money",
|
|
amount: 10,
|
|
currency: "USD"
|
|
}
|
|
}
|
|
},
|
|
{
|
|
__typename: "OrderLine",
|
|
id: "2",
|
|
productName: "Milk 2",
|
|
quantity: 2,
|
|
quantityToFulfill: 0,
|
|
thumbnail: undefined,
|
|
unitPrice: {
|
|
__typename: "TaxedMoney",
|
|
gross: {
|
|
__typename: "Money",
|
|
amount: 6,
|
|
currency: "USD"
|
|
}
|
|
}
|
|
},
|
|
{
|
|
__typename: "OrderLine",
|
|
id: "3",
|
|
productName: "Milk 3",
|
|
quantity: 4,
|
|
quantityToFulfill: 0,
|
|
thumbnail: undefined,
|
|
unitPrice: {
|
|
__typename: "TaxedMoney",
|
|
gross: {
|
|
__typename: "Money",
|
|
amount: 4,
|
|
currency: "USD"
|
|
}
|
|
}
|
|
}
|
|
];
|
|
|
|
it("is able to sum lines prices", () => {
|
|
const refundedProductQuantities: FormsetData<null, string> = [
|
|
{
|
|
data: null,
|
|
id: "1",
|
|
label: null,
|
|
value: "1"
|
|
},
|
|
{
|
|
data: null,
|
|
id: "2",
|
|
label: null,
|
|
value: "1"
|
|
},
|
|
{
|
|
data: null,
|
|
id: "3",
|
|
label: null,
|
|
value: "1"
|
|
}
|
|
];
|
|
|
|
const refundedLinesPriceSum = getRefundedLinesPriceSum(
|
|
lines,
|
|
refundedProductQuantities
|
|
);
|
|
|
|
expect(refundedLinesPriceSum).toBe(20);
|
|
});
|
|
|
|
it("is able to sum lines prices multiplied by different quantities", () => {
|
|
const refundedProductQuantities: FormsetData<null, string> = [
|
|
{
|
|
data: null,
|
|
id: "1",
|
|
label: null,
|
|
value: "0"
|
|
},
|
|
{
|
|
data: null,
|
|
id: "2",
|
|
label: null,
|
|
value: "2"
|
|
},
|
|
{
|
|
data: null,
|
|
id: "3",
|
|
label: null,
|
|
value: "4"
|
|
}
|
|
];
|
|
|
|
const refundedLinesPriceSum = getRefundedLinesPriceSum(
|
|
lines,
|
|
refundedProductQuantities
|
|
);
|
|
|
|
expect(refundedLinesPriceSum).toBe(28);
|
|
});
|
|
});
|
|
|
|
describe("Get get all fulfillment lines price sum", () => {
|
|
const fulfillments: OrderRefundData_order_fulfillments[] = [
|
|
{
|
|
__typename: "Fulfillment",
|
|
fulfillmentOrder: 1,
|
|
id: "1",
|
|
lines: [
|
|
{
|
|
__typename: "FulfillmentLine",
|
|
id: "1-fulfillment-1",
|
|
orderLine: {
|
|
__typename: "OrderLine",
|
|
id: "1-line-1",
|
|
productName: "Milk 1",
|
|
quantity: 1,
|
|
thumbnail: undefined,
|
|
unitPrice: {
|
|
__typename: "TaxedMoney",
|
|
gross: {
|
|
__typename: "Money",
|
|
amount: 10,
|
|
currency: "USD"
|
|
}
|
|
}
|
|
},
|
|
quantity: 1
|
|
}
|
|
],
|
|
status: FulfillmentStatus.FULFILLED
|
|
},
|
|
{
|
|
__typename: "Fulfillment",
|
|
fulfillmentOrder: 2,
|
|
id: "2",
|
|
lines: [
|
|
{
|
|
__typename: "FulfillmentLine",
|
|
id: "2-fulfillment-1",
|
|
orderLine: {
|
|
__typename: "OrderLine",
|
|
id: "2-line-1",
|
|
productName: "Milk 1",
|
|
quantity: 2,
|
|
thumbnail: undefined,
|
|
unitPrice: {
|
|
__typename: "TaxedMoney",
|
|
gross: {
|
|
__typename: "Money",
|
|
amount: 6,
|
|
currency: "USD"
|
|
}
|
|
}
|
|
},
|
|
quantity: 1
|
|
},
|
|
{
|
|
__typename: "FulfillmentLine",
|
|
id: "2-fulfillment-2",
|
|
orderLine: {
|
|
__typename: "OrderLine",
|
|
id: "2-line-2",
|
|
productName: "Milk 2",
|
|
quantity: 2,
|
|
thumbnail: undefined,
|
|
unitPrice: {
|
|
__typename: "TaxedMoney",
|
|
gross: {
|
|
__typename: "Money",
|
|
amount: 6,
|
|
currency: "USD"
|
|
}
|
|
}
|
|
},
|
|
quantity: 1
|
|
}
|
|
],
|
|
status: FulfillmentStatus.FULFILLED
|
|
},
|
|
{
|
|
__typename: "Fulfillment",
|
|
fulfillmentOrder: 1,
|
|
id: "3",
|
|
lines: [
|
|
{
|
|
__typename: "FulfillmentLine",
|
|
id: "3-fulfillment-1",
|
|
orderLine: {
|
|
__typename: "OrderLine",
|
|
id: "3-line-1",
|
|
productName: "Milk 1",
|
|
quantity: 4,
|
|
thumbnail: undefined,
|
|
unitPrice: {
|
|
__typename: "TaxedMoney",
|
|
gross: {
|
|
__typename: "Money",
|
|
amount: 4,
|
|
currency: "USD"
|
|
}
|
|
}
|
|
},
|
|
quantity: 1
|
|
},
|
|
{
|
|
__typename: "FulfillmentLine",
|
|
id: "3-fulfillment-2",
|
|
orderLine: {
|
|
__typename: "OrderLine",
|
|
id: "3-line-2",
|
|
productName: "Milk 2",
|
|
quantity: 4,
|
|
thumbnail: undefined,
|
|
unitPrice: {
|
|
__typename: "TaxedMoney",
|
|
gross: {
|
|
__typename: "Money",
|
|
amount: 4,
|
|
currency: "USD"
|
|
}
|
|
}
|
|
},
|
|
quantity: 1
|
|
},
|
|
{
|
|
__typename: "FulfillmentLine",
|
|
id: "3-fulfillment-3",
|
|
orderLine: {
|
|
__typename: "OrderLine",
|
|
id: "3-line-3",
|
|
productName: "Milk 3",
|
|
quantity: 4,
|
|
thumbnail: undefined,
|
|
unitPrice: {
|
|
__typename: "TaxedMoney",
|
|
gross: {
|
|
__typename: "Money",
|
|
amount: 4,
|
|
currency: "USD"
|
|
}
|
|
}
|
|
},
|
|
quantity: 1
|
|
}
|
|
],
|
|
status: FulfillmentStatus.FULFILLED
|
|
}
|
|
];
|
|
|
|
it("is able to sum fulfillment lines prices", () => {
|
|
const refundedFulfilledProductQuantities: FormsetData<null, string> = [
|
|
{
|
|
data: null,
|
|
id: "1-fulfillment-1",
|
|
label: null,
|
|
value: "1"
|
|
},
|
|
{
|
|
data: null,
|
|
id: "2-fulfillment-1",
|
|
label: null,
|
|
value: "1"
|
|
},
|
|
{
|
|
data: null,
|
|
id: "2-fulfillment-2",
|
|
label: null,
|
|
value: "1"
|
|
},
|
|
{
|
|
data: null,
|
|
id: "3-fulfillment-1",
|
|
label: null,
|
|
value: "1"
|
|
},
|
|
{
|
|
data: null,
|
|
id: "3-fulfillment-2",
|
|
label: null,
|
|
value: "1"
|
|
},
|
|
{
|
|
data: null,
|
|
id: "3-fulfillment-3",
|
|
label: null,
|
|
value: "1"
|
|
}
|
|
];
|
|
|
|
const allFulfillmentLinesPriceSum = getAllFulfillmentLinesPriceSum(
|
|
fulfillments,
|
|
refundedFulfilledProductQuantities
|
|
);
|
|
|
|
expect(allFulfillmentLinesPriceSum).toBe(34);
|
|
});
|
|
|
|
it("is able to sum fulfillment lines prices multiplied by different quantities", () => {
|
|
const refundedFulfilledProductQuantities: FormsetData<null, string> = [
|
|
{
|
|
data: null,
|
|
id: "1-fulfillment-1",
|
|
label: null,
|
|
value: "0"
|
|
},
|
|
{
|
|
data: null,
|
|
id: "2-fulfillment-1",
|
|
label: null,
|
|
value: "2"
|
|
},
|
|
{
|
|
data: null,
|
|
id: "2-fulfillment-2",
|
|
label: null,
|
|
value: "2"
|
|
},
|
|
{
|
|
data: null,
|
|
id: "3-fulfillment-1",
|
|
label: null,
|
|
value: "4"
|
|
},
|
|
{
|
|
data: null,
|
|
id: "3-fulfillment-2",
|
|
label: null,
|
|
value: "4"
|
|
},
|
|
{
|
|
data: null,
|
|
id: "3-fulfillment-3",
|
|
label: null,
|
|
value: "4"
|
|
}
|
|
];
|
|
|
|
const allFulfillmentLinesPriceSum = getAllFulfillmentLinesPriceSum(
|
|
fulfillments,
|
|
refundedFulfilledProductQuantities
|
|
);
|
|
|
|
expect(allFulfillmentLinesPriceSum).toBe(72);
|
|
});
|
|
});
|
|
|
|
describe("Get the total value of all replaced products", () => {
|
|
it("sums up correctly", () => {
|
|
const unfulfilledLines: OrderDetails_order_lines[] = [
|
|
{
|
|
id: "1",
|
|
isShippingRequired: false,
|
|
variant: {
|
|
id: "UHJvZHVjdFZhcmlhbnQ6MzE3",
|
|
quantityAvailable: 50,
|
|
preorder: null,
|
|
__typename: "ProductVariant"
|
|
},
|
|
productName: "Lake Tunes",
|
|
productSku: "lake-tunes-mp3",
|
|
quantity: 2,
|
|
quantityFulfilled: 2,
|
|
quantityToFulfill: 0,
|
|
undiscountedUnitPrice: {
|
|
__typename: "TaxedMoney",
|
|
currency: "USD",
|
|
gross: {
|
|
__typename: "Money",
|
|
amount: 79.71,
|
|
currency: "USD"
|
|
},
|
|
net: {
|
|
__typename: "Money",
|
|
amount: 79.71,
|
|
currency: "USD"
|
|
}
|
|
},
|
|
unitDiscount: {
|
|
__typename: "Money",
|
|
amount: 79.71,
|
|
currency: "USD"
|
|
},
|
|
unitDiscountReason: null,
|
|
unitDiscountType: null,
|
|
unitDiscountValue: 0,
|
|
unitPrice: {
|
|
gross: {
|
|
amount: 9.99,
|
|
currency: "USD",
|
|
__typename: "Money"
|
|
},
|
|
net: {
|
|
amount: 9.99,
|
|
currency: "USD",
|
|
__typename: "Money"
|
|
},
|
|
__typename: "TaxedMoney"
|
|
},
|
|
thumbnail: {
|
|
url:
|
|
"http://localhost:8000/media/__sized__/products/saleor-digital-03_2-thumbnail-255x255.png",
|
|
__typename: "Image"
|
|
},
|
|
__typename: "OrderLine"
|
|
},
|
|
{
|
|
id: "2",
|
|
isShippingRequired: false,
|
|
variant: {
|
|
id: "UHJvZHVjdFZhcmlhbnQ6MzE3",
|
|
quantityAvailable: 50,
|
|
preorder: null,
|
|
__typename: "ProductVariant"
|
|
},
|
|
productName: "Lake Tunes",
|
|
productSku: "lake-tunes-mp3",
|
|
quantity: 10,
|
|
quantityFulfilled: 2,
|
|
quantityToFulfill: 8,
|
|
undiscountedUnitPrice: {
|
|
__typename: "TaxedMoney",
|
|
currency: "USD",
|
|
gross: {
|
|
__typename: "Money",
|
|
amount: 79.71,
|
|
currency: "USD"
|
|
},
|
|
net: {
|
|
__typename: "Money",
|
|
amount: 79.71,
|
|
currency: "USD"
|
|
}
|
|
},
|
|
unitDiscount: {
|
|
__typename: "Money",
|
|
amount: 79.71,
|
|
currency: "USD"
|
|
},
|
|
unitDiscountReason: null,
|
|
unitDiscountType: null,
|
|
unitDiscountValue: 0,
|
|
unitPrice: {
|
|
gross: {
|
|
amount: 9.99,
|
|
currency: "USD",
|
|
__typename: "Money"
|
|
},
|
|
net: {
|
|
amount: 9.99,
|
|
currency: "USD",
|
|
__typename: "Money"
|
|
},
|
|
__typename: "TaxedMoney"
|
|
},
|
|
thumbnail: {
|
|
url:
|
|
"http://localhost:8000/media/__sized__/products/saleor-digital-03_2-thumbnail-255x255.png",
|
|
__typename: "Image"
|
|
},
|
|
__typename: "OrderLine"
|
|
},
|
|
{
|
|
id: "3",
|
|
isShippingRequired: true,
|
|
variant: {
|
|
id: "UHJvZHVjdFZhcmlhbnQ6Mjg2",
|
|
quantityAvailable: 50,
|
|
preorder: null,
|
|
__typename: "ProductVariant"
|
|
},
|
|
productName: "T-shirt",
|
|
productSku: "29810068",
|
|
quantity: 6,
|
|
quantityFulfilled: 1,
|
|
quantityToFulfill: 5,
|
|
undiscountedUnitPrice: {
|
|
__typename: "TaxedMoney",
|
|
currency: "USD",
|
|
gross: {
|
|
__typename: "Money",
|
|
amount: 79.71,
|
|
currency: "USD"
|
|
},
|
|
net: {
|
|
__typename: "Money",
|
|
amount: 79.71,
|
|
currency: "USD"
|
|
}
|
|
},
|
|
unitDiscount: {
|
|
__typename: "Money",
|
|
amount: 79.71,
|
|
currency: "USD"
|
|
},
|
|
unitDiscountReason: null,
|
|
unitDiscountType: null,
|
|
unitDiscountValue: 0,
|
|
unitPrice: {
|
|
gross: {
|
|
amount: 2.5,
|
|
currency: "USD",
|
|
__typename: "Money"
|
|
},
|
|
net: {
|
|
amount: 2.5,
|
|
currency: "USD",
|
|
__typename: "Money"
|
|
},
|
|
__typename: "TaxedMoney"
|
|
},
|
|
thumbnail: {
|
|
url:
|
|
"http://localhost:8000/media/__sized__/products/saleordemoproduct_cl_boot06_1-thumbnail-255x255.png",
|
|
__typename: "Image"
|
|
},
|
|
__typename: "OrderLine"
|
|
}
|
|
];
|
|
|
|
const fulfilledLines: OrderDetails_order_fulfillments_lines[] = [
|
|
{
|
|
id: "4",
|
|
quantity: 1,
|
|
orderLine: {
|
|
id: "T3JkZXJMaW5lOjQ1",
|
|
isShippingRequired: false,
|
|
variant: {
|
|
id: "UHJvZHVjdFZhcmlhbnQ6MzE3",
|
|
quantityAvailable: 50,
|
|
preorder: null,
|
|
__typename: "ProductVariant"
|
|
},
|
|
productName: "Lake Tunes",
|
|
productSku: "lake-tunes-mp3",
|
|
quantity: 20,
|
|
quantityFulfilled: 6,
|
|
quantityToFulfill: 14,
|
|
undiscountedUnitPrice: {
|
|
__typename: "TaxedMoney",
|
|
currency: "USD",
|
|
gross: {
|
|
__typename: "Money",
|
|
amount: 79.71,
|
|
currency: "USD"
|
|
},
|
|
net: {
|
|
__typename: "Money",
|
|
amount: 79.71,
|
|
currency: "USD"
|
|
}
|
|
},
|
|
unitDiscount: {
|
|
__typename: "Money",
|
|
amount: 79.71,
|
|
currency: "USD"
|
|
},
|
|
unitDiscountReason: null,
|
|
unitDiscountType: null,
|
|
unitDiscountValue: 0,
|
|
unitPrice: {
|
|
gross: {
|
|
amount: 9.99,
|
|
currency: "USD",
|
|
__typename: "Money"
|
|
},
|
|
net: {
|
|
amount: 9.99,
|
|
currency: "USD",
|
|
__typename: "Money"
|
|
},
|
|
__typename: "TaxedMoney"
|
|
},
|
|
thumbnail: {
|
|
url:
|
|
"http://localhost:8000/media/__sized__/products/saleor-digital-03_2-thumbnail-255x255.png",
|
|
__typename: "Image"
|
|
},
|
|
__typename: "OrderLine"
|
|
},
|
|
__typename: "FulfillmentLine"
|
|
},
|
|
{
|
|
id: "5",
|
|
quantity: 1,
|
|
orderLine: {
|
|
id: "T3JkZXJMaW5lOjQ1",
|
|
isShippingRequired: false,
|
|
variant: {
|
|
id: "UHJvZHVjdFZhcmlhbnQ6MzE3",
|
|
quantityAvailable: 50,
|
|
preorder: null,
|
|
__typename: "ProductVariant"
|
|
},
|
|
productName: "Lake Tunes",
|
|
productSku: "lake-tunes-mp3",
|
|
quantity: 25,
|
|
quantityFulfilled: 8,
|
|
quantityToFulfill: 17,
|
|
undiscountedUnitPrice: {
|
|
__typename: "TaxedMoney",
|
|
currency: "USD",
|
|
gross: {
|
|
__typename: "Money",
|
|
amount: 79.71,
|
|
currency: "USD"
|
|
},
|
|
net: {
|
|
__typename: "Money",
|
|
amount: 79.71,
|
|
currency: "USD"
|
|
}
|
|
},
|
|
unitDiscount: {
|
|
__typename: "Money",
|
|
amount: 79.71,
|
|
currency: "USD"
|
|
},
|
|
unitDiscountReason: null,
|
|
unitDiscountType: null,
|
|
unitDiscountValue: 0,
|
|
unitPrice: {
|
|
gross: {
|
|
amount: 9.99,
|
|
currency: "USD",
|
|
__typename: "Money"
|
|
},
|
|
net: {
|
|
amount: 9.99,
|
|
currency: "USD",
|
|
__typename: "Money"
|
|
},
|
|
__typename: "TaxedMoney"
|
|
},
|
|
thumbnail: {
|
|
url:
|
|
"http://localhost:8000/media/__sized__/products/saleor-digital-03_2-thumbnail-255x255.png",
|
|
__typename: "Image"
|
|
},
|
|
__typename: "OrderLine"
|
|
},
|
|
__typename: "FulfillmentLine"
|
|
},
|
|
{
|
|
id: "6",
|
|
quantity: 1,
|
|
orderLine: {
|
|
id: "T3JkZXJMaW5lOjQ3",
|
|
isShippingRequired: true,
|
|
variant: {
|
|
id: "UHJvZHVjdFZhcmlhbnQ6Mjg2",
|
|
quantityAvailable: 50,
|
|
preorder: null,
|
|
__typename: "ProductVariant"
|
|
},
|
|
productName: "T-shirt",
|
|
productSku: "29810068",
|
|
quantity: 10,
|
|
quantityFulfilled: 3,
|
|
quantityToFulfill: 7,
|
|
undiscountedUnitPrice: {
|
|
__typename: "TaxedMoney",
|
|
currency: "USD",
|
|
gross: {
|
|
__typename: "Money",
|
|
amount: 79.71,
|
|
currency: "USD"
|
|
},
|
|
net: {
|
|
__typename: "Money",
|
|
amount: 79.71,
|
|
currency: "USD"
|
|
}
|
|
},
|
|
unitDiscount: {
|
|
__typename: "Money",
|
|
amount: 79.71,
|
|
currency: "USD"
|
|
},
|
|
unitDiscountReason: null,
|
|
unitDiscountType: null,
|
|
unitDiscountValue: 0,
|
|
unitPrice: {
|
|
gross: {
|
|
amount: 2.5,
|
|
currency: "USD",
|
|
__typename: "Money"
|
|
},
|
|
net: {
|
|
amount: 2.5,
|
|
currency: "USD",
|
|
__typename: "Money"
|
|
},
|
|
__typename: "TaxedMoney"
|
|
},
|
|
thumbnail: {
|
|
url:
|
|
"http://localhost:8000/media/__sized__/products/saleordemoproduct_cl_boot06_1-thumbnail-255x255.png",
|
|
__typename: "Image"
|
|
},
|
|
__typename: "OrderLine"
|
|
},
|
|
__typename: "FulfillmentLine"
|
|
},
|
|
{
|
|
id: "7",
|
|
quantity: 1,
|
|
orderLine: {
|
|
id: "T3JkZXJMaW5lOjQ1",
|
|
isShippingRequired: false,
|
|
variant: {
|
|
id: "UHJvZHVjdFZhcmlhbnQ6MzE3",
|
|
quantityAvailable: 50,
|
|
preorder: null,
|
|
__typename: "ProductVariant"
|
|
},
|
|
productName: "Lake Tunes",
|
|
productSku: "lake-tunes-mp3",
|
|
quantity: 20,
|
|
quantityFulfilled: 6,
|
|
quantityToFulfill: 14,
|
|
undiscountedUnitPrice: {
|
|
__typename: "TaxedMoney",
|
|
currency: "USD",
|
|
gross: {
|
|
__typename: "Money",
|
|
amount: 79.71,
|
|
currency: "USD"
|
|
},
|
|
net: {
|
|
__typename: "Money",
|
|
amount: 79.71,
|
|
currency: "USD"
|
|
}
|
|
},
|
|
unitDiscount: {
|
|
__typename: "Money",
|
|
amount: 79.71,
|
|
currency: "USD"
|
|
},
|
|
unitDiscountReason: null,
|
|
unitDiscountType: null,
|
|
unitDiscountValue: 0,
|
|
unitPrice: {
|
|
gross: {
|
|
amount: 9.99,
|
|
currency: "USD",
|
|
__typename: "Money"
|
|
},
|
|
net: {
|
|
amount: 9.99,
|
|
currency: "USD",
|
|
__typename: "Money"
|
|
},
|
|
__typename: "TaxedMoney"
|
|
},
|
|
thumbnail: {
|
|
url:
|
|
"http://localhost:8000/media/__sized__/products/saleor-digital-03_2-thumbnail-255x255.png",
|
|
__typename: "Image"
|
|
},
|
|
__typename: "OrderLine"
|
|
},
|
|
__typename: "FulfillmentLine"
|
|
},
|
|
{
|
|
id: "8",
|
|
quantity: 1,
|
|
orderLine: {
|
|
id: "T3JkZXJMaW5lOjQ1",
|
|
isShippingRequired: false,
|
|
variant: {
|
|
id: "UHJvZHVjdFZhcmlhbnQ6MzE3",
|
|
quantityAvailable: 50,
|
|
preorder: null,
|
|
__typename: "ProductVariant"
|
|
},
|
|
productName: "Lake Tunes",
|
|
productSku: "lake-tunes-mp3",
|
|
quantity: 25,
|
|
quantityFulfilled: 8,
|
|
quantityToFulfill: 17,
|
|
undiscountedUnitPrice: {
|
|
__typename: "TaxedMoney",
|
|
currency: "USD",
|
|
gross: {
|
|
__typename: "Money",
|
|
amount: 79.71,
|
|
currency: "USD"
|
|
},
|
|
net: {
|
|
__typename: "Money",
|
|
amount: 79.71,
|
|
currency: "USD"
|
|
}
|
|
},
|
|
unitDiscount: {
|
|
__typename: "Money",
|
|
amount: 79.71,
|
|
currency: "USD"
|
|
},
|
|
unitDiscountReason: null,
|
|
unitDiscountType: null,
|
|
unitDiscountValue: 0,
|
|
unitPrice: {
|
|
gross: {
|
|
amount: 9.99,
|
|
currency: "USD",
|
|
__typename: "Money"
|
|
},
|
|
net: {
|
|
amount: 9.99,
|
|
currency: "USD",
|
|
__typename: "Money"
|
|
},
|
|
__typename: "TaxedMoney"
|
|
},
|
|
thumbnail: {
|
|
url:
|
|
"http://localhost:8000/media/__sized__/products/saleor-digital-03_2-thumbnail-255x255.png",
|
|
__typename: "Image"
|
|
},
|
|
__typename: "OrderLine"
|
|
},
|
|
__typename: "FulfillmentLine"
|
|
}
|
|
];
|
|
|
|
const unfulfilledItemsQuantities: FormsetData<LineItemData, number> = [
|
|
{
|
|
data: { isFulfillment: false, isRefunded: false },
|
|
id: "1",
|
|
label: null,
|
|
value: 0
|
|
},
|
|
{
|
|
data: { isFulfillment: false, isRefunded: false },
|
|
id: "2",
|
|
label: null,
|
|
value: 2
|
|
},
|
|
{
|
|
data: { isFulfillment: false, isRefunded: false },
|
|
id: "3",
|
|
label: null,
|
|
value: 1
|
|
}
|
|
];
|
|
|
|
const fulfilledItemsQuantities: FormsetData<LineItemData, number> = [
|
|
{
|
|
data: { isFulfillment: true, isRefunded: false },
|
|
id: "4",
|
|
label: null,
|
|
value: 4
|
|
},
|
|
{
|
|
data: { isFulfillment: true, isRefunded: false },
|
|
id: "5",
|
|
label: null,
|
|
value: 0
|
|
},
|
|
{
|
|
data: { isFulfillment: true, isRefunded: false },
|
|
id: "6",
|
|
label: null,
|
|
value: 3
|
|
},
|
|
{
|
|
data: { isFulfillment: true, isRefunded: true },
|
|
id: "7",
|
|
label: null,
|
|
value: 4
|
|
},
|
|
{
|
|
data: { isFulfillment: true, isRefunded: true },
|
|
id: "8",
|
|
label: null,
|
|
value: 3
|
|
}
|
|
];
|
|
|
|
const itemsToBeReplaced: FormsetData<LineItemData, boolean> = [
|
|
{
|
|
data: { isFulfillment: false, isRefunded: false },
|
|
id: "1",
|
|
label: null,
|
|
value: true
|
|
},
|
|
{
|
|
data: { isFulfillment: false, isRefunded: false },
|
|
id: "2",
|
|
label: null,
|
|
value: false
|
|
},
|
|
{
|
|
data: { isFulfillment: false, isRefunded: false },
|
|
id: "3",
|
|
label: null,
|
|
value: true
|
|
},
|
|
{
|
|
data: { isFulfillment: true, isRefunded: false },
|
|
id: "4",
|
|
label: null,
|
|
value: false
|
|
},
|
|
{
|
|
data: { isFulfillment: true, isRefunded: false },
|
|
id: "5",
|
|
label: null,
|
|
value: true
|
|
},
|
|
{
|
|
data: { isFulfillment: true, isRefunded: false },
|
|
id: "6",
|
|
label: null,
|
|
value: true
|
|
},
|
|
{
|
|
data: { isFulfillment: true, isRefunded: true },
|
|
id: "7",
|
|
label: null,
|
|
value: false
|
|
},
|
|
{
|
|
data: { isFulfillment: true, isRefunded: true },
|
|
id: "8",
|
|
label: null,
|
|
value: true
|
|
}
|
|
];
|
|
|
|
const totalValue = getReplacedProductsAmount(
|
|
{
|
|
...orderBase,
|
|
lines: unfulfilledLines,
|
|
fulfillments: [
|
|
{
|
|
id: "#1",
|
|
fulfillmentOrder: 1,
|
|
status: FulfillmentStatus.FULFILLED,
|
|
warehouse: null,
|
|
trackingNumber: "",
|
|
lines: fulfilledLines,
|
|
__typename: "Fulfillment"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
itemsToBeReplaced,
|
|
unfulfilledItemsQuantities,
|
|
fulfilledItemsQuantities
|
|
}
|
|
);
|
|
|
|
expect(totalValue).toBe(10);
|
|
});
|
|
});
|
|
|
|
describe("Get the total value of all selected products", () => {
|
|
it("sums up correctly", () => {
|
|
const unfulfilledLines: OrderDetails_order_lines[] = [
|
|
{
|
|
id: "1",
|
|
isShippingRequired: false,
|
|
variant: {
|
|
id: "UHJvZHVjdFZhcmlhbnQ6MzE3",
|
|
quantityAvailable: 50,
|
|
preorder: null,
|
|
__typename: "ProductVariant"
|
|
},
|
|
productName: "Lake Tunes",
|
|
productSku: "lake-tunes-mp3",
|
|
quantity: 2,
|
|
quantityFulfilled: 2,
|
|
quantityToFulfill: 0,
|
|
undiscountedUnitPrice: {
|
|
__typename: "TaxedMoney",
|
|
currency: "USD",
|
|
gross: {
|
|
__typename: "Money",
|
|
amount: 79.71,
|
|
currency: "USD"
|
|
},
|
|
net: {
|
|
__typename: "Money",
|
|
amount: 79.71,
|
|
currency: "USD"
|
|
}
|
|
},
|
|
unitDiscount: {
|
|
__typename: "Money",
|
|
amount: 79.71,
|
|
currency: "USD"
|
|
},
|
|
unitDiscountReason: null,
|
|
unitDiscountType: null,
|
|
unitDiscountValue: 0,
|
|
unitPrice: {
|
|
gross: {
|
|
amount: 9.99,
|
|
currency: "USD",
|
|
__typename: "Money"
|
|
},
|
|
net: {
|
|
amount: 9.99,
|
|
currency: "USD",
|
|
__typename: "Money"
|
|
},
|
|
__typename: "TaxedMoney"
|
|
},
|
|
thumbnail: {
|
|
url:
|
|
"http://localhost:8000/media/__sized__/products/saleor-digital-03_2-thumbnail-255x255.png",
|
|
__typename: "Image"
|
|
},
|
|
__typename: "OrderLine"
|
|
},
|
|
{
|
|
id: "2",
|
|
isShippingRequired: false,
|
|
variant: {
|
|
id: "UHJvZHVjdFZhcmlhbnQ6MzE3",
|
|
quantityAvailable: 50,
|
|
preorder: null,
|
|
__typename: "ProductVariant"
|
|
},
|
|
productName: "Lake Tunes",
|
|
productSku: "lake-tunes-mp3",
|
|
quantity: 10,
|
|
quantityFulfilled: 2,
|
|
quantityToFulfill: 8,
|
|
undiscountedUnitPrice: {
|
|
__typename: "TaxedMoney",
|
|
currency: "USD",
|
|
gross: {
|
|
__typename: "Money",
|
|
amount: 79.71,
|
|
currency: "USD"
|
|
},
|
|
net: {
|
|
__typename: "Money",
|
|
amount: 79.71,
|
|
currency: "USD"
|
|
}
|
|
},
|
|
unitDiscount: {
|
|
__typename: "Money",
|
|
amount: 79.71,
|
|
currency: "USD"
|
|
},
|
|
unitDiscountReason: null,
|
|
unitDiscountType: null,
|
|
unitDiscountValue: 0,
|
|
unitPrice: {
|
|
gross: {
|
|
amount: 9.99,
|
|
currency: "USD",
|
|
__typename: "Money"
|
|
},
|
|
net: {
|
|
amount: 9.99,
|
|
currency: "USD",
|
|
__typename: "Money"
|
|
},
|
|
__typename: "TaxedMoney"
|
|
},
|
|
thumbnail: {
|
|
url:
|
|
"http://localhost:8000/media/__sized__/products/saleor-digital-03_2-thumbnail-255x255.png",
|
|
__typename: "Image"
|
|
},
|
|
__typename: "OrderLine"
|
|
},
|
|
{
|
|
id: "3",
|
|
isShippingRequired: true,
|
|
variant: {
|
|
id: "UHJvZHVjdFZhcmlhbnQ6Mjg2",
|
|
quantityAvailable: 50,
|
|
preorder: null,
|
|
__typename: "ProductVariant"
|
|
},
|
|
productName: "T-shirt",
|
|
productSku: "29810068",
|
|
quantity: 6,
|
|
quantityFulfilled: 1,
|
|
quantityToFulfill: 5,
|
|
undiscountedUnitPrice: {
|
|
__typename: "TaxedMoney",
|
|
currency: "USD",
|
|
gross: {
|
|
__typename: "Money",
|
|
amount: 79.71,
|
|
currency: "USD"
|
|
},
|
|
net: {
|
|
__typename: "Money",
|
|
amount: 79.71,
|
|
currency: "USD"
|
|
}
|
|
},
|
|
unitDiscount: {
|
|
__typename: "Money",
|
|
amount: 79.71,
|
|
currency: "USD"
|
|
},
|
|
unitDiscountReason: null,
|
|
unitDiscountType: null,
|
|
unitDiscountValue: 0,
|
|
unitPrice: {
|
|
gross: {
|
|
amount: 2.5,
|
|
currency: "USD",
|
|
__typename: "Money"
|
|
},
|
|
net: {
|
|
amount: 2.5,
|
|
currency: "USD",
|
|
__typename: "Money"
|
|
},
|
|
__typename: "TaxedMoney"
|
|
},
|
|
thumbnail: {
|
|
url:
|
|
"http://localhost:8000/media/__sized__/products/saleordemoproduct_cl_boot06_1-thumbnail-255x255.png",
|
|
__typename: "Image"
|
|
},
|
|
__typename: "OrderLine"
|
|
}
|
|
];
|
|
|
|
const fulfilledLines: OrderDetails_order_fulfillments_lines[] = [
|
|
{
|
|
id: "4",
|
|
quantity: 1,
|
|
orderLine: {
|
|
id: "T3JkZXJMaW5lOjQ1",
|
|
isShippingRequired: false,
|
|
variant: {
|
|
id: "UHJvZHVjdFZhcmlhbnQ6MzE3",
|
|
quantityAvailable: 50,
|
|
preorder: null,
|
|
__typename: "ProductVariant"
|
|
},
|
|
productName: "Lake Tunes",
|
|
productSku: "lake-tunes-mp3",
|
|
quantity: 20,
|
|
quantityFulfilled: 6,
|
|
quantityToFulfill: 14,
|
|
undiscountedUnitPrice: {
|
|
__typename: "TaxedMoney",
|
|
currency: "USD",
|
|
gross: {
|
|
__typename: "Money",
|
|
amount: 79.71,
|
|
currency: "USD"
|
|
},
|
|
net: {
|
|
__typename: "Money",
|
|
amount: 79.71,
|
|
currency: "USD"
|
|
}
|
|
},
|
|
unitDiscount: {
|
|
__typename: "Money",
|
|
amount: 79.71,
|
|
currency: "USD"
|
|
},
|
|
unitDiscountReason: null,
|
|
unitDiscountType: null,
|
|
unitDiscountValue: 0,
|
|
unitPrice: {
|
|
gross: {
|
|
amount: 9.99,
|
|
currency: "USD",
|
|
__typename: "Money"
|
|
},
|
|
net: {
|
|
amount: 9.99,
|
|
currency: "USD",
|
|
__typename: "Money"
|
|
},
|
|
__typename: "TaxedMoney"
|
|
},
|
|
thumbnail: {
|
|
url:
|
|
"http://localhost:8000/media/__sized__/products/saleor-digital-03_2-thumbnail-255x255.png",
|
|
__typename: "Image"
|
|
},
|
|
__typename: "OrderLine"
|
|
},
|
|
__typename: "FulfillmentLine"
|
|
},
|
|
{
|
|
id: "5",
|
|
quantity: 1,
|
|
orderLine: {
|
|
id: "T3JkZXJMaW5lOjQ1",
|
|
isShippingRequired: false,
|
|
variant: {
|
|
id: "UHJvZHVjdFZhcmlhbnQ6MzE3",
|
|
quantityAvailable: 50,
|
|
preorder: null,
|
|
__typename: "ProductVariant"
|
|
},
|
|
productName: "Lake Tunes",
|
|
productSku: "lake-tunes-mp3",
|
|
quantity: 25,
|
|
quantityFulfilled: 8,
|
|
quantityToFulfill: 17,
|
|
undiscountedUnitPrice: {
|
|
__typename: "TaxedMoney",
|
|
currency: "USD",
|
|
gross: {
|
|
__typename: "Money",
|
|
amount: 79.71,
|
|
currency: "USD"
|
|
},
|
|
net: {
|
|
__typename: "Money",
|
|
amount: 79.71,
|
|
currency: "USD"
|
|
}
|
|
},
|
|
unitDiscount: {
|
|
__typename: "Money",
|
|
amount: 79.71,
|
|
currency: "USD"
|
|
},
|
|
unitDiscountReason: null,
|
|
unitDiscountType: null,
|
|
unitDiscountValue: 0,
|
|
unitPrice: {
|
|
gross: {
|
|
amount: 9.99,
|
|
currency: "USD",
|
|
__typename: "Money"
|
|
},
|
|
net: {
|
|
amount: 9.99,
|
|
currency: "USD",
|
|
__typename: "Money"
|
|
},
|
|
__typename: "TaxedMoney"
|
|
},
|
|
thumbnail: {
|
|
url:
|
|
"http://localhost:8000/media/__sized__/products/saleor-digital-03_2-thumbnail-255x255.png",
|
|
__typename: "Image"
|
|
},
|
|
__typename: "OrderLine"
|
|
},
|
|
__typename: "FulfillmentLine"
|
|
},
|
|
{
|
|
id: "6",
|
|
quantity: 1,
|
|
orderLine: {
|
|
id: "T3JkZXJMaW5lOjQ3",
|
|
isShippingRequired: true,
|
|
variant: {
|
|
id: "UHJvZHVjdFZhcmlhbnQ6Mjg2",
|
|
quantityAvailable: 50,
|
|
preorder: null,
|
|
__typename: "ProductVariant"
|
|
},
|
|
productName: "T-shirt",
|
|
productSku: "29810068",
|
|
quantity: 10,
|
|
quantityFulfilled: 3,
|
|
quantityToFulfill: 7,
|
|
undiscountedUnitPrice: {
|
|
__typename: "TaxedMoney",
|
|
currency: "USD",
|
|
gross: {
|
|
__typename: "Money",
|
|
amount: 79.71,
|
|
currency: "USD"
|
|
},
|
|
net: {
|
|
__typename: "Money",
|
|
amount: 79.71,
|
|
currency: "USD"
|
|
}
|
|
},
|
|
unitDiscount: {
|
|
__typename: "Money",
|
|
amount: 79.71,
|
|
currency: "USD"
|
|
},
|
|
unitDiscountReason: null,
|
|
unitDiscountType: null,
|
|
unitDiscountValue: 0,
|
|
unitPrice: {
|
|
gross: {
|
|
amount: 2.5,
|
|
currency: "USD",
|
|
__typename: "Money"
|
|
},
|
|
net: {
|
|
amount: 2.5,
|
|
currency: "USD",
|
|
__typename: "Money"
|
|
},
|
|
__typename: "TaxedMoney"
|
|
},
|
|
thumbnail: {
|
|
url:
|
|
"http://localhost:8000/media/__sized__/products/saleordemoproduct_cl_boot06_1-thumbnail-255x255.png",
|
|
__typename: "Image"
|
|
},
|
|
__typename: "OrderLine"
|
|
},
|
|
__typename: "FulfillmentLine"
|
|
}
|
|
];
|
|
|
|
const unfulfilledItemsQuantities: FormsetData<LineItemData, number> = [
|
|
{
|
|
data: { isFulfillment: false, isRefunded: false },
|
|
id: "1",
|
|
label: null,
|
|
value: 0
|
|
},
|
|
{
|
|
data: { isFulfillment: false, isRefunded: false },
|
|
id: "2",
|
|
label: null,
|
|
value: 2
|
|
},
|
|
{
|
|
data: { isFulfillment: false, isRefunded: false },
|
|
id: "3",
|
|
label: null,
|
|
value: 1
|
|
}
|
|
];
|
|
|
|
const fulfilledItemsQuantities: FormsetData<LineItemData, number> = [
|
|
{
|
|
data: { isFulfillment: true, isRefunded: false },
|
|
id: "4",
|
|
label: null,
|
|
value: 4
|
|
},
|
|
{
|
|
data: { isFulfillment: true, isRefunded: false },
|
|
id: "5",
|
|
label: null,
|
|
value: 0
|
|
},
|
|
{
|
|
data: { isFulfillment: true, isRefunded: false },
|
|
id: "6",
|
|
label: null,
|
|
value: 3
|
|
}
|
|
];
|
|
|
|
const waitingItemsQuantities: FormsetData<LineItemData, number> = [];
|
|
|
|
const itemsToBeReplaced: FormsetData<LineItemData, boolean> = [
|
|
{
|
|
data: { isFulfillment: false, isRefunded: false },
|
|
id: "1",
|
|
label: null,
|
|
value: true
|
|
},
|
|
{
|
|
data: { isFulfillment: false, isRefunded: false },
|
|
id: "2",
|
|
label: null,
|
|
value: false
|
|
},
|
|
{
|
|
data: { isFulfillment: false, isRefunded: false },
|
|
id: "3",
|
|
label: null,
|
|
value: true
|
|
},
|
|
{
|
|
data: { isFulfillment: true, isRefunded: false },
|
|
id: "4",
|
|
label: null,
|
|
value: false
|
|
},
|
|
{
|
|
data: { isFulfillment: true, isRefunded: false },
|
|
id: "5",
|
|
label: null,
|
|
value: true
|
|
},
|
|
{
|
|
data: { isFulfillment: true, isRefunded: false },
|
|
id: "6",
|
|
label: null,
|
|
value: true
|
|
},
|
|
{
|
|
data: { isFulfillment: true, isRefunded: true },
|
|
id: "7",
|
|
label: null,
|
|
value: true
|
|
},
|
|
{
|
|
data: { isFulfillment: true, isRefunded: true },
|
|
id: "8",
|
|
label: null,
|
|
value: true
|
|
}
|
|
];
|
|
|
|
const totalValue = getReturnSelectedProductsAmount(
|
|
{
|
|
...orderBase,
|
|
lines: unfulfilledLines,
|
|
fulfillments: [
|
|
{
|
|
id: "#1",
|
|
fulfillmentOrder: 1,
|
|
status: FulfillmentStatus.FULFILLED,
|
|
warehouse: null,
|
|
trackingNumber: "",
|
|
lines: fulfilledLines,
|
|
__typename: "Fulfillment"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
itemsToBeReplaced,
|
|
waitingItemsQuantities,
|
|
unfulfilledItemsQuantities,
|
|
fulfilledItemsQuantities
|
|
}
|
|
);
|
|
|
|
expect(totalValue).toBe(59.94);
|
|
});
|
|
});
|
|
|
|
describe("Merge repeated order lines of fulfillment lines", () => {
|
|
it("is able to merge repeated order lines and sum their quantities", () => {
|
|
const lines: OrderDetails_order_fulfillments_lines[] = [
|
|
{
|
|
id: "RnVsZmlsbG1lbnRMaW5lOjMx",
|
|
quantity: 1,
|
|
orderLine: {
|
|
id: "T3JkZXJMaW5lOjQ1",
|
|
isShippingRequired: false,
|
|
variant: {
|
|
id: "UHJvZHVjdFZhcmlhbnQ6MzE3",
|
|
quantityAvailable: 50,
|
|
preorder: null,
|
|
__typename: "ProductVariant"
|
|
},
|
|
productName: "Lake Tunes",
|
|
productSku: "lake-tunes-mp3",
|
|
quantity: 2,
|
|
quantityFulfilled: 2,
|
|
quantityToFulfill: 0,
|
|
undiscountedUnitPrice: {
|
|
__typename: "TaxedMoney",
|
|
currency: "USD",
|
|
gross: {
|
|
__typename: "Money",
|
|
amount: 79.71,
|
|
currency: "USD"
|
|
},
|
|
net: {
|
|
__typename: "Money",
|
|
amount: 79.71,
|
|
currency: "USD"
|
|
}
|
|
},
|
|
unitDiscount: {
|
|
__typename: "Money",
|
|
amount: 79.71,
|
|
currency: "USD"
|
|
},
|
|
unitDiscountReason: null,
|
|
unitDiscountType: null,
|
|
unitDiscountValue: 0,
|
|
unitPrice: {
|
|
gross: {
|
|
amount: 9.99,
|
|
currency: "USD",
|
|
__typename: "Money"
|
|
},
|
|
net: {
|
|
amount: 9.99,
|
|
currency: "USD",
|
|
__typename: "Money"
|
|
},
|
|
__typename: "TaxedMoney"
|
|
},
|
|
thumbnail: {
|
|
url:
|
|
"http://localhost:8000/media/__sized__/products/saleor-digital-03_2-thumbnail-255x255.png",
|
|
__typename: "Image"
|
|
},
|
|
__typename: "OrderLine"
|
|
},
|
|
__typename: "FulfillmentLine"
|
|
},
|
|
{
|
|
id: "RnVsZmlsbG1lbnRMaW5lOjMy",
|
|
quantity: 1,
|
|
orderLine: {
|
|
id: "T3JkZXJMaW5lOjQ1",
|
|
isShippingRequired: false,
|
|
variant: {
|
|
id: "UHJvZHVjdFZhcmlhbnQ6MzE3",
|
|
quantityAvailable: 50,
|
|
preorder: null,
|
|
__typename: "ProductVariant"
|
|
},
|
|
productName: "Lake Tunes",
|
|
productSku: "lake-tunes-mp3",
|
|
quantity: 2,
|
|
quantityFulfilled: 2,
|
|
quantityToFulfill: 0,
|
|
undiscountedUnitPrice: {
|
|
__typename: "TaxedMoney",
|
|
currency: "USD",
|
|
gross: {
|
|
__typename: "Money",
|
|
amount: 79.71,
|
|
currency: "USD"
|
|
},
|
|
net: {
|
|
__typename: "Money",
|
|
amount: 79.71,
|
|
currency: "USD"
|
|
}
|
|
},
|
|
unitDiscount: {
|
|
__typename: "Money",
|
|
amount: 79.71,
|
|
currency: "USD"
|
|
},
|
|
unitDiscountReason: null,
|
|
unitDiscountType: null,
|
|
unitDiscountValue: 0,
|
|
unitPrice: {
|
|
gross: {
|
|
amount: 9.99,
|
|
currency: "USD",
|
|
__typename: "Money"
|
|
},
|
|
net: {
|
|
amount: 9.99,
|
|
currency: "USD",
|
|
__typename: "Money"
|
|
},
|
|
__typename: "TaxedMoney"
|
|
},
|
|
thumbnail: {
|
|
url:
|
|
"http://localhost:8000/media/__sized__/products/saleor-digital-03_2-thumbnail-255x255.png",
|
|
__typename: "Image"
|
|
},
|
|
__typename: "OrderLine"
|
|
},
|
|
__typename: "FulfillmentLine"
|
|
},
|
|
{
|
|
id: "RnVsZmlsbG1lbnRMaW5lOjMz",
|
|
quantity: 1,
|
|
orderLine: {
|
|
id: "T3JkZXJMaW5lOjQ3",
|
|
isShippingRequired: true,
|
|
variant: {
|
|
id: "UHJvZHVjdFZhcmlhbnQ6Mjg2",
|
|
quantityAvailable: 50,
|
|
preorder: null,
|
|
__typename: "ProductVariant"
|
|
},
|
|
productName: "T-shirt",
|
|
productSku: "29810068",
|
|
quantity: 3,
|
|
quantityFulfilled: 1,
|
|
quantityToFulfill: 2,
|
|
undiscountedUnitPrice: {
|
|
__typename: "TaxedMoney",
|
|
currency: "USD",
|
|
gross: {
|
|
__typename: "Money",
|
|
amount: 79.71,
|
|
currency: "USD"
|
|
},
|
|
net: {
|
|
__typename: "Money",
|
|
amount: 79.71,
|
|
currency: "USD"
|
|
}
|
|
},
|
|
unitDiscount: {
|
|
__typename: "Money",
|
|
amount: 79.71,
|
|
currency: "USD"
|
|
},
|
|
unitDiscountReason: null,
|
|
unitDiscountType: null,
|
|
unitDiscountValue: 0,
|
|
unitPrice: {
|
|
gross: {
|
|
amount: 2.5,
|
|
currency: "USD",
|
|
__typename: "Money"
|
|
},
|
|
net: {
|
|
amount: 2.5,
|
|
currency: "USD",
|
|
__typename: "Money"
|
|
},
|
|
__typename: "TaxedMoney"
|
|
},
|
|
thumbnail: {
|
|
url:
|
|
"http://localhost:8000/media/__sized__/products/saleordemoproduct_cl_boot06_1-thumbnail-255x255.png",
|
|
__typename: "Image"
|
|
},
|
|
__typename: "OrderLine"
|
|
},
|
|
__typename: "FulfillmentLine"
|
|
}
|
|
];
|
|
|
|
const mergedLines = mergeRepeatedOrderLines(lines);
|
|
|
|
expect(mergedLines).toHaveLength(2);
|
|
expect(
|
|
mergedLines.find(
|
|
fulfillmentLine => fulfillmentLine.orderLine.id === "T3JkZXJMaW5lOjQ1"
|
|
).quantity
|
|
).toBe(2);
|
|
});
|
|
});
|