@payloadcms/plugin-ecommerce 3.67.0-internal.87c53da → 3.67.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.
- package/dist/collections/addresses/createAddressesCollection.d.ts +1 -5
- package/dist/collections/addresses/createAddressesCollection.d.ts.map +1 -1
- package/dist/collections/addresses/createAddressesCollection.js +7 -6
- package/dist/collections/addresses/createAddressesCollection.js.map +1 -1
- package/dist/collections/carts/beforeChange.d.ts.map +1 -1
- package/dist/collections/carts/beforeChange.js +13 -1
- package/dist/collections/carts/beforeChange.js.map +1 -1
- package/dist/collections/carts/createCartsCollection.d.ts +6 -4
- package/dist/collections/carts/createCartsCollection.d.ts.map +1 -1
- package/dist/collections/carts/createCartsCollection.js +36 -5
- package/dist/collections/carts/createCartsCollection.js.map +1 -1
- package/dist/collections/carts/hasCartSecretAccess.d.ts +10 -0
- package/dist/collections/carts/hasCartSecretAccess.d.ts.map +1 -0
- package/dist/collections/carts/hasCartSecretAccess.js +24 -0
- package/dist/collections/carts/hasCartSecretAccess.js.map +1 -0
- package/dist/collections/orders/createOrdersCollection.d.ts +1 -5
- package/dist/collections/orders/createOrdersCollection.d.ts.map +1 -1
- package/dist/collections/orders/createOrdersCollection.js +9 -8
- package/dist/collections/orders/createOrdersCollection.js.map +1 -1
- package/dist/collections/products/createProductsCollection.d.ts +1 -4
- package/dist/collections/products/createProductsCollection.d.ts.map +1 -1
- package/dist/collections/products/createProductsCollection.js +5 -5
- package/dist/collections/products/createProductsCollection.js.map +1 -1
- package/dist/collections/transactions/createTransactionsCollection.d.ts +1 -3
- package/dist/collections/transactions/createTransactionsCollection.d.ts.map +1 -1
- package/dist/collections/transactions/createTransactionsCollection.js +5 -5
- package/dist/collections/transactions/createTransactionsCollection.js.map +1 -1
- package/dist/collections/variants/createVariantOptionsCollection.d.ts +1 -4
- package/dist/collections/variants/createVariantOptionsCollection.d.ts.map +1 -1
- package/dist/collections/variants/createVariantOptionsCollection.js +5 -5
- package/dist/collections/variants/createVariantOptionsCollection.js.map +1 -1
- package/dist/collections/variants/createVariantTypesCollection.d.ts +1 -4
- package/dist/collections/variants/createVariantTypesCollection.d.ts.map +1 -1
- package/dist/collections/variants/createVariantTypesCollection.js +5 -5
- package/dist/collections/variants/createVariantTypesCollection.js.map +1 -1
- package/dist/collections/variants/createVariantsCollection/index.d.ts +1 -4
- package/dist/collections/variants/createVariantsCollection/index.d.ts.map +1 -1
- package/dist/collections/variants/createVariantsCollection/index.js +5 -5
- package/dist/collections/variants/createVariantsCollection/index.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +10 -33
- package/dist/index.js.map +1 -1
- package/dist/react/provider/index.d.ts +3 -0
- package/dist/react/provider/index.d.ts.map +1 -1
- package/dist/react/provider/index.js +261 -156
- package/dist/react/provider/index.js.map +1 -1
- package/dist/translations/en.d.ts.map +1 -1
- package/dist/translations/en.js +1 -0
- package/dist/translations/en.js.map +1 -1
- package/dist/types/index.d.ts +43 -25
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js.map +1 -1
- package/dist/utilities/accessComposition.d.ts +55 -0
- package/dist/utilities/accessComposition.d.ts.map +1 -0
- package/dist/utilities/accessComposition.js +103 -0
- package/dist/utilities/accessComposition.js.map +1 -0
- package/dist/utilities/accessComposition.spec.js +803 -0
- package/dist/utilities/accessComposition.spec.js.map +1 -0
- package/dist/utilities/defaultProductsValidation.spec.js +383 -0
- package/dist/utilities/defaultProductsValidation.spec.js.map +1 -0
- package/dist/utilities/getCollectionSlugMap.spec.js +159 -0
- package/dist/utilities/getCollectionSlugMap.spec.js.map +1 -0
- package/dist/utilities/sanitizePluginConfig.d.ts.map +1 -1
- package/dist/utilities/sanitizePluginConfig.js +10 -2
- package/dist/utilities/sanitizePluginConfig.js.map +1 -1
- package/dist/utilities/sanitizePluginConfig.spec.js +515 -0
- package/dist/utilities/sanitizePluginConfig.spec.js.map +1 -0
- package/package.json +7 -7
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/utilities/getCollectionSlugMap.spec.ts"],"sourcesContent":["import type { SanitizedEcommercePluginConfig } from '../types/index.js'\n\nimport { USD } from '../currencies/index.js'\nimport { getCollectionSlugMap } from './getCollectionSlugMap'\n\ndescribe('getCollectionSlugMap', () => {\n const mockAccessConfig = {\n adminOnlyFieldAccess: jest.fn(),\n adminOrPublishedStatus: jest.fn(),\n customerOnlyFieldAccess: jest.fn(),\n isAdmin: jest.fn(),\n isAuthenticated: jest.fn(),\n isDocumentOwner: jest.fn(),\n publicAccess: jest.fn(),\n }\n\n const baseConfig: SanitizedEcommercePluginConfig = {\n access: mockAccessConfig,\n addresses: {\n addressFields: [],\n },\n carts: true,\n currencies: {\n defaultCurrency: 'USD',\n supportedCurrencies: [USD],\n },\n customers: {\n slug: 'users',\n },\n orders: true,\n payments: {\n paymentMethods: [],\n },\n products: true,\n transactions: true,\n }\n\n it('should return default slug map when no overrides are provided', () => {\n const result = getCollectionSlugMap({ sanitizedPluginConfig: baseConfig })\n\n expect(result).toEqual({\n addresses: 'addresses',\n carts: 'carts',\n customers: 'users',\n orders: 'orders',\n products: 'products',\n transactions: 'transactions',\n variantOptions: 'variantOptions',\n variants: 'variants',\n variantTypes: 'variantTypes',\n })\n })\n\n it('should use custom customers slug when provided', () => {\n const config: SanitizedEcommercePluginConfig = {\n ...baseConfig,\n customers: {\n slug: 'custom-users',\n },\n }\n\n const result = getCollectionSlugMap({ sanitizedPluginConfig: config })\n\n expect(result.customers).toBe('custom-users')\n })\n\n it('should apply slugMap overrides', () => {\n const config: SanitizedEcommercePluginConfig = {\n ...baseConfig,\n slugMap: {\n products: 'custom-products',\n variants: 'custom-variants',\n orders: 'custom-orders',\n },\n }\n\n const result = getCollectionSlugMap({ sanitizedPluginConfig: config })\n\n expect(result.products).toBe('custom-products')\n expect(result.variants).toBe('custom-variants')\n expect(result.orders).toBe('custom-orders')\n // Other slugs should remain default\n expect(result.addresses).toBe('addresses')\n expect(result.carts).toBe('carts')\n })\n\n it('should prioritize slugMap overrides over customers slug', () => {\n const config: SanitizedEcommercePluginConfig = {\n ...baseConfig,\n customers: {\n slug: 'my-users',\n },\n slugMap: {\n customers: 'overridden-users',\n },\n }\n\n const result = getCollectionSlugMap({ sanitizedPluginConfig: config })\n\n expect(result.customers).toBe('overridden-users')\n })\n\n it('should handle partial slugMap overrides', () => {\n const config: SanitizedEcommercePluginConfig = {\n ...baseConfig,\n slugMap: {\n products: 'items',\n },\n }\n\n const result = getCollectionSlugMap({ sanitizedPluginConfig: config })\n\n expect(result.products).toBe('items')\n expect(result.addresses).toBe('addresses')\n expect(result.carts).toBe('carts')\n expect(result.customers).toBe('users')\n expect(result.orders).toBe('orders')\n expect(result.transactions).toBe('transactions')\n expect(result.variants).toBe('variants')\n expect(result.variantOptions).toBe('variantOptions')\n expect(result.variantTypes).toBe('variantTypes')\n })\n\n it('should handle empty slugMap', () => {\n const config: SanitizedEcommercePluginConfig = {\n ...baseConfig,\n slugMap: {},\n }\n\n const result = getCollectionSlugMap({ sanitizedPluginConfig: config })\n\n expect(result).toEqual({\n addresses: 'addresses',\n carts: 'carts',\n customers: 'users',\n orders: 'orders',\n products: 'products',\n transactions: 'transactions',\n variantOptions: 'variantOptions',\n variants: 'variants',\n variantTypes: 'variantTypes',\n })\n })\n\n it('should handle undefined slugMap', () => {\n const config: SanitizedEcommercePluginConfig = {\n ...baseConfig,\n slugMap: undefined,\n }\n\n const result = getCollectionSlugMap({ sanitizedPluginConfig: config })\n\n expect(result).toEqual({\n addresses: 'addresses',\n carts: 'carts',\n customers: 'users',\n orders: 'orders',\n products: 'products',\n transactions: 'transactions',\n variantOptions: 'variantOptions',\n variants: 'variants',\n variantTypes: 'variantTypes',\n })\n })\n})\n"],"names":["USD","getCollectionSlugMap","describe","mockAccessConfig","adminOnlyFieldAccess","jest","fn","adminOrPublishedStatus","customerOnlyFieldAccess","isAdmin","isAuthenticated","isDocumentOwner","publicAccess","baseConfig","access","addresses","addressFields","carts","currencies","defaultCurrency","supportedCurrencies","customers","slug","orders","payments","paymentMethods","products","transactions","it","result","sanitizedPluginConfig","expect","toEqual","variantOptions","variants","variantTypes","config","toBe","slugMap","undefined"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sanitizePluginConfig.d.ts","sourceRoot":"","sources":["../../src/utilities/sanitizePluginConfig.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,8BAA8B,EAAE,MAAM,mBAAmB,CAAA;AAK9F,KAAK,KAAK,GAAG;IACX,YAAY,EAAE,qBAAqB,CAAA;CACpC,CAAA;AAED,eAAO,MAAM,oBAAoB,qBAAsB,KAAK,KAAG,
|
|
1
|
+
{"version":3,"file":"sanitizePluginConfig.d.ts","sourceRoot":"","sources":["../../src/utilities/sanitizePluginConfig.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,8BAA8B,EAAE,MAAM,mBAAmB,CAAA;AAK9F,KAAK,KAAK,GAAG;IACX,YAAY,EAAE,qBAAqB,CAAA;CACpC,CAAA;AAED,eAAO,MAAM,oBAAoB,qBAAsB,KAAK,KAAG,8BA6F9D,CAAA"}
|
|
@@ -36,7 +36,15 @@ export const sanitizePluginConfig = ({ pluginConfig })=>{
|
|
|
36
36
|
};
|
|
37
37
|
}
|
|
38
38
|
if (typeof config.carts === 'undefined') {
|
|
39
|
-
config.carts =
|
|
39
|
+
config.carts = {
|
|
40
|
+
allowGuestCarts: true
|
|
41
|
+
};
|
|
42
|
+
} else if (config.carts === true) {
|
|
43
|
+
config.carts = {
|
|
44
|
+
allowGuestCarts: true
|
|
45
|
+
};
|
|
46
|
+
} else if (typeof config.carts === 'object' && typeof config.carts.allowGuestCarts === 'undefined') {
|
|
47
|
+
config.carts.allowGuestCarts = true;
|
|
40
48
|
}
|
|
41
49
|
if (typeof config.orders === 'undefined') {
|
|
42
50
|
config.orders = true;
|
|
@@ -57,7 +65,7 @@ export const sanitizePluginConfig = ({ pluginConfig })=>{
|
|
|
57
65
|
}
|
|
58
66
|
}
|
|
59
67
|
config.access = {
|
|
60
|
-
|
|
68
|
+
isAuthenticated: ({ req })=>Boolean(req?.user),
|
|
61
69
|
publicAccess: ()=>true,
|
|
62
70
|
...pluginConfig.access
|
|
63
71
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/utilities/sanitizePluginConfig.ts"],"sourcesContent":["import type { EcommercePluginConfig, SanitizedEcommercePluginConfig } from '../types/index.js'\n\nimport { defaultAddressFields } from '../collections/addresses/defaultAddressFields.js'\nimport { USD } from '../currencies/index.js'\n\ntype Props = {\n pluginConfig: EcommercePluginConfig\n}\n\nexport const sanitizePluginConfig = ({ pluginConfig }: Props): SanitizedEcommercePluginConfig => {\n const config = {\n ...pluginConfig,\n } as Partial<SanitizedEcommercePluginConfig>\n\n if (typeof config.customers === 'undefined') {\n config.customers = {\n slug: 'users',\n }\n }\n\n if (\n typeof config.addresses === 'undefined' ||\n (typeof config.addresses === 'boolean' && config.addresses === true)\n ) {\n config.addresses = {\n addressFields: defaultAddressFields(),\n }\n } else {\n const addressFields =\n (typeof pluginConfig.addresses === 'object' &&\n typeof pluginConfig.addresses.addressFields === 'function' &&\n pluginConfig.addresses.addressFields({\n defaultFields: defaultAddressFields(),\n })) ||\n defaultAddressFields()\n\n config.addresses = {\n ...config.addresses,\n addressFields,\n }\n }\n\n if (!config.currencies) {\n config.currencies = {\n defaultCurrency: 'USD',\n supportedCurrencies: [USD],\n }\n }\n\n if (\n typeof config.inventory === 'undefined' ||\n (typeof config.inventory === 'boolean' && config.inventory === true)\n ) {\n config.inventory = {\n fieldName: 'inventory',\n }\n }\n\n if (typeof config.carts === 'undefined') {\n config.carts = true\n }\n\n if (typeof config.orders === 'undefined') {\n config.orders = true\n }\n\n if (typeof config.transactions === 'undefined') {\n config.transactions = true\n }\n\n if (typeof config.payments === 'undefined') {\n config.payments = {\n paymentMethods: [],\n }\n } else if (!config.payments.paymentMethods) {\n config.payments.paymentMethods = []\n }\n\n if (config.products) {\n if (typeof config.products === 'object' && typeof config.products.variants === 'undefined') {\n config.products.variants = true\n }\n }\n\n config.access = {\n
|
|
1
|
+
{"version":3,"sources":["../../src/utilities/sanitizePluginConfig.ts"],"sourcesContent":["import type { EcommercePluginConfig, SanitizedEcommercePluginConfig } from '../types/index.js'\n\nimport { defaultAddressFields } from '../collections/addresses/defaultAddressFields.js'\nimport { USD } from '../currencies/index.js'\n\ntype Props = {\n pluginConfig: EcommercePluginConfig\n}\n\nexport const sanitizePluginConfig = ({ pluginConfig }: Props): SanitizedEcommercePluginConfig => {\n const config = {\n ...pluginConfig,\n } as Partial<SanitizedEcommercePluginConfig>\n\n if (typeof config.customers === 'undefined') {\n config.customers = {\n slug: 'users',\n }\n }\n\n if (\n typeof config.addresses === 'undefined' ||\n (typeof config.addresses === 'boolean' && config.addresses === true)\n ) {\n config.addresses = {\n addressFields: defaultAddressFields(),\n }\n } else {\n const addressFields =\n (typeof pluginConfig.addresses === 'object' &&\n typeof pluginConfig.addresses.addressFields === 'function' &&\n pluginConfig.addresses.addressFields({\n defaultFields: defaultAddressFields(),\n })) ||\n defaultAddressFields()\n\n config.addresses = {\n ...config.addresses,\n addressFields,\n }\n }\n\n if (!config.currencies) {\n config.currencies = {\n defaultCurrency: 'USD',\n supportedCurrencies: [USD],\n }\n }\n\n if (\n typeof config.inventory === 'undefined' ||\n (typeof config.inventory === 'boolean' && config.inventory === true)\n ) {\n config.inventory = {\n fieldName: 'inventory',\n }\n }\n\n if (typeof config.carts === 'undefined') {\n config.carts = {\n allowGuestCarts: true,\n }\n } else if (config.carts === true) {\n config.carts = {\n allowGuestCarts: true,\n }\n } else if (\n typeof config.carts === 'object' &&\n typeof config.carts.allowGuestCarts === 'undefined'\n ) {\n config.carts.allowGuestCarts = true\n }\n\n if (typeof config.orders === 'undefined') {\n config.orders = true\n }\n\n if (typeof config.transactions === 'undefined') {\n config.transactions = true\n }\n\n if (typeof config.payments === 'undefined') {\n config.payments = {\n paymentMethods: [],\n }\n } else if (!config.payments.paymentMethods) {\n config.payments.paymentMethods = []\n }\n\n if (config.products) {\n if (typeof config.products === 'object' && typeof config.products.variants === 'undefined') {\n config.products.variants = true\n }\n }\n\n config.access = {\n isAuthenticated: ({ req }) => Boolean(req?.user),\n publicAccess: () => true,\n ...pluginConfig.access,\n }\n\n return config as SanitizedEcommercePluginConfig\n}\n"],"names":["defaultAddressFields","USD","sanitizePluginConfig","pluginConfig","config","customers","slug","addresses","addressFields","defaultFields","currencies","defaultCurrency","supportedCurrencies","inventory","fieldName","carts","allowGuestCarts","orders","transactions","payments","paymentMethods","products","variants","access","isAuthenticated","req","Boolean","user","publicAccess"],"mappings":"AAEA,SAASA,oBAAoB,QAAQ,mDAAkD;AACvF,SAASC,GAAG,QAAQ,yBAAwB;AAM5C,OAAO,MAAMC,uBAAuB,CAAC,EAAEC,YAAY,EAAS;IAC1D,MAAMC,SAAS;QACb,GAAGD,YAAY;IACjB;IAEA,IAAI,OAAOC,OAAOC,SAAS,KAAK,aAAa;QAC3CD,OAAOC,SAAS,GAAG;YACjBC,MAAM;QACR;IACF;IAEA,IACE,OAAOF,OAAOG,SAAS,KAAK,eAC3B,OAAOH,OAAOG,SAAS,KAAK,aAAaH,OAAOG,SAAS,KAAK,MAC/D;QACAH,OAAOG,SAAS,GAAG;YACjBC,eAAeR;QACjB;IACF,OAAO;QACL,MAAMQ,gBACJ,AAAC,OAAOL,aAAaI,SAAS,KAAK,YACjC,OAAOJ,aAAaI,SAAS,CAACC,aAAa,KAAK,cAChDL,aAAaI,SAAS,CAACC,aAAa,CAAC;YACnCC,eAAeT;QACjB,MACFA;QAEFI,OAAOG,SAAS,GAAG;YACjB,GAAGH,OAAOG,SAAS;YACnBC;QACF;IACF;IAEA,IAAI,CAACJ,OAAOM,UAAU,EAAE;QACtBN,OAAOM,UAAU,GAAG;YAClBC,iBAAiB;YACjBC,qBAAqB;gBAACX;aAAI;QAC5B;IACF;IAEA,IACE,OAAOG,OAAOS,SAAS,KAAK,eAC3B,OAAOT,OAAOS,SAAS,KAAK,aAAaT,OAAOS,SAAS,KAAK,MAC/D;QACAT,OAAOS,SAAS,GAAG;YACjBC,WAAW;QACb;IACF;IAEA,IAAI,OAAOV,OAAOW,KAAK,KAAK,aAAa;QACvCX,OAAOW,KAAK,GAAG;YACbC,iBAAiB;QACnB;IACF,OAAO,IAAIZ,OAAOW,KAAK,KAAK,MAAM;QAChCX,OAAOW,KAAK,GAAG;YACbC,iBAAiB;QACnB;IACF,OAAO,IACL,OAAOZ,OAAOW,KAAK,KAAK,YACxB,OAAOX,OAAOW,KAAK,CAACC,eAAe,KAAK,aACxC;QACAZ,OAAOW,KAAK,CAACC,eAAe,GAAG;IACjC;IAEA,IAAI,OAAOZ,OAAOa,MAAM,KAAK,aAAa;QACxCb,OAAOa,MAAM,GAAG;IAClB;IAEA,IAAI,OAAOb,OAAOc,YAAY,KAAK,aAAa;QAC9Cd,OAAOc,YAAY,GAAG;IACxB;IAEA,IAAI,OAAOd,OAAOe,QAAQ,KAAK,aAAa;QAC1Cf,OAAOe,QAAQ,GAAG;YAChBC,gBAAgB,EAAE;QACpB;IACF,OAAO,IAAI,CAAChB,OAAOe,QAAQ,CAACC,cAAc,EAAE;QAC1ChB,OAAOe,QAAQ,CAACC,cAAc,GAAG,EAAE;IACrC;IAEA,IAAIhB,OAAOiB,QAAQ,EAAE;QACnB,IAAI,OAAOjB,OAAOiB,QAAQ,KAAK,YAAY,OAAOjB,OAAOiB,QAAQ,CAACC,QAAQ,KAAK,aAAa;YAC1FlB,OAAOiB,QAAQ,CAACC,QAAQ,GAAG;QAC7B;IACF;IAEAlB,OAAOmB,MAAM,GAAG;QACdC,iBAAiB,CAAC,EAAEC,GAAG,EAAE,GAAKC,QAAQD,KAAKE;QAC3CC,cAAc,IAAM;QACpB,GAAGzB,aAAaoB,MAAM;IACxB;IAEA,OAAOnB;AACT,EAAC"}
|
|
@@ -0,0 +1,515 @@
|
|
|
1
|
+
import { EUR, USD } from '../currencies/index.js';
|
|
2
|
+
import { sanitizePluginConfig } from './sanitizePluginConfig';
|
|
3
|
+
describe('sanitizePluginConfig', ()=>{
|
|
4
|
+
const mockAccessConfig = {
|
|
5
|
+
adminOnlyFieldAccess: jest.fn(),
|
|
6
|
+
adminOrPublishedStatus: jest.fn(),
|
|
7
|
+
customerOnlyFieldAccess: jest.fn(),
|
|
8
|
+
isAdmin: jest.fn(),
|
|
9
|
+
isAuthenticated: jest.fn(),
|
|
10
|
+
isDocumentOwner: jest.fn()
|
|
11
|
+
};
|
|
12
|
+
const minimalConfig = {
|
|
13
|
+
access: mockAccessConfig,
|
|
14
|
+
customers: {
|
|
15
|
+
slug: 'users'
|
|
16
|
+
}
|
|
17
|
+
};
|
|
18
|
+
describe('customers', ()=>{
|
|
19
|
+
it('should default customers slug to "users" when undefined', ()=>{
|
|
20
|
+
const config = {
|
|
21
|
+
access: mockAccessConfig,
|
|
22
|
+
customers: undefined
|
|
23
|
+
};
|
|
24
|
+
const result = sanitizePluginConfig({
|
|
25
|
+
pluginConfig: config
|
|
26
|
+
});
|
|
27
|
+
expect(result.customers).toEqual({
|
|
28
|
+
slug: 'users'
|
|
29
|
+
});
|
|
30
|
+
});
|
|
31
|
+
it('should preserve custom customers slug', ()=>{
|
|
32
|
+
const config = {
|
|
33
|
+
...minimalConfig,
|
|
34
|
+
customers: {
|
|
35
|
+
slug: 'custom-users'
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
const result = sanitizePluginConfig({
|
|
39
|
+
pluginConfig: config
|
|
40
|
+
});
|
|
41
|
+
expect(result.customers.slug).toBe('custom-users');
|
|
42
|
+
});
|
|
43
|
+
});
|
|
44
|
+
describe('addresses', ()=>{
|
|
45
|
+
it('should create default addresses config when undefined', ()=>{
|
|
46
|
+
const result = sanitizePluginConfig({
|
|
47
|
+
pluginConfig: minimalConfig
|
|
48
|
+
});
|
|
49
|
+
expect(result.addresses).toBeDefined();
|
|
50
|
+
expect(result.addresses.addressFields).toBeDefined();
|
|
51
|
+
expect(Array.isArray(result.addresses.addressFields)).toBe(true);
|
|
52
|
+
expect(result.addresses.addressFields.length).toBeGreaterThan(0);
|
|
53
|
+
});
|
|
54
|
+
it('should create default addresses config when set to true', ()=>{
|
|
55
|
+
const config = {
|
|
56
|
+
...minimalConfig,
|
|
57
|
+
addresses: true
|
|
58
|
+
};
|
|
59
|
+
const result = sanitizePluginConfig({
|
|
60
|
+
pluginConfig: config
|
|
61
|
+
});
|
|
62
|
+
expect(result.addresses).toBeDefined();
|
|
63
|
+
expect(result.addresses.addressFields).toBeDefined();
|
|
64
|
+
expect(Array.isArray(result.addresses.addressFields)).toBe(true);
|
|
65
|
+
});
|
|
66
|
+
it('should use custom addressFields function', ()=>{
|
|
67
|
+
const customField = {
|
|
68
|
+
name: 'customField',
|
|
69
|
+
type: 'text'
|
|
70
|
+
};
|
|
71
|
+
const config = {
|
|
72
|
+
...minimalConfig,
|
|
73
|
+
addresses: {
|
|
74
|
+
addressFields: ({ defaultFields })=>[
|
|
75
|
+
...defaultFields,
|
|
76
|
+
customField
|
|
77
|
+
]
|
|
78
|
+
}
|
|
79
|
+
};
|
|
80
|
+
const result = sanitizePluginConfig({
|
|
81
|
+
pluginConfig: config
|
|
82
|
+
});
|
|
83
|
+
expect(result.addresses.addressFields).toBeDefined();
|
|
84
|
+
const lastField = result.addresses.addressFields[result.addresses.addressFields.length - 1];
|
|
85
|
+
expect(lastField).toEqual(customField);
|
|
86
|
+
});
|
|
87
|
+
it('should preserve other address config properties', ()=>{
|
|
88
|
+
const config = {
|
|
89
|
+
...minimalConfig,
|
|
90
|
+
addresses: {
|
|
91
|
+
addressFields: ({ defaultFields })=>defaultFields,
|
|
92
|
+
supportedCountries: [
|
|
93
|
+
{
|
|
94
|
+
label: 'United States',
|
|
95
|
+
value: 'US'
|
|
96
|
+
},
|
|
97
|
+
{
|
|
98
|
+
label: 'Canada',
|
|
99
|
+
value: 'CA'
|
|
100
|
+
}
|
|
101
|
+
]
|
|
102
|
+
}
|
|
103
|
+
};
|
|
104
|
+
const result = sanitizePluginConfig({
|
|
105
|
+
pluginConfig: config
|
|
106
|
+
});
|
|
107
|
+
expect(result.addresses.supportedCountries).toEqual([
|
|
108
|
+
{
|
|
109
|
+
label: 'United States',
|
|
110
|
+
value: 'US'
|
|
111
|
+
},
|
|
112
|
+
{
|
|
113
|
+
label: 'Canada',
|
|
114
|
+
value: 'CA'
|
|
115
|
+
}
|
|
116
|
+
]);
|
|
117
|
+
});
|
|
118
|
+
});
|
|
119
|
+
describe('currencies', ()=>{
|
|
120
|
+
it('should default to USD when undefined', ()=>{
|
|
121
|
+
const result = sanitizePluginConfig({
|
|
122
|
+
pluginConfig: minimalConfig
|
|
123
|
+
});
|
|
124
|
+
expect(result.currencies).toEqual({
|
|
125
|
+
defaultCurrency: 'USD',
|
|
126
|
+
supportedCurrencies: [
|
|
127
|
+
USD
|
|
128
|
+
]
|
|
129
|
+
});
|
|
130
|
+
});
|
|
131
|
+
it('should preserve custom currencies config', ()=>{
|
|
132
|
+
const config = {
|
|
133
|
+
...minimalConfig,
|
|
134
|
+
currencies: {
|
|
135
|
+
defaultCurrency: 'EUR',
|
|
136
|
+
supportedCurrencies: [
|
|
137
|
+
USD,
|
|
138
|
+
EUR
|
|
139
|
+
]
|
|
140
|
+
}
|
|
141
|
+
};
|
|
142
|
+
const result = sanitizePluginConfig({
|
|
143
|
+
pluginConfig: config
|
|
144
|
+
});
|
|
145
|
+
expect(result.currencies).toEqual({
|
|
146
|
+
defaultCurrency: 'EUR',
|
|
147
|
+
supportedCurrencies: [
|
|
148
|
+
USD,
|
|
149
|
+
EUR
|
|
150
|
+
]
|
|
151
|
+
});
|
|
152
|
+
});
|
|
153
|
+
});
|
|
154
|
+
describe('inventory', ()=>{
|
|
155
|
+
it('should default inventory config when undefined', ()=>{
|
|
156
|
+
const result = sanitizePluginConfig({
|
|
157
|
+
pluginConfig: minimalConfig
|
|
158
|
+
});
|
|
159
|
+
expect(result.inventory).toEqual({
|
|
160
|
+
fieldName: 'inventory'
|
|
161
|
+
});
|
|
162
|
+
});
|
|
163
|
+
it('should default inventory config when set to true', ()=>{
|
|
164
|
+
const config = {
|
|
165
|
+
...minimalConfig,
|
|
166
|
+
inventory: true
|
|
167
|
+
};
|
|
168
|
+
const result = sanitizePluginConfig({
|
|
169
|
+
pluginConfig: config
|
|
170
|
+
});
|
|
171
|
+
expect(result.inventory).toEqual({
|
|
172
|
+
fieldName: 'inventory'
|
|
173
|
+
});
|
|
174
|
+
});
|
|
175
|
+
it('should preserve custom inventory config', ()=>{
|
|
176
|
+
const config = {
|
|
177
|
+
...minimalConfig,
|
|
178
|
+
inventory: {
|
|
179
|
+
fieldName: 'stock'
|
|
180
|
+
}
|
|
181
|
+
};
|
|
182
|
+
const result = sanitizePluginConfig({
|
|
183
|
+
pluginConfig: config
|
|
184
|
+
});
|
|
185
|
+
expect(result.inventory).toEqual({
|
|
186
|
+
fieldName: 'stock'
|
|
187
|
+
});
|
|
188
|
+
});
|
|
189
|
+
it('should allow disabling inventory with false', ()=>{
|
|
190
|
+
const config = {
|
|
191
|
+
...minimalConfig,
|
|
192
|
+
inventory: false
|
|
193
|
+
};
|
|
194
|
+
const result = sanitizePluginConfig({
|
|
195
|
+
pluginConfig: config
|
|
196
|
+
});
|
|
197
|
+
expect(result.inventory).toBe(false);
|
|
198
|
+
});
|
|
199
|
+
});
|
|
200
|
+
describe('carts', ()=>{
|
|
201
|
+
it('should default carts to object with allowGuestCarts true when undefined', ()=>{
|
|
202
|
+
const result = sanitizePluginConfig({
|
|
203
|
+
pluginConfig: minimalConfig
|
|
204
|
+
});
|
|
205
|
+
expect(result.carts).toEqual({
|
|
206
|
+
allowGuestCarts: true
|
|
207
|
+
});
|
|
208
|
+
});
|
|
209
|
+
it('should convert carts true to object with allowGuestCarts true', ()=>{
|
|
210
|
+
const config = {
|
|
211
|
+
...minimalConfig,
|
|
212
|
+
carts: true
|
|
213
|
+
};
|
|
214
|
+
const result = sanitizePluginConfig({
|
|
215
|
+
pluginConfig: config
|
|
216
|
+
});
|
|
217
|
+
expect(result.carts).toEqual({
|
|
218
|
+
allowGuestCarts: true
|
|
219
|
+
});
|
|
220
|
+
});
|
|
221
|
+
it('should preserve carts false', ()=>{
|
|
222
|
+
const config = {
|
|
223
|
+
...minimalConfig,
|
|
224
|
+
carts: false
|
|
225
|
+
};
|
|
226
|
+
const result = sanitizePluginConfig({
|
|
227
|
+
pluginConfig: config
|
|
228
|
+
});
|
|
229
|
+
expect(result.carts).toBe(false);
|
|
230
|
+
});
|
|
231
|
+
it('should default allowGuestCarts to true when carts is object without it', ()=>{
|
|
232
|
+
const config = {
|
|
233
|
+
...minimalConfig,
|
|
234
|
+
carts: {}
|
|
235
|
+
};
|
|
236
|
+
const result = sanitizePluginConfig({
|
|
237
|
+
pluginConfig: config
|
|
238
|
+
});
|
|
239
|
+
expect(result.carts).toEqual({
|
|
240
|
+
allowGuestCarts: true
|
|
241
|
+
});
|
|
242
|
+
});
|
|
243
|
+
it('should preserve explicit allowGuestCarts false', ()=>{
|
|
244
|
+
const config = {
|
|
245
|
+
...minimalConfig,
|
|
246
|
+
carts: {
|
|
247
|
+
allowGuestCarts: false
|
|
248
|
+
}
|
|
249
|
+
};
|
|
250
|
+
const result = sanitizePluginConfig({
|
|
251
|
+
pluginConfig: config
|
|
252
|
+
});
|
|
253
|
+
expect(result.carts).toEqual({
|
|
254
|
+
allowGuestCarts: false
|
|
255
|
+
});
|
|
256
|
+
});
|
|
257
|
+
it('should preserve other carts config properties', ()=>{
|
|
258
|
+
const config = {
|
|
259
|
+
...minimalConfig,
|
|
260
|
+
carts: {
|
|
261
|
+
allowGuestCarts: false,
|
|
262
|
+
cartsCollectionOverride: jest.fn()
|
|
263
|
+
}
|
|
264
|
+
};
|
|
265
|
+
const result = sanitizePluginConfig({
|
|
266
|
+
pluginConfig: config
|
|
267
|
+
});
|
|
268
|
+
expect(result.carts).toHaveProperty('allowGuestCarts', false);
|
|
269
|
+
expect(result.carts).toHaveProperty('cartsCollectionOverride');
|
|
270
|
+
});
|
|
271
|
+
});
|
|
272
|
+
describe('orders', ()=>{
|
|
273
|
+
it('should default orders to true when undefined', ()=>{
|
|
274
|
+
const result = sanitizePluginConfig({
|
|
275
|
+
pluginConfig: minimalConfig
|
|
276
|
+
});
|
|
277
|
+
expect(result.orders).toBe(true);
|
|
278
|
+
});
|
|
279
|
+
it('should preserve orders config', ()=>{
|
|
280
|
+
const config = {
|
|
281
|
+
...minimalConfig,
|
|
282
|
+
orders: false
|
|
283
|
+
};
|
|
284
|
+
const result = sanitizePluginConfig({
|
|
285
|
+
pluginConfig: config
|
|
286
|
+
});
|
|
287
|
+
expect(result.orders).toBe(false);
|
|
288
|
+
});
|
|
289
|
+
});
|
|
290
|
+
describe('transactions', ()=>{
|
|
291
|
+
it('should default transactions to true when undefined', ()=>{
|
|
292
|
+
const result = sanitizePluginConfig({
|
|
293
|
+
pluginConfig: minimalConfig
|
|
294
|
+
});
|
|
295
|
+
expect(result.transactions).toBe(true);
|
|
296
|
+
});
|
|
297
|
+
it('should preserve transactions config', ()=>{
|
|
298
|
+
const config = {
|
|
299
|
+
...minimalConfig,
|
|
300
|
+
transactions: false
|
|
301
|
+
};
|
|
302
|
+
const result = sanitizePluginConfig({
|
|
303
|
+
pluginConfig: config
|
|
304
|
+
});
|
|
305
|
+
expect(result.transactions).toBe(false);
|
|
306
|
+
});
|
|
307
|
+
});
|
|
308
|
+
describe('payments', ()=>{
|
|
309
|
+
it('should default payments to empty array when undefined', ()=>{
|
|
310
|
+
const result = sanitizePluginConfig({
|
|
311
|
+
pluginConfig: minimalConfig
|
|
312
|
+
});
|
|
313
|
+
expect(result.payments).toEqual({
|
|
314
|
+
paymentMethods: []
|
|
315
|
+
});
|
|
316
|
+
});
|
|
317
|
+
it('should default paymentMethods to empty array when not provided', ()=>{
|
|
318
|
+
const config = {
|
|
319
|
+
...minimalConfig,
|
|
320
|
+
payments: {}
|
|
321
|
+
};
|
|
322
|
+
const result = sanitizePluginConfig({
|
|
323
|
+
pluginConfig: config
|
|
324
|
+
});
|
|
325
|
+
expect(result.payments.paymentMethods).toEqual([]);
|
|
326
|
+
});
|
|
327
|
+
it('should preserve payment methods', ()=>{
|
|
328
|
+
const mockAdapter = {
|
|
329
|
+
name: 'stripe',
|
|
330
|
+
label: 'Stripe'
|
|
331
|
+
};
|
|
332
|
+
const config = {
|
|
333
|
+
...minimalConfig,
|
|
334
|
+
payments: {
|
|
335
|
+
paymentMethods: [
|
|
336
|
+
mockAdapter
|
|
337
|
+
]
|
|
338
|
+
}
|
|
339
|
+
};
|
|
340
|
+
const result = sanitizePluginConfig({
|
|
341
|
+
pluginConfig: config
|
|
342
|
+
});
|
|
343
|
+
expect(result.payments.paymentMethods).toEqual([
|
|
344
|
+
mockAdapter
|
|
345
|
+
]);
|
|
346
|
+
});
|
|
347
|
+
});
|
|
348
|
+
describe('products', ()=>{
|
|
349
|
+
it('should default variants to true when products is object and variants is undefined', ()=>{
|
|
350
|
+
const config = {
|
|
351
|
+
...minimalConfig,
|
|
352
|
+
products: {}
|
|
353
|
+
};
|
|
354
|
+
const result = sanitizePluginConfig({
|
|
355
|
+
pluginConfig: config
|
|
356
|
+
});
|
|
357
|
+
expect(result.products).toEqual({
|
|
358
|
+
variants: true
|
|
359
|
+
});
|
|
360
|
+
});
|
|
361
|
+
it('should preserve variants config when provided', ()=>{
|
|
362
|
+
const config = {
|
|
363
|
+
...minimalConfig,
|
|
364
|
+
products: {
|
|
365
|
+
variants: false
|
|
366
|
+
}
|
|
367
|
+
};
|
|
368
|
+
const result = sanitizePluginConfig({
|
|
369
|
+
pluginConfig: config
|
|
370
|
+
});
|
|
371
|
+
expect(result.products).toEqual({
|
|
372
|
+
variants: false
|
|
373
|
+
});
|
|
374
|
+
});
|
|
375
|
+
it('should not modify products when set to true', ()=>{
|
|
376
|
+
const config = {
|
|
377
|
+
...minimalConfig,
|
|
378
|
+
products: true
|
|
379
|
+
};
|
|
380
|
+
const result = sanitizePluginConfig({
|
|
381
|
+
pluginConfig: config
|
|
382
|
+
});
|
|
383
|
+
expect(result.products).toBe(true);
|
|
384
|
+
});
|
|
385
|
+
it('should not modify products when set to false', ()=>{
|
|
386
|
+
const config = {
|
|
387
|
+
...minimalConfig,
|
|
388
|
+
products: false
|
|
389
|
+
};
|
|
390
|
+
const result = sanitizePluginConfig({
|
|
391
|
+
pluginConfig: config
|
|
392
|
+
});
|
|
393
|
+
expect(result.products).toBe(false);
|
|
394
|
+
});
|
|
395
|
+
});
|
|
396
|
+
describe('access', ()=>{
|
|
397
|
+
it('should provide default isAuthenticated function', ()=>{
|
|
398
|
+
const result = sanitizePluginConfig({
|
|
399
|
+
pluginConfig: minimalConfig
|
|
400
|
+
});
|
|
401
|
+
expect(result.access.isAuthenticated).toBeDefined();
|
|
402
|
+
expect(typeof result.access.isAuthenticated).toBe('function');
|
|
403
|
+
});
|
|
404
|
+
it('should provide default publicAccess function', ()=>{
|
|
405
|
+
const result = sanitizePluginConfig({
|
|
406
|
+
pluginConfig: minimalConfig
|
|
407
|
+
});
|
|
408
|
+
expect(result.access.publicAccess).toBeDefined();
|
|
409
|
+
expect(typeof result.access.publicAccess).toBe('function');
|
|
410
|
+
});
|
|
411
|
+
it('should allow user-provided access functions to override defaults', ()=>{
|
|
412
|
+
const customIsAuthenticated = jest.fn();
|
|
413
|
+
const customPublicAccess = jest.fn();
|
|
414
|
+
const config = {
|
|
415
|
+
...minimalConfig,
|
|
416
|
+
access: {
|
|
417
|
+
...mockAccessConfig,
|
|
418
|
+
isAuthenticated: customIsAuthenticated,
|
|
419
|
+
publicAccess: customPublicAccess
|
|
420
|
+
}
|
|
421
|
+
};
|
|
422
|
+
const result = sanitizePluginConfig({
|
|
423
|
+
pluginConfig: config
|
|
424
|
+
});
|
|
425
|
+
expect(result.access.isAuthenticated).toBe(customIsAuthenticated);
|
|
426
|
+
expect(result.access.publicAccess).toBe(customPublicAccess);
|
|
427
|
+
});
|
|
428
|
+
it('should preserve all user-provided access functions', ()=>{
|
|
429
|
+
const result = sanitizePluginConfig({
|
|
430
|
+
pluginConfig: minimalConfig
|
|
431
|
+
});
|
|
432
|
+
expect(result.access.adminOnlyFieldAccess).toBe(mockAccessConfig.adminOnlyFieldAccess);
|
|
433
|
+
expect(result.access.adminOrPublishedStatus).toBe(mockAccessConfig.adminOrPublishedStatus);
|
|
434
|
+
expect(result.access.customerOnlyFieldAccess).toBe(mockAccessConfig.customerOnlyFieldAccess);
|
|
435
|
+
expect(result.access.isAdmin).toBe(mockAccessConfig.isAdmin);
|
|
436
|
+
expect(result.access.isDocumentOwner).toBe(mockAccessConfig.isDocumentOwner);
|
|
437
|
+
});
|
|
438
|
+
it('default publicAccess should always return true', ()=>{
|
|
439
|
+
const result = sanitizePluginConfig({
|
|
440
|
+
pluginConfig: minimalConfig
|
|
441
|
+
});
|
|
442
|
+
// @ts-expect-error - ignoring for test
|
|
443
|
+
expect(result.access.publicAccess()).toBe(true);
|
|
444
|
+
});
|
|
445
|
+
it('default isAuthenticated should be provided', ()=>{
|
|
446
|
+
const result = sanitizePluginConfig({
|
|
447
|
+
pluginConfig: minimalConfig
|
|
448
|
+
});
|
|
449
|
+
expect(result.access.isAuthenticated).toBeDefined();
|
|
450
|
+
expect(typeof result.access.isAuthenticated).toBe('function');
|
|
451
|
+
});
|
|
452
|
+
});
|
|
453
|
+
describe('complete config', ()=>{
|
|
454
|
+
it('should handle a fully configured plugin', ()=>{
|
|
455
|
+
const fullConfig = {
|
|
456
|
+
access: mockAccessConfig,
|
|
457
|
+
addresses: {
|
|
458
|
+
addressFields: ({ defaultFields })=>defaultFields,
|
|
459
|
+
supportedCountries: [
|
|
460
|
+
{
|
|
461
|
+
label: 'US',
|
|
462
|
+
value: 'US'
|
|
463
|
+
}
|
|
464
|
+
]
|
|
465
|
+
},
|
|
466
|
+
carts: {
|
|
467
|
+
allowGuestCarts: true
|
|
468
|
+
},
|
|
469
|
+
currencies: {
|
|
470
|
+
defaultCurrency: 'EUR',
|
|
471
|
+
supportedCurrencies: [
|
|
472
|
+
USD,
|
|
473
|
+
EUR
|
|
474
|
+
]
|
|
475
|
+
},
|
|
476
|
+
customers: {
|
|
477
|
+
slug: 'customers'
|
|
478
|
+
},
|
|
479
|
+
inventory: {
|
|
480
|
+
fieldName: 'stock'
|
|
481
|
+
},
|
|
482
|
+
orders: true,
|
|
483
|
+
payments: {
|
|
484
|
+
paymentMethods: []
|
|
485
|
+
},
|
|
486
|
+
products: {
|
|
487
|
+
variants: true
|
|
488
|
+
},
|
|
489
|
+
slugMap: {
|
|
490
|
+
products: 'items'
|
|
491
|
+
},
|
|
492
|
+
transactions: true
|
|
493
|
+
};
|
|
494
|
+
const result = sanitizePluginConfig({
|
|
495
|
+
pluginConfig: fullConfig
|
|
496
|
+
});
|
|
497
|
+
expect(result.customers.slug).toBe('customers');
|
|
498
|
+
expect(result.currencies.defaultCurrency).toBe('EUR');
|
|
499
|
+
expect(result.inventory).toEqual({
|
|
500
|
+
fieldName: 'stock'
|
|
501
|
+
});
|
|
502
|
+
expect(result.carts).toHaveProperty('allowGuestCarts', true);
|
|
503
|
+
expect(result.orders).toBe(true);
|
|
504
|
+
expect(result.transactions).toBe(true);
|
|
505
|
+
expect(result.products).toEqual({
|
|
506
|
+
variants: true
|
|
507
|
+
});
|
|
508
|
+
expect(result.slugMap).toEqual({
|
|
509
|
+
products: 'items'
|
|
510
|
+
});
|
|
511
|
+
});
|
|
512
|
+
});
|
|
513
|
+
});
|
|
514
|
+
|
|
515
|
+
//# sourceMappingURL=sanitizePluginConfig.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/utilities/sanitizePluginConfig.spec.ts"],"sourcesContent":["import type { EcommercePluginConfig } from '../types/index.js'\n\nimport { EUR, USD } from '../currencies/index.js'\nimport { sanitizePluginConfig } from './sanitizePluginConfig'\n\ndescribe('sanitizePluginConfig', () => {\n const mockAccessConfig = {\n adminOnlyFieldAccess: jest.fn(),\n adminOrPublishedStatus: jest.fn(),\n customerOnlyFieldAccess: jest.fn(),\n isAdmin: jest.fn(),\n isAuthenticated: jest.fn(),\n isDocumentOwner: jest.fn(),\n }\n\n const minimalConfig: EcommercePluginConfig = {\n access: mockAccessConfig,\n customers: {\n slug: 'users',\n },\n }\n\n describe('customers', () => {\n it('should default customers slug to \"users\" when undefined', () => {\n const config: EcommercePluginConfig = {\n access: mockAccessConfig,\n customers: undefined as any,\n }\n\n const result = sanitizePluginConfig({ pluginConfig: config })\n\n expect(result.customers).toEqual({\n slug: 'users',\n })\n })\n\n it('should preserve custom customers slug', () => {\n const config: EcommercePluginConfig = {\n ...minimalConfig,\n customers: {\n slug: 'custom-users',\n },\n }\n\n const result = sanitizePluginConfig({ pluginConfig: config })\n\n expect(result.customers.slug).toBe('custom-users')\n })\n })\n\n describe('addresses', () => {\n it('should create default addresses config when undefined', () => {\n const result = sanitizePluginConfig({ pluginConfig: minimalConfig })\n\n expect(result.addresses).toBeDefined()\n expect(result.addresses.addressFields).toBeDefined()\n expect(Array.isArray(result.addresses.addressFields)).toBe(true)\n expect(result.addresses.addressFields.length).toBeGreaterThan(0)\n })\n\n it('should create default addresses config when set to true', () => {\n const config: EcommercePluginConfig = {\n ...minimalConfig,\n addresses: true,\n }\n\n const result = sanitizePluginConfig({ pluginConfig: config })\n\n expect(result.addresses).toBeDefined()\n expect(result.addresses.addressFields).toBeDefined()\n expect(Array.isArray(result.addresses.addressFields)).toBe(true)\n })\n\n it('should use custom addressFields function', () => {\n const customField = {\n name: 'customField',\n type: 'text' as const,\n }\n\n const config: EcommercePluginConfig = {\n ...minimalConfig,\n addresses: {\n addressFields: ({ defaultFields }) => [...defaultFields, customField],\n },\n }\n\n const result = sanitizePluginConfig({ pluginConfig: config })\n\n expect(result.addresses.addressFields).toBeDefined()\n const lastField = result.addresses.addressFields[result.addresses.addressFields.length - 1]\n expect(lastField).toEqual(customField)\n })\n\n it('should preserve other address config properties', () => {\n const config: EcommercePluginConfig = {\n ...minimalConfig,\n addresses: {\n addressFields: ({ defaultFields }) => defaultFields,\n supportedCountries: [\n { label: 'United States', value: 'US' },\n { label: 'Canada', value: 'CA' },\n ],\n },\n }\n\n const result = sanitizePluginConfig({ pluginConfig: config })\n\n expect(result.addresses.supportedCountries).toEqual([\n { label: 'United States', value: 'US' },\n { label: 'Canada', value: 'CA' },\n ])\n })\n })\n\n describe('currencies', () => {\n it('should default to USD when undefined', () => {\n const result = sanitizePluginConfig({ pluginConfig: minimalConfig })\n\n expect(result.currencies).toEqual({\n defaultCurrency: 'USD',\n supportedCurrencies: [USD],\n })\n })\n\n it('should preserve custom currencies config', () => {\n const config: EcommercePluginConfig = {\n ...minimalConfig,\n currencies: {\n defaultCurrency: 'EUR',\n supportedCurrencies: [USD, EUR],\n },\n }\n\n const result = sanitizePluginConfig({ pluginConfig: config })\n\n expect(result.currencies).toEqual({\n defaultCurrency: 'EUR',\n supportedCurrencies: [USD, EUR],\n })\n })\n })\n\n describe('inventory', () => {\n it('should default inventory config when undefined', () => {\n const result = sanitizePluginConfig({ pluginConfig: minimalConfig })\n\n expect(result.inventory).toEqual({\n fieldName: 'inventory',\n })\n })\n\n it('should default inventory config when set to true', () => {\n const config: EcommercePluginConfig = {\n ...minimalConfig,\n inventory: true,\n }\n\n const result = sanitizePluginConfig({ pluginConfig: config })\n\n expect(result.inventory).toEqual({\n fieldName: 'inventory',\n })\n })\n\n it('should preserve custom inventory config', () => {\n const config: EcommercePluginConfig = {\n ...minimalConfig,\n inventory: {\n fieldName: 'stock',\n },\n }\n\n const result = sanitizePluginConfig({ pluginConfig: config })\n\n expect(result.inventory).toEqual({\n fieldName: 'stock',\n })\n })\n\n it('should allow disabling inventory with false', () => {\n const config: EcommercePluginConfig = {\n ...minimalConfig,\n inventory: false,\n }\n\n const result = sanitizePluginConfig({ pluginConfig: config })\n\n expect(result.inventory).toBe(false)\n })\n })\n\n describe('carts', () => {\n it('should default carts to object with allowGuestCarts true when undefined', () => {\n const result = sanitizePluginConfig({ pluginConfig: minimalConfig })\n\n expect(result.carts).toEqual({\n allowGuestCarts: true,\n })\n })\n\n it('should convert carts true to object with allowGuestCarts true', () => {\n const config: EcommercePluginConfig = {\n ...minimalConfig,\n carts: true,\n }\n\n const result = sanitizePluginConfig({ pluginConfig: config })\n\n expect(result.carts).toEqual({\n allowGuestCarts: true,\n })\n })\n\n it('should preserve carts false', () => {\n const config: EcommercePluginConfig = {\n ...minimalConfig,\n carts: false,\n }\n\n const result = sanitizePluginConfig({ pluginConfig: config })\n\n expect(result.carts).toBe(false)\n })\n\n it('should default allowGuestCarts to true when carts is object without it', () => {\n const config: EcommercePluginConfig = {\n ...minimalConfig,\n carts: {} as any,\n }\n\n const result = sanitizePluginConfig({ pluginConfig: config })\n\n expect(result.carts).toEqual({\n allowGuestCarts: true,\n })\n })\n\n it('should preserve explicit allowGuestCarts false', () => {\n const config: EcommercePluginConfig = {\n ...minimalConfig,\n carts: {\n allowGuestCarts: false,\n },\n }\n\n const result = sanitizePluginConfig({ pluginConfig: config })\n\n expect(result.carts).toEqual({\n allowGuestCarts: false,\n })\n })\n\n it('should preserve other carts config properties', () => {\n const config: EcommercePluginConfig = {\n ...minimalConfig,\n carts: {\n allowGuestCarts: false,\n cartsCollectionOverride: jest.fn() as any,\n },\n }\n\n const result = sanitizePluginConfig({ pluginConfig: config })\n\n expect(result.carts).toHaveProperty('allowGuestCarts', false)\n expect(result.carts).toHaveProperty('cartsCollectionOverride')\n })\n })\n\n describe('orders', () => {\n it('should default orders to true when undefined', () => {\n const result = sanitizePluginConfig({ pluginConfig: minimalConfig })\n\n expect(result.orders).toBe(true)\n })\n\n it('should preserve orders config', () => {\n const config: EcommercePluginConfig = {\n ...minimalConfig,\n orders: false,\n }\n\n const result = sanitizePluginConfig({ pluginConfig: config })\n\n expect(result.orders).toBe(false)\n })\n })\n\n describe('transactions', () => {\n it('should default transactions to true when undefined', () => {\n const result = sanitizePluginConfig({ pluginConfig: minimalConfig })\n\n expect(result.transactions).toBe(true)\n })\n\n it('should preserve transactions config', () => {\n const config: EcommercePluginConfig = {\n ...minimalConfig,\n transactions: false,\n }\n\n const result = sanitizePluginConfig({ pluginConfig: config })\n\n expect(result.transactions).toBe(false)\n })\n })\n\n describe('payments', () => {\n it('should default payments to empty array when undefined', () => {\n const result = sanitizePluginConfig({ pluginConfig: minimalConfig })\n\n expect(result.payments).toEqual({\n paymentMethods: [],\n })\n })\n\n it('should default paymentMethods to empty array when not provided', () => {\n const config: EcommercePluginConfig = {\n ...minimalConfig,\n payments: {} as any,\n }\n\n const result = sanitizePluginConfig({ pluginConfig: config })\n\n expect(result.payments.paymentMethods).toEqual([])\n })\n\n it('should preserve payment methods', () => {\n const mockAdapter = {\n name: 'stripe',\n label: 'Stripe',\n } as any\n\n const config: EcommercePluginConfig = {\n ...minimalConfig,\n payments: {\n paymentMethods: [mockAdapter],\n },\n }\n\n const result = sanitizePluginConfig({ pluginConfig: config })\n\n expect(result.payments.paymentMethods).toEqual([mockAdapter])\n })\n })\n\n describe('products', () => {\n it('should default variants to true when products is object and variants is undefined', () => {\n const config: EcommercePluginConfig = {\n ...minimalConfig,\n products: {},\n }\n\n const result = sanitizePluginConfig({ pluginConfig: config })\n\n expect(result.products).toEqual({\n variants: true,\n })\n })\n\n it('should preserve variants config when provided', () => {\n const config: EcommercePluginConfig = {\n ...minimalConfig,\n products: {\n variants: false,\n },\n }\n\n const result = sanitizePluginConfig({ pluginConfig: config })\n\n expect(result.products).toEqual({\n variants: false,\n })\n })\n\n it('should not modify products when set to true', () => {\n const config: EcommercePluginConfig = {\n ...minimalConfig,\n products: true,\n }\n\n const result = sanitizePluginConfig({ pluginConfig: config })\n\n expect(result.products).toBe(true)\n })\n\n it('should not modify products when set to false', () => {\n const config: EcommercePluginConfig = {\n ...minimalConfig,\n products: false,\n }\n\n const result = sanitizePluginConfig({ pluginConfig: config })\n\n expect(result.products).toBe(false)\n })\n })\n\n describe('access', () => {\n it('should provide default isAuthenticated function', () => {\n const result = sanitizePluginConfig({ pluginConfig: minimalConfig })\n\n expect(result.access.isAuthenticated).toBeDefined()\n expect(typeof result.access.isAuthenticated).toBe('function')\n })\n\n it('should provide default publicAccess function', () => {\n const result = sanitizePluginConfig({ pluginConfig: minimalConfig })\n\n expect(result.access.publicAccess).toBeDefined()\n expect(typeof result.access.publicAccess).toBe('function')\n })\n\n it('should allow user-provided access functions to override defaults', () => {\n const customIsAuthenticated = jest.fn()\n const customPublicAccess = jest.fn()\n\n const config: EcommercePluginConfig = {\n ...minimalConfig,\n access: {\n ...mockAccessConfig,\n isAuthenticated: customIsAuthenticated,\n publicAccess: customPublicAccess,\n },\n }\n\n const result = sanitizePluginConfig({ pluginConfig: config })\n\n expect(result.access.isAuthenticated).toBe(customIsAuthenticated)\n expect(result.access.publicAccess).toBe(customPublicAccess)\n })\n\n it('should preserve all user-provided access functions', () => {\n const result = sanitizePluginConfig({ pluginConfig: minimalConfig })\n\n expect(result.access.adminOnlyFieldAccess).toBe(mockAccessConfig.adminOnlyFieldAccess)\n expect(result.access.adminOrPublishedStatus).toBe(mockAccessConfig.adminOrPublishedStatus)\n expect(result.access.customerOnlyFieldAccess).toBe(mockAccessConfig.customerOnlyFieldAccess)\n expect(result.access.isAdmin).toBe(mockAccessConfig.isAdmin)\n expect(result.access.isDocumentOwner).toBe(mockAccessConfig.isDocumentOwner)\n })\n\n it('default publicAccess should always return true', () => {\n const result = sanitizePluginConfig({ pluginConfig: minimalConfig })\n\n // @ts-expect-error - ignoring for test\n expect(result.access.publicAccess()).toBe(true)\n })\n\n it('default isAuthenticated should be provided', () => {\n const result = sanitizePluginConfig({ pluginConfig: minimalConfig })\n\n expect(result.access.isAuthenticated).toBeDefined()\n expect(typeof result.access.isAuthenticated).toBe('function')\n })\n })\n\n describe('complete config', () => {\n it('should handle a fully configured plugin', () => {\n const fullConfig: EcommercePluginConfig = {\n access: mockAccessConfig,\n addresses: {\n addressFields: ({ defaultFields }) => defaultFields,\n supportedCountries: [{ label: 'US', value: 'US' }],\n },\n carts: {\n allowGuestCarts: true,\n },\n currencies: {\n defaultCurrency: 'EUR',\n supportedCurrencies: [USD, EUR],\n },\n customers: {\n slug: 'customers',\n },\n inventory: {\n fieldName: 'stock',\n },\n orders: true,\n payments: {\n paymentMethods: [],\n },\n products: {\n variants: true,\n },\n slugMap: {\n products: 'items',\n },\n transactions: true,\n }\n\n const result = sanitizePluginConfig({ pluginConfig: fullConfig })\n\n expect(result.customers.slug).toBe('customers')\n expect(result.currencies.defaultCurrency).toBe('EUR')\n expect(result.inventory).toEqual({ fieldName: 'stock' })\n expect(result.carts).toHaveProperty('allowGuestCarts', true)\n expect(result.orders).toBe(true)\n expect(result.transactions).toBe(true)\n expect(result.products).toEqual({ variants: true })\n expect(result.slugMap).toEqual({ products: 'items' })\n })\n })\n})\n"],"names":["EUR","USD","sanitizePluginConfig","describe","mockAccessConfig","adminOnlyFieldAccess","jest","fn","adminOrPublishedStatus","customerOnlyFieldAccess","isAdmin","isAuthenticated","isDocumentOwner","minimalConfig","access","customers","slug","it","config","undefined","result","pluginConfig","expect","toEqual","toBe","addresses","toBeDefined","addressFields","Array","isArray","length","toBeGreaterThan","customField","name","type","defaultFields","lastField","supportedCountries","label","value","currencies","defaultCurrency","supportedCurrencies","inventory","fieldName","carts","allowGuestCarts","cartsCollectionOverride","toHaveProperty","orders","transactions","payments","paymentMethods","mockAdapter","products","variants","publicAccess","customIsAuthenticated","customPublicAccess","fullConfig","slugMap"],"mappings":"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"}
|