@labdigital/commercetools-mock 2.50.1 → 2.52.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (41) hide show
  1. package/dist/index.d.ts +34 -23
  2. package/dist/index.d.ts.map +1 -1
  3. package/dist/index.js +121 -8
  4. package/dist/index.js.map +1 -1
  5. package/package.json +2 -2
  6. package/src/lib/product-review-statistics.test.ts +349 -0
  7. package/src/lib/review-statistics.ts +58 -0
  8. package/src/product-projection-search.ts +17 -2
  9. package/src/repositories/as-associate.test.ts +126 -0
  10. package/src/repositories/attribute-group.test.ts +221 -0
  11. package/src/repositories/business-unit.test.ts +282 -0
  12. package/src/repositories/business-unit.ts +5 -1
  13. package/src/repositories/cart/index.test.ts +60 -0
  14. package/src/repositories/cart/index.ts +29 -1
  15. package/src/repositories/channel.test.ts +374 -0
  16. package/src/repositories/customer-group.test.ts +262 -0
  17. package/src/repositories/extension.test.ts +306 -0
  18. package/src/repositories/index.test.ts +17 -0
  19. package/src/repositories/product/index.ts +22 -1
  20. package/src/repositories/product-projection.ts +8 -2
  21. package/src/repositories/review.test.ts +636 -0
  22. package/src/repositories/review.ts +145 -4
  23. package/src/repositories/subscription.test.ts +207 -0
  24. package/src/repositories/zone.test.ts +278 -0
  25. package/src/services/as-associate-cart.test.ts +58 -0
  26. package/src/services/as-associate.test.ts +34 -0
  27. package/src/services/attribute-group.test.ts +114 -0
  28. package/src/services/channel.test.ts +90 -0
  29. package/src/services/customer-group.test.ts +85 -0
  30. package/src/services/discount-code.test.ts +120 -0
  31. package/src/services/extension.test.ts +130 -0
  32. package/src/services/my-business-unit.test.ts +113 -0
  33. package/src/services/my-business-unit.ts +6 -0
  34. package/src/services/my-customer.test.ts +24 -0
  35. package/src/services/order.test.ts +18 -0
  36. package/src/services/product-discount.test.ts +146 -0
  37. package/src/services/project.test.ts +17 -0
  38. package/src/services/reviews.test.ts +230 -0
  39. package/src/services/subscription.test.ts +151 -0
  40. package/src/services/type.test.ts +127 -0
  41. package/src/services/zone.test.ts +117 -0
