From 200d1d99ad5d1166a8ed2ebcf9d48fb39a77576d Mon Sep 17 00:00:00 2001 From: David Cameron Date: Thu, 17 Apr 2025 13:38:08 -0400 Subject: [PATCH 1/2] Split test files --- ...t.liquid => generate_cart_run.test.liquid} | 66 ++++++++++--- .../src/generate_delivery_run.test.liquid | 95 +++++++++++++++++++ 2 files changed, 146 insertions(+), 15 deletions(-) rename discounts/javascript/discount/default/src/{discount.test.liquid => generate_cart_run.test.liquid} (57%) create mode 100644 discounts/javascript/discount/default/src/generate_delivery_run.test.liquid diff --git a/discounts/javascript/discount/default/src/discount.test.liquid b/discounts/javascript/discount/default/src/generate_cart_run.test.liquid similarity index 57% rename from discounts/javascript/discount/default/src/discount.test.liquid rename to discounts/javascript/discount/default/src/generate_cart_run.test.liquid index 6b1855b6..8fad43b5 100644 --- a/discounts/javascript/discount/default/src/discount.test.liquid +++ b/discounts/javascript/discount/default/src/generate_cart_run.test.liquid @@ -1,15 +1,14 @@ +{%- if flavor contains "vanilla-js" -%} import { describe, it, expect } from "vitest"; import { generateCartRun } from "./generate_cart_run"; -import { generateDeliveryRun } from "./generate_delivery_run"; import { OrderDiscountSelectionStrategy, ProductDiscountSelectionStrategy, - DeliveryDiscountSelectionStrategy, } from "../generated/api"; -describe("discount", () => { - it("cart.lines.discounts.generate.run returns a product and order discount", () => { +describe("generateCartRun", () => { + it("returns a product and order discount", () => { const input = { cart: { lines: [ @@ -72,42 +71,79 @@ describe("discount", () => { }, }); }); +}); +{%- elsif flavor contains "typescript" -%} +import { describe, it, expect } from "vitest"; - it("cart.delivery-options.generate.run returns a delivery discount", () => { +import { generateCartRun } from "./generate_cart_run"; +import { + OrderDiscountSelectionStrategy, + ProductDiscountSelectionStrategy, +} from "../generated/api"; + +describe("generateCartRun", () => { + it("returns a product and order discount", () => { const input = { cart: { - deliveryGroups: [ + lines: [ { - id: "gid://shopify/DeliveryGroup/0", + id: "gid://shopify/CartLine/0", + cost: { + subtotalAmount: 100, + }, }, ], }, }; - const result = generateDeliveryRun(input); + const result = generateCartRun(input); - expect(result.operations.length).toBe(1); + expect(result.operations.length).toBe(2); expect(result.operations[0]).toMatchObject({ - deliveryDiscountsAdd: { + orderDiscountsAdd: { + candidates: [ + { + message: "10% OFF ORDER", + targets: [ + { + orderSubtotal: { + excludedCartLineIds: [], + }, + }, + ], + value: { + percentage: { + value: 10, + }, + }, + }, + ], + selectionStrategy: OrderDiscountSelectionStrategy.First, + }, + }); + + expect(result.operations[1]).toMatchObject({ + productDiscountsAdd: { candidates: [ { - message: "FREE DELIVERY", + message: "20% OFF PRODUCT", targets: [ { - deliveryGroup: { - id: "gid://shopify/DeliveryGroup/0", + cartLine: { + id: "gid://shopify/CartLine/0", }, }, ], value: { percentage: { - value: 100, + value: 20, }, }, }, ], - selectionStrategy: DeliveryDiscountSelectionStrategy.All, + selectionStrategy: ProductDiscountSelectionStrategy.First, }, }); }); }); +{%- endif -%} \ No newline at end of file diff --git a/discounts/javascript/discount/default/src/generate_delivery_run.test.liquid b/discounts/javascript/discount/default/src/generate_delivery_run.test.liquid new file mode 100644 index 00000000..a418f1db --- /dev/null +++ b/discounts/javascript/discount/default/src/generate_delivery_run.test.liquid @@ -0,0 +1,95 @@ +{%- if flavor contains "vanilla-js" -%} +import { describe, it, expect } from "vitest"; + +import { generateDeliveryRun } from "./generate_delivery_run"; +import { + DeliveryDiscountSelectionStrategy, +} from "../generated/api"; + +describe("generateDeliveryRun", () => { + it("returns a delivery discount", () => { + const input = { + cart: { + deliveryGroups: [ + { + id: "gid://shopify/DeliveryGroup/0", + }, + ], + }, + }; + + const result = generateDeliveryRun(input); + + expect(result.operations.length).toBe(1); + expect(result.operations[0]).toMatchObject({ + deliveryDiscountsAdd: { + candidates: [ + { + message: "FREE DELIVERY", + targets: [ + { + deliveryGroup: { + id: "gid://shopify/DeliveryGroup/0", + }, + }, + ], + value: { + percentage: { + value: 100, + }, + }, + }, + ], + selectionStrategy: DeliveryDiscountSelectionStrategy.All, + }, + }); + }); +}); +{%- elsif flavor contains "typescript" -%} +import { describe, it, expect } from "vitest"; + +import { generateDeliveryRun } from "./generate_delivery_run"; +import { + DeliveryDiscountSelectionStrategy, +} from "../generated/api"; + +describe("generateDeliveryRun", () => { + it("returns a delivery discount", () => { + const input = { + cart: { + deliveryGroups: [ + { + id: "gid://shopify/DeliveryGroup/0", + }, + ], + }, + }; + + const result = generateDeliveryRun(input); + + expect(result.operations.length).toBe(1); + expect(result.operations[0]).toMatchObject({ + deliveryDiscountsAdd: { + candidates: [ + { + message: "FREE DELIVERY", + targets: [ + { + deliveryGroup: { + id: "gid://shopify/DeliveryGroup/0", + }, + }, + ], + value: { + percentage: { + value: 100, + }, + }, + }, + ], + selectionStrategy: DeliveryDiscountSelectionStrategy.All, + }, + }); + }); +}); +{%- endif -%} \ No newline at end of file From 24f03d9c3af7075ea70d84f83806fea907ec13f9 Mon Sep 17 00:00:00 2001 From: David Cameron Date: Thu, 17 Apr 2025 14:00:45 -0400 Subject: [PATCH 2/2] Add more type data --- .../default/src/generate_cart_run.test.liquid | 10 ++++++++-- .../default/src/generate_delivery_run.test.liquid | 15 +++++++++++---- 2 files changed, 19 insertions(+), 6 deletions(-) diff --git a/discounts/javascript/discount/default/src/generate_cart_run.test.liquid b/discounts/javascript/discount/default/src/generate_cart_run.test.liquid index 8fad43b5..cb8cf6ec 100644 --- a/discounts/javascript/discount/default/src/generate_cart_run.test.liquid +++ b/discounts/javascript/discount/default/src/generate_cart_run.test.liquid @@ -7,6 +7,10 @@ import { ProductDiscountSelectionStrategy, } from "../generated/api"; +/** + * @typedef {import("../generated/api").CartLinesDiscountsGenerateRunResult} CartLinesDiscountsGenerateRunResult + */ + describe("generateCartRun", () => { it("returns a product and order discount", () => { const input = { @@ -79,11 +83,13 @@ import { generateCartRun } from "./generate_cart_run"; import { OrderDiscountSelectionStrategy, ProductDiscountSelectionStrategy, + CartInput, + CartLinesDiscountsGenerateRunResult } from "../generated/api"; describe("generateCartRun", () => { it("returns a product and order discount", () => { - const input = { + const input: CartInput = { cart: { lines: [ { @@ -96,7 +102,7 @@ describe("generateCartRun", () => { }, }; - const result = generateCartRun(input); + const result: CartLinesDiscountsGenerateRunResult = generateCartRun(input); expect(result.operations.length).toBe(2); expect(result.operations[0]).toMatchObject({ diff --git a/discounts/javascript/discount/default/src/generate_delivery_run.test.liquid b/discounts/javascript/discount/default/src/generate_delivery_run.test.liquid index a418f1db..a6ec200f 100644 --- a/discounts/javascript/discount/default/src/generate_delivery_run.test.liquid +++ b/discounts/javascript/discount/default/src/generate_delivery_run.test.liquid @@ -6,9 +6,14 @@ import { DeliveryDiscountSelectionStrategy, } from "../generated/api"; +/** + * @typedef {import("../generated/api").CartDeliveryOptionsDiscountsGenerateRunResult} CartDeliveryOptionsDiscountsGenerateRunResult + * @typedef {import("../generated/api").DeliveryInput} DeliveryInput + */ + describe("generateDeliveryRun", () => { it("returns a delivery discount", () => { - const input = { + const input = /** @type {DeliveryInput} */ ({ cart: { deliveryGroups: [ { @@ -16,7 +21,7 @@ describe("generateDeliveryRun", () => { }, ], }, - }; + }); const result = generateDeliveryRun(input); @@ -51,11 +56,13 @@ import { describe, it, expect } from "vitest"; import { generateDeliveryRun } from "./generate_delivery_run"; import { DeliveryDiscountSelectionStrategy, + DeliveryInput, + CartDeliveryOptionsDiscountsGenerateRunResult } from "../generated/api"; describe("generateDeliveryRun", () => { it("returns a delivery discount", () => { - const input = { + const input: DeliveryInput = { cart: { deliveryGroups: [ { @@ -65,7 +72,7 @@ describe("generateDeliveryRun", () => { }, }; - const result = generateDeliveryRun(input); + const result: CartDeliveryOptionsDiscountsGenerateRunResult = generateDeliveryRun(input); expect(result.operations.length).toBe(1); expect(result.operations[0]).toMatchObject({