@@ -0,0 +1,58 @@
1
+ import supertest from "supertest";
2
+ import { describe, expect, test } from "vitest";
3
+ import { CommercetoolsMock } from "../index";
4
+
5
+ const ctMock = new CommercetoolsMock();
6
+ const projectKey = "dummy";
7
+ const customerId = "5fac8fca-2484-4b14-a1d1-cfdce2f8d3c4";
8
+ const businessUnitKey = "test-business-unit";
9
+
10
+ describe("AsAssociateCart", () => {
11
+ test("Create cart", async () => {
12
+ const draft = {
13
+ currency: "EUR",
14
+ };
15
+ const response = await supertest(ctMock.app)
16
+ .post(
17
+ `/${projectKey}/as-associate/${customerId}/in-business-unit/key=${businessUnitKey}/carts`,
18
+ )
19
+ .send(draft);
20
+
21
+ expect(response.status).toBe(201);
22
+ expect(response.body.id).toBeDefined();
23
+ });
24
+
25
+ test("Get cart", async () => {
26
+ const createResponse = await supertest(ctMock.app)
27
+ .post(
28
+ `/${projectKey}/as-associate/${customerId}/in-business-unit/key=${businessUnitKey}/carts`,
29
+ )
30
+ .send({ currency: "USD" });
31
+
32
+ expect(createResponse.status).toBe(201);
33
+
34
+ const response = await supertest(ctMock.app).get(
35
+ `/${projectKey}/as-associate/${customerId}/in-business-unit/key=${businessUnitKey}/carts/${createResponse.body.id}`,
36
+ );
37
+
38
+ expect(response.status).toBe(200);
39
+ expect(response.body).toEqual(createResponse.body);
40
+ });
41
+
42
+ test("Query carts", async () => {
43
+ const createResponse = await supertest(ctMock.app)
44
+ .post(
45
+ `/${projectKey}/as-associate/${customerId}/in-business-unit/key=${businessUnitKey}/carts`,
46
+ )
47
+ .send({ currency: "GBP" });
48
+
49
+ expect(createResponse.status).toBe(201);
50
+
51
+ const response = await supertest(ctMock.app).get(
52
+ `/${projectKey}/as-associate/${customerId}/in-business-unit/key=${businessUnitKey}/carts`,
53
+ );
54
+
55
+ expect(response.status).toBe(200);
56
+ expect(response.body.count).toBeGreaterThan(0);
57
+ });
58
+ });
@@ -0,0 +1,34 @@
1
+ import supertest from "supertest";
2
+ import { describe, expect, test } from "vitest";
3
+ import { CommercetoolsMock } from "../index";
4
+
5
+ const ctMock = new CommercetoolsMock();
6
+ const projectKey = "dummy";
7
+ const customerId = "5fac8fca-2484-4b14-a1d1-cfdce2f8d3c4";
8
+ const businessUnitKey = "test-business-unit";
9
+
10
+ describe("AsAssociate", () => {
11
+ test("Access as-associate service routes", async () => {
12
+ // Test that the as-associate service sets up routes correctly by testing cart endpoint
13
+ const response = await supertest(ctMock.app).get(
14
+ `/${projectKey}/as-associate/${customerId}/in-business-unit/key=${businessUnitKey}/carts`,
15
+ );
16
+
17
+ // Should return 200 with empty results or 404 if not configured
18
+ expect([200, 404]).toContain(response.status);
19
+ });
20
+
21
+ test("Create cart via as-associate", async () => {
22
+ const draft = {
23
+ currency: "EUR",
24
+ };
25
+ const response = await supertest(ctMock.app)
26
+ .post(
27
+ `/${projectKey}/as-associate/${customerId}/in-business-unit/key=${businessUnitKey}/carts`,
28
+ )
29
+ .send(draft);
30
+
31
+ expect(response.status).toBe(201);
32
+ expect(response.body.id).toBeDefined();
33
+ });
34
+ });
@@ -0,0 +1,114 @@
1
+ import type { AttributeGroupDraft } from "@commercetools/platform-sdk";
2
+ import supertest from "supertest";
3
+ import { describe, expect, test } from "vitest";
4
+ import { CommercetoolsMock } from "../index";
5
+
6
+ const ctMock = new CommercetoolsMock();
7
+
8
+ describe("AttributeGroup", () => {
9
+ test("Create attribute group", async () => {
10
+ const draft: AttributeGroupDraft = {
11
+ key: "product-specifications",
12
+ name: {
13
+ en: "Product Specifications",
14
+ },
15
+ attributes: [
16
+ {
17
+ key: "size",
18
+ },
19
+ {
20
+ key: "color",
21
+ },
22
+ ],
23
+ };
24
+ const response = await supertest(ctMock.app)
25
+ .post("/dummy/attribute-groups")
26
+ .send(draft);
27
+
28
+ expect(response.status).toBe(201);
29
+
30
+ expect(response.body).toEqual({
31
+ attributes: [
32
+ {
33
+ key: "size",
34
+ },
35
+ {
36
+ key: "color",
37
+ },
38
+ ],
39
+ createdAt: expect.anything(),
40
+ id: expect.anything(),
41
+ key: "product-specifications",
42
+ lastModifiedAt: expect.anything(),
43
+ name: {
44
+ en: "Product Specifications",
45
+ },
46
+ version: 1,
47
+ });
48
+ });
49
+
50
+ test("Get attribute group", async () => {
51
+ const draft: AttributeGroupDraft = {
52
+ key: "test-group",
53
+ name: {
54
+ en: "Test Group",
55
+ },
56
+ attributes: [],
57
+ };
58
+ const createResponse = await supertest(ctMock.app)
59
+ .post("/dummy/attribute-groups")
60
+ .send(draft);
61
+
62
+ expect(createResponse.status).toBe(201);
63
+
64
+ const response = await supertest(ctMock.app).get(
65
+ `/dummy/attribute-groups/${createResponse.body.id}`,
66
+ );
67
+
68
+ expect(response.status).toBe(200);
69
+ expect(response.body).toEqual(createResponse.body);
70
+ });
71
+
72
+ test("Get attribute group by key", async () => {
73
+ const draft: AttributeGroupDraft = {
74
+ key: "key-group",
75
+ name: {
76
+ en: "Key Group",
77
+ },
78
+ attributes: [],
79
+ };
80
+ const createResponse = await supertest(ctMock.app)
81
+ .post("/dummy/attribute-groups")
82
+ .send(draft);
83
+
84
+ expect(createResponse.status).toBe(201);
85
+
86
+ const response = await supertest(ctMock.app).get(
87
+ "/dummy/attribute-groups/key=key-group",
88
+ );
89
+
90
+ expect(response.status).toBe(200);
91
+ expect(response.body).toEqual(createResponse.body);
92
+ });
93
+
94
+ test("Query attribute groups", async () => {
95
+ const draft: AttributeGroupDraft = {
96
+ key: "query-group",
97
+ name: {
98
+ en: "Query Group",
99
+ },
100
+ attributes: [],
101
+ };
102
+ const createResponse = await supertest(ctMock.app)
103
+ .post("/dummy/attribute-groups")
104
+ .send(draft);
105
+
106
+ expect(createResponse.status).toBe(201);
107
+
108
+ const response = await supertest(ctMock.app).get("/dummy/attribute-groups");
109
+
110
+ expect(response.status).toBe(200);
111
+ expect(response.body.count).toBeGreaterThan(0);
112
+ expect(response.body.results).toContainEqual(createResponse.body);
113
+ });
114
+ });
@@ -0,0 +1,90 @@
1
+ import type { ChannelDraft } from "@commercetools/platform-sdk";
2
+ import supertest from "supertest";
3
+ import { describe, expect, test } from "vitest";
4
+ import { CommercetoolsMock } from "../index";
5
+
6
+ const ctMock = new CommercetoolsMock();
7
+
8
+ describe("Channel", () => {
9
+ test("Create channel", async () => {
10
+ const draft: ChannelDraft = {
11
+ key: "my-channel",
12
+ roles: ["InventorySupply"],
13
+ };
14
+ const response = await supertest(ctMock.app)
15
+ .post("/dummy/channels")
16
+ .send(draft);
17
+
18
+ expect(response.status).toBe(201);
19
+
20
+ expect(response.body).toEqual({
21
+ address: undefined,
22
+ createdAt: expect.anything(),
23
+ custom: undefined,
24
+ description: undefined,
25
+ geoLocation: undefined,
26
+ id: expect.anything(),
27
+ key: "my-channel",
28
+ lastModifiedAt: expect.anything(),
29
+ name: undefined,
30
+ roles: ["InventorySupply"],
31
+ version: 1,
32
+ });
33
+ });
34
+
35
+ test("Get channel", async () => {
36
+ const draft: ChannelDraft = {
37
+ key: "my-channel",
38
+ roles: ["InventorySupply"],
39
+ };
40
+ const createResponse = await supertest(ctMock.app)
41
+ .post("/dummy/channels")
42
+ .send(draft);
43
+
44
+ expect(createResponse.status).toBe(201);
45
+
46
+ const response = await supertest(ctMock.app).get(
47
+ `/dummy/channels/${createResponse.body.id}`,
48
+ );
49
+
50
+ expect(response.status).toBe(200);
51
+ expect(response.body).toEqual(createResponse.body);
52
+ });
53
+
54
+ test("Get channel by key", async () => {
55
+ const draft: ChannelDraft = {
56
+ key: "my-channel-key",
57
+ roles: ["InventorySupply"],
58
+ };
59
+ const createResponse = await supertest(ctMock.app)
60
+ .post("/dummy/channels")
61
+ .send(draft);
62
+
63
+ expect(createResponse.status).toBe(201);
64
+
65
+ const response = await supertest(ctMock.app).get(
66
+ "/dummy/channels/key=my-channel-key",
67
+ );
68
+
69
+ expect(response.status).toBe(200);
70
+ expect(response.body).toEqual(createResponse.body);
71
+ });
72
+
73
+ test("Query channels", async () => {
74
+ const draft: ChannelDraft = {
75
+ key: "test-channel",
76
+ roles: ["InventorySupply"],
77
+ };
78
+ const createResponse = await supertest(ctMock.app)
79
+ .post("/dummy/channels")
80
+ .send(draft);
81
+
82
+ expect(createResponse.status).toBe(201);
83
+
84
+ const response = await supertest(ctMock.app).get("/dummy/channels");
85
+
86
+ expect(response.status).toBe(200);
87
+ expect(response.body.count).toBeGreaterThan(0);
88
+ expect(response.body.results).toContainEqual(createResponse.body);
89
+ });
90
+ });
@@ -0,0 +1,85 @@
1
+ import type { CustomerGroupDraft } from "@commercetools/platform-sdk";
2
+ import supertest from "supertest";
3
+ import { describe, expect, test } from "vitest";
4
+ import { CommercetoolsMock } from "../index";
5
+
6
+ const ctMock = new CommercetoolsMock();
7
+
8
+ describe("CustomerGroup", () => {
9
+ test("Create customer group", async () => {
10
+ const draft: CustomerGroupDraft = {
11
+ key: "premium-customers",
12
+ groupName: "Premium Customers",
13
+ };
14
+ const response = await supertest(ctMock.app)
15
+ .post("/dummy/customer-groups")
16
+ .send(draft);
17
+
18
+ expect(response.status).toBe(201);
19
+
20
+ expect(response.body).toEqual({
21
+ createdAt: expect.anything(),
22
+ id: expect.anything(),
23
+ key: "premium-customers",
24
+ lastModifiedAt: expect.anything(),
25
+ name: "Premium Customers",
26
+ version: 1,
27
+ });
28
+ });
29
+
30
+ test("Get customer group", async () => {
31
+ const draft: CustomerGroupDraft = {
32
+ key: "test-group",
33
+ groupName: "Test Group",
34
+ };
35
+ const createResponse = await supertest(ctMock.app)
36
+ .post("/dummy/customer-groups")
37
+ .send(draft);
38
+
39
+ expect(createResponse.status).toBe(201);
40
+
41
+ const response = await supertest(ctMock.app).get(
42
+ `/dummy/customer-groups/${createResponse.body.id}`,
43
+ );
44
+
45
+ expect(response.status).toBe(200);
46
+ expect(response.body).toEqual(createResponse.body);
47
+ });
48
+
49
+ test("Get customer group by key", async () => {
50
+ const draft: CustomerGroupDraft = {
51
+ key: "key-group",
52
+ groupName: "Key Group",
53
+ };
54
+ const createResponse = await supertest(ctMock.app)
55
+ .post("/dummy/customer-groups")
56
+ .send(draft);
57
+
58
+ expect(createResponse.status).toBe(201);
59
+
60
+ const response = await supertest(ctMock.app).get(
61
+ "/dummy/customer-groups/key=key-group",
62
+ );
63
+
64
+ expect(response.status).toBe(200);
65
+ expect(response.body).toEqual(createResponse.body);
66
+ });
67
+
68
+ test("Query customer groups", async () => {
69
+ const draft: CustomerGroupDraft = {
70
+ key: "query-group",
71
+ groupName: "Query Group",
72
+ };
73
+ const createResponse = await supertest(ctMock.app)
74
+ .post("/dummy/customer-groups")
75
+ .send(draft);
76
+
77
+ expect(createResponse.status).toBe(201);
78
+
79
+ const response = await supertest(ctMock.app).get("/dummy/customer-groups");
80
+
81
+ expect(response.status).toBe(200);
82
+ expect(response.body.count).toBeGreaterThan(0);
83
+ expect(response.body.results).toContainEqual(createResponse.body);
84
+ });
85
+ });
@@ -0,0 +1,120 @@
1
+ import type { DiscountCodeDraft } from "@commercetools/platform-sdk";
2
+ import supertest from "supertest";
3
+ import { describe, expect, test } from "vitest";
4
+ import { CommercetoolsMock } from "../index";
5
+
6
+ const ctMock = new CommercetoolsMock();
7
+
8
+ describe("DiscountCode", () => {
9
+ test("Create discount code", async () => {
10
+ // First create a cart discount to reference
11
+ const cartDiscountResponse = await supertest(ctMock.app)
12
+ .post("/dummy/cart-discounts")
13
+ .send({
14
+ key: "test-cart-discount",
15
+ name: {
16
+ en: "Test Cart Discount",
17
+ },
18
+ value: {
19
+ type: "relative",
20
+ permyriad: 1000,
21
+ },
22
+ cartPredicate: "1 = 1",
23
+ target: {
24
+ type: "totalPrice",
25
+ },
26
+ sortOrder: "0.1",
27
+ });
28
+
29
+ expect(cartDiscountResponse.status).toBe(201);
30
+
31
+ const draft: DiscountCodeDraft = {
32
+ key: "SAVE10",
33
+ code: "SAVE10",
34
+ name: {
35
+ en: "Save 10% Discount",
36
+ },
37
+ cartDiscounts: [
38
+ {
39
+ typeId: "cart-discount",
40
+ id: cartDiscountResponse.body.id,
41
+ },
42
+ ],
43
+ isActive: true,
44
+ };
45
+ const response = await supertest(ctMock.app)
46
+ .post("/dummy/discount-codes")
47
+ .send(draft);
48
+
49
+ expect(response.status).toBe(201);
50
+
51
+ expect(response.body).toEqual({
52
+ applicationVersion: 1,
53
+ cartDiscounts: [
54
+ {
55
+ id: cartDiscountResponse.body.id,
56
+ typeId: "cart-discount",
57
+ },
58
+ ],
59
+ code: "SAVE10",
60
+ createdAt: expect.anything(),
61
+ groups: [],
62
+ id: expect.anything(),
63
+ isActive: true,
64
+ lastModifiedAt: expect.anything(),
65
+ name: {
66
+ en: "Save 10% Discount",
67
+ },
68
+ references: [],
69
+ version: 1,
70
+ });
71
+ });
72
+
73
+ test("Get discount code", async () => {
74
+ // First create a cart discount to reference
75
+ const cartDiscountResponse = await supertest(ctMock.app)
76
+ .post("/dummy/cart-discounts")
77
+ .send({
78
+ key: "test-cart-discount-2",
79
+ name: {
80
+ en: "Test Cart Discount 2",
81
+ },
82
+ value: {
83
+ type: "relative",
84
+ permyriad: 500,
85
+ },
86
+ cartPredicate: "1 = 1",
87
+ target: {
88
+ type: "totalPrice",
89
+ },
90
+ sortOrder: "0.1",
91
+ });
92
+
93
+ const draft: DiscountCodeDraft = {
94
+ key: "TEST10",
95
+ code: "TEST10",
96
+ name: {
97
+ en: "Test Discount",
98
+ },
99
+ cartDiscounts: [
100
+ {
101
+ typeId: "cart-discount",
102
+ id: cartDiscountResponse.body.id,
103
+ },
104
+ ],
105
+ isActive: true,
106
+ };
107
+ const createResponse = await supertest(ctMock.app)
108
+ .post("/dummy/discount-codes")
109
+ .send(draft);
110
+
111
+ expect(createResponse.status).toBe(201);
112
+
113
+ const response = await supertest(ctMock.app).get(
114
+ `/dummy/discount-codes/${createResponse.body.id}`,
115
+ );
116
+
117
+ expect(response.status).toBe(200);
118
+ expect(response.body).toEqual(createResponse.body);
119
+ });
120
+ });
@@ -0,0 +1,130 @@
1
+ import type { ExtensionDraft } from "@commercetools/platform-sdk";
2
+ import supertest from "supertest";
3
+ import { describe, expect, test } from "vitest";
4
+ import { CommercetoolsMock } from "../index";
5
+
6
+ const ctMock = new CommercetoolsMock();
7
+
8
+ describe("Extension", () => {
9
+ test("Create extension", async () => {
10
+ const draft: ExtensionDraft = {
11
+ key: "order-validation",
12
+ destination: {
13
+ type: "HTTP",
14
+ url: "https://example.com/webhook",
15
+ },
16
+ triggers: [
17
+ {
18
+ resourceTypeId: "order",
19
+ actions: ["Create"],
20
+ },
21
+ ],
22
+ };
23
+ const response = await supertest(ctMock.app)
24
+ .post("/dummy/extensions")
25
+ .send(draft);
26
+
27
+ expect(response.status).toBe(201);
28
+
29
+ expect(response.body).toEqual({
30
+ createdAt: expect.anything(),
31
+ destination: {
32
+ type: "HTTP",
33
+ url: "https://example.com/webhook",
34
+ },
35
+ id: expect.anything(),
36
+ key: "order-validation",
37
+ lastModifiedAt: expect.anything(),
38
+ triggers: [
39
+ {
40
+ actions: ["Create"],
41
+ resourceTypeId: "order",
42
+ },
43
+ ],
44
+ version: 1,
45
+ });
46
+ });
47
+
48
+ test("Get extension", async () => {
49
+ const draft: ExtensionDraft = {
50
+ key: "test-extension",
51
+ destination: {
52
+ type: "HTTP",
53
+ url: "https://test.example.com/webhook",
54
+ },
55
+ triggers: [
56
+ {
57
+ resourceTypeId: "customer",
58
+ actions: ["Update"],
59
+ },
60
+ ],
61
+ };
62
+ const createResponse = await supertest(ctMock.app)
63
+ .post("/dummy/extensions")
64
+ .send(draft);
65
+
66
+ expect(createResponse.status).toBe(201);
67
+
68
+ const response = await supertest(ctMock.app).get(
69
+ `/dummy/extensions/${createResponse.body.id}`,
70
+ );
71
+
72
+ expect(response.status).toBe(200);
73
+ expect(response.body).toEqual(createResponse.body);
74
+ });
75
+
76
+ test("Get extension by key", async () => {
77
+ const draft: ExtensionDraft = {
78
+ key: "key-extension",
79
+ destination: {
80
+ type: "HTTP",
81
+ url: "https://key.example.com/webhook",
82
+ },
83
+ triggers: [
84
+ {
85
+ resourceTypeId: "cart",
86
+ actions: ["Create", "Update"],
87
+ },
88
+ ],
89
+ };
90
+ const createResponse = await supertest(ctMock.app)
91
+ .post("/dummy/extensions")
92
+ .send(draft);
93
+
94
+ expect(createResponse.status).toBe(201);
95
+
96
+ const response = await supertest(ctMock.app).get(
97
+ "/dummy/extensions/key=key-extension",
98
+ );
99
+
100
+ expect(response.status).toBe(200);
101
+ expect(response.body).toEqual(createResponse.body);
102
+ });
103
+
104
+ test("Query extensions", async () => {
105
+ const draft: ExtensionDraft = {
106
+ key: "query-extension",
107
+ destination: {
108
+ type: "HTTP",
109
+ url: "https://query.example.com/webhook",
110
+ },
111
+ triggers: [
112
+ {
113
+ resourceTypeId: "product",
114
+ actions: ["Delete"],
115
+ },
116
+ ],
117
+ };
118
+ const createResponse = await supertest(ctMock.app)
119
+ .post("/dummy/extensions")
120
+ .send(draft);
121
+
122
+ expect(createResponse.status).toBe(201);
123
+
124
+ const response = await supertest(ctMock.app).get("/dummy/extensions");
125
+
126
+ expect(response.status).toBe(200);
127
+ expect(response.body.count).toBeGreaterThan(0);
128
+ expect(response.body.results).toContainEqual(createResponse.body);
129
+ });
130
+ });