@yoryoboy/bi-mcp 1.14.0 → 1.14.3
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/.tsbuildinfo +1 -1
- package/dist/index.js +3 -3
- package/dist/index.js.map +1 -1
- package/dist/mcp-use.json +2 -2
- package/dist/src/services/vtex/__tests__/vtex-catalog.test.js +2 -5
- package/dist/src/services/vtex/__tests__/vtex-catalog.test.js.map +2 -2
- package/dist/src/services/vtex/__tests__/vtex-payments.test.js +12 -9
- package/dist/src/services/vtex/__tests__/vtex-payments.test.js.map +2 -2
- package/dist/src/services/vtex/vtex-catalog.js +1 -1
- package/dist/src/services/vtex/vtex-catalog.js.map +2 -2
- package/dist/src/services/vtex/vtex-payments.js +11 -5
- package/dist/src/services/vtex/vtex-payments.js.map +2 -2
- package/dist/src/tools/vtex/__tests__/catalog-navigation-reads.test.js +21 -2
- package/dist/src/tools/vtex/__tests__/catalog-navigation-reads.test.js.map +2 -2
- package/dist/src/tools/vtex/__tests__/commercial-conditions.test.js +4 -173
- package/dist/src/tools/vtex/__tests__/commercial-conditions.test.js.map +2 -2
- package/dist/src/tools/vtex/__tests__/payment-rules.test.js +1 -0
- package/dist/src/tools/vtex/__tests__/payment-rules.test.js.map +2 -2
- package/dist/src/tools/vtex/catalog-admin-products-skus.js +1 -1
- package/dist/src/tools/vtex/catalog-admin-products-skus.js.map +1 -1
- package/dist/src/tools/vtex/catalog-navigation-reads.js +1 -1
- package/dist/src/tools/vtex/catalog-navigation-reads.js.map +2 -2
- package/dist/src/tools/vtex/commercial-conditions.js +35 -150
- package/dist/src/tools/vtex/commercial-conditions.js.map +2 -2
- package/dist/src/tools/vtex/create-sku.js +1 -1
- package/dist/src/tools/vtex/create-sku.js.map +1 -1
- package/dist/src/tools/vtex/payment-rules.js +81 -38
- package/dist/src/tools/vtex/payment-rules.js.map +2 -2
- package/dist/tests/vtex/vtex-commercial-conditions-docs.test.js +12 -4
- package/dist/tests/vtex/vtex-commercial-conditions-docs.test.js.map +2 -2
- package/dist/tests/vtex/vtex-commercial-conditions-surface.test.js +121 -12
- package/dist/tests/vtex/vtex-commercial-conditions-surface.test.js.map +2 -2
- package/dist/tests/vtex/vtex-commercial-conditions-workflow.test.js +15 -23
- package/dist/tests/vtex/vtex-commercial-conditions-workflow.test.js.map +2 -2
- package/package.json +1 -1
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/services/vtex/vtex-catalog.ts"],
|
|
4
|
-
"sourcesContent": ["import { getVtexApiClients } from \"./vtex-api.js\";\n\nexport type ProductOffersResponse = Record<string, unknown>[];\nexport type VtexCatalogRecord = Record<string, unknown>;\n\nexport interface VtexCatalogListResponse<TRecord extends VtexCatalogRecord = VtexCatalogRecord> {\n items: TRecord[];\n total: number;\n}\n\nexport interface VtexProductIdListResponse {\n productIds: Array<string | number>;\n total: number;\n}\n\nfunction readTotalFromHeaders(headers: unknown, fallback: number): number {\n if (!headers || typeof headers !== \"object\") {\n return fallback;\n }\n\n const record = headers as Record<string, unknown>;\n const rawRange = record.resources ?? record[\"content-range\"] ?? record[\"Content-Range\"];\n const range = Array.isArray(rawRange) ? rawRange[0] : rawRange;\n\n if (typeof range !== \"string\") {\n return fallback;\n }\n\n const match = range.match(/\\/(\\d+)$/);\n if (!match) {\n return fallback;\n }\n\n const total = Number(match[1]);\n return Number.isFinite(total) ? total : fallback;\n}\n\nfunction toRecordArray(data: unknown): VtexCatalogRecord[] {\n if (!Array.isArray(data)) {\n return [];\n }\n\n return data.filter((item): item is VtexCatalogRecord => item !== null && typeof item === \"object\");\n}\n\nfunction toProductIds(data: unknown): Array<string | number> {\n if (Array.isArray(data)) {\n return data.filter((item): item is string | number => typeof item === \"string\" || typeof item === \"number\");\n }\n\n if (data && typeof data === \"object\") {\n return Object.keys(data);\n }\n\n return [];\n}\n\nfunction readTotal(data: unknown, fallback: number): number {\n if (!data || typeof data !== \"object\") {\n return fallback;\n }\n\n const record = data as Record<string, unknown>;\n const range = record.range;\n if (range && typeof range === \"object\") {\n const total = (range as Record<string, unknown>).total;\n if (typeof total === \"number\") {\n return total;\n }\n }\n\n if (typeof record.total === \"number\") {\n return record.total;\n }\n\n return fallback;\n}\n\nexport async function getCategoryTree(\n profileId: string,\n depth = 5\n): Promise<VtexCatalogRecord[]> {\n const { vtexApi } = await getVtexApiClients(profileId);\n const response = await vtexApi.get<unknown>(`/api/catalog_system/pub/category/tree/${depth}`);\n\n return toRecordArray(response.data);\n}\n\nexport async function listCategories(\n profileId: string,\n page: number,\n pageSize: number\n): Promise<VtexCatalogListResponse> {\n const { vtexApi } = await getVtexApiClients(profileId);\n const response = await vtexApi.get<unknown>(\"/api/catalog_system/pvt/category/list\", {\n params: { page, pageSize },\n });\n const items = toRecordArray(response.data);\n\n return { items, total: readTotal(response.data, items.length) };\n}\n\nexport async function listBrands(\n profileId: string,\n page: number,\n pageSize: number\n): Promise<VtexCatalogListResponse> {\n const { vtexApi } = await getVtexApiClients(profileId);\n const response = await vtexApi.get<unknown>(\"/api/catalog_system/pvt/brand/list\", {\n params: { page, pageSize },\n });\n const items = toRecordArray(response.data);\n\n return { items, total: readTotal(response.data, items.length) };\n}\n\nexport async function listSpecificationGroupsByCategory(\n profileId: string,\n categoryId: string\n): Promise<VtexCatalogRecord[]> {\n const { vtexApi } = await getVtexApiClients(profileId);\n const response = await vtexApi.get<unknown>(\n `/api/catalog_system/pvt/specification/groupbycategory/${categoryId}`\n );\n\n return toRecordArray(response.data);\n}\n\nexport async function listProducts(\n profileId: string,\n from: number,\n to: number,\n keyword?: string\n): Promise<VtexProductIdListResponse> {\n const { vtexApi } = await getVtexApiClients(profileId);\n const response = await vtexApi.get<unknown>(\"/api/catalog_system/pvt/products/GetProductAndSkuIds\", {\n params: {\n _from: from,\n _to: to,\n keyword,\n },\n });\n const data = response.data && typeof response.data === \"object\" && \"data\" in response.data\n ? (response.data as Record<string, unknown>).data\n : response.data;\n const productIds = toProductIds(data);\n\n return { productIds, total: readTotal(response.data, productIds.length) };\n}\n\nexport async function listProductsByCategory(\n profileId: string,\n categoryId: string,\n from: number,\n to: number\n): Promise<VtexCatalogListResponse> {\n const { vtexApi } = await getVtexApiClients(profileId);\n const response = await vtexApi.get<unknown>(\"/api/catalog_system/pub/products/search\", {\n params: {\n
|
|
5
|
-
"mappings": "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
|
|
4
|
+
"sourcesContent": ["import { getVtexApiClients } from \"./vtex-api.js\";\n\nexport type ProductOffersResponse = Record<string, unknown>[];\nexport type VtexCatalogRecord = Record<string, unknown>;\n\nexport interface VtexCatalogListResponse<TRecord extends VtexCatalogRecord = VtexCatalogRecord> {\n items: TRecord[];\n total: number;\n}\n\nexport interface VtexProductIdListResponse {\n productIds: Array<string | number>;\n total: number;\n}\n\nfunction readTotalFromHeaders(headers: unknown, fallback: number): number {\n if (!headers || typeof headers !== \"object\") {\n return fallback;\n }\n\n const record = headers as Record<string, unknown>;\n const rawRange = record.resources ?? record[\"content-range\"] ?? record[\"Content-Range\"];\n const range = Array.isArray(rawRange) ? rawRange[0] : rawRange;\n\n if (typeof range !== \"string\") {\n return fallback;\n }\n\n const match = range.match(/\\/(\\d+)$/);\n if (!match) {\n return fallback;\n }\n\n const total = Number(match[1]);\n return Number.isFinite(total) ? total : fallback;\n}\n\nfunction toRecordArray(data: unknown): VtexCatalogRecord[] {\n if (!Array.isArray(data)) {\n return [];\n }\n\n return data.filter((item): item is VtexCatalogRecord => item !== null && typeof item === \"object\");\n}\n\nfunction toProductIds(data: unknown): Array<string | number> {\n if (Array.isArray(data)) {\n return data.filter((item): item is string | number => typeof item === \"string\" || typeof item === \"number\");\n }\n\n if (data && typeof data === \"object\") {\n return Object.keys(data);\n }\n\n return [];\n}\n\nfunction readTotal(data: unknown, fallback: number): number {\n if (!data || typeof data !== \"object\") {\n return fallback;\n }\n\n const record = data as Record<string, unknown>;\n const range = record.range;\n if (range && typeof range === \"object\") {\n const total = (range as Record<string, unknown>).total;\n if (typeof total === \"number\") {\n return total;\n }\n }\n\n if (typeof record.total === \"number\") {\n return record.total;\n }\n\n return fallback;\n}\n\nexport async function getCategoryTree(\n profileId: string,\n depth = 5\n): Promise<VtexCatalogRecord[]> {\n const { vtexApi } = await getVtexApiClients(profileId);\n const response = await vtexApi.get<unknown>(`/api/catalog_system/pub/category/tree/${depth}`);\n\n return toRecordArray(response.data);\n}\n\nexport async function listCategories(\n profileId: string,\n page: number,\n pageSize: number\n): Promise<VtexCatalogListResponse> {\n const { vtexApi } = await getVtexApiClients(profileId);\n const response = await vtexApi.get<unknown>(\"/api/catalog_system/pvt/category/list\", {\n params: { page, pageSize },\n });\n const items = toRecordArray(response.data);\n\n return { items, total: readTotal(response.data, items.length) };\n}\n\nexport async function listBrands(\n profileId: string,\n page: number,\n pageSize: number\n): Promise<VtexCatalogListResponse> {\n const { vtexApi } = await getVtexApiClients(profileId);\n const response = await vtexApi.get<unknown>(\"/api/catalog_system/pvt/brand/list\", {\n params: { page, pageSize },\n });\n const items = toRecordArray(response.data);\n\n return { items, total: readTotal(response.data, items.length) };\n}\n\nexport async function listSpecificationGroupsByCategory(\n profileId: string,\n categoryId: string\n): Promise<VtexCatalogRecord[]> {\n const { vtexApi } = await getVtexApiClients(profileId);\n const response = await vtexApi.get<unknown>(\n `/api/catalog_system/pvt/specification/groupbycategory/${categoryId}`\n );\n\n return toRecordArray(response.data);\n}\n\nexport async function listProducts(\n profileId: string,\n from: number,\n to: number,\n keyword?: string\n): Promise<VtexProductIdListResponse> {\n const { vtexApi } = await getVtexApiClients(profileId);\n const response = await vtexApi.get<unknown>(\"/api/catalog_system/pvt/products/GetProductAndSkuIds\", {\n params: {\n _from: from,\n _to: to,\n keyword,\n },\n });\n const data = response.data && typeof response.data === \"object\" && \"data\" in response.data\n ? (response.data as Record<string, unknown>).data\n : response.data;\n const productIds = toProductIds(data);\n\n return { productIds, total: readTotal(response.data, productIds.length) };\n}\n\nexport async function listProductsByCategory(\n profileId: string,\n categoryId: string,\n from: number,\n to: number\n): Promise<VtexCatalogListResponse> {\n const { vtexApi } = await getVtexApiClients(profileId);\n const response = await vtexApi.get<unknown>(\"/api/catalog_system/pub/products/search\", {\n params: {\n fq: `C:/${categoryId}/`,\n _from: from,\n _to: to,\n },\n });\n const items = toRecordArray(response.data);\n const totalFromHeaders = readTotalFromHeaders(response.headers, items.length);\n\n return { items, total: readTotal(response.data, totalFromHeaders) };\n}\n\nexport async function listSkusByProduct(\n profileId: string,\n productId: string\n): Promise<VtexCatalogRecord[]> {\n const { vtexApi } = await getVtexApiClients(profileId);\n const response = await vtexApi.get<unknown>(\n `/api/catalog_system/pvt/sku/stockkeepingunitByProductId/${productId}`\n );\n\n return toRecordArray(response.data);\n}\n\nexport async function getProductOffers(\n profileId: string,\n productId: string\n): Promise<ProductOffersResponse> {\n const { vtexApi } = await getVtexApiClients(profileId);\n const response = await vtexApi.get<ProductOffersResponse>(\n `/api/catalog_system/pub/products/offers/${productId}`\n );\n\n return response.data;\n}\n\nexport async function getSkuOffers(\n profileId: string,\n productId: string,\n skuId: string\n): Promise<ProductOffersResponse> {\n const { vtexApi } = await getVtexApiClients(profileId);\n const response = await vtexApi.get<ProductOffersResponse>(\n `/api/catalog_system/pub/products/offers/${productId}/sku/${skuId}`\n );\n\n return response.data;\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -8,17 +8,23 @@ function toRecordArray(data) {
|
|
|
8
8
|
function normalizeCommercialConditionId(value) {
|
|
9
9
|
return String(value);
|
|
10
10
|
}
|
|
11
|
+
function matchesCommercialConditionSearch(record, search) {
|
|
12
|
+
if (!search) {
|
|
13
|
+
return true;
|
|
14
|
+
}
|
|
15
|
+
const normalizedSearch = search.trim().toLowerCase();
|
|
16
|
+
const name = [record.name, record.Name].find((value) => typeof value === "string");
|
|
17
|
+
return typeof name === "string" && name.toLowerCase().includes(normalizedSearch);
|
|
18
|
+
}
|
|
11
19
|
async function listCommercialConditions(profileId, search) {
|
|
12
20
|
const { vtexApi } = await getVtexApiClients(profileId);
|
|
13
|
-
const response = await vtexApi.get("/api/
|
|
14
|
-
|
|
15
|
-
});
|
|
16
|
-
return toRecordArray(response.data);
|
|
21
|
+
const response = await vtexApi.get("/api/catalog_system/pvt/commercialcondition/list");
|
|
22
|
+
return toRecordArray(response.data).filter((record) => matchesCommercialConditionSearch(record, search));
|
|
17
23
|
}
|
|
18
24
|
async function getCommercialCondition(profileId, commercialConditionId) {
|
|
19
25
|
const { vtexApi } = await getVtexApiClients(profileId);
|
|
20
26
|
const response = await vtexApi.get(
|
|
21
|
-
`/api/
|
|
27
|
+
`/api/catalog_system/pvt/commercialcondition/${normalizeCommercialConditionId(commercialConditionId)}`
|
|
22
28
|
);
|
|
23
29
|
return response.data;
|
|
24
30
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/services/vtex/vtex-payments.ts"],
|
|
4
|
-
"sourcesContent": ["import { getVtexApiClients } from \"./vtex-api.js\";\n\nexport type VtexPaymentRecord = Record<string, unknown>;\n\nfunction toRecordArray(data: unknown): VtexPaymentRecord[] {\n if (!Array.isArray(data)) {\n return [];\n }\n\n return data.filter((item): item is VtexPaymentRecord => item !== null && typeof item === \"object\");\n}\n\nfunction normalizeCommercialConditionId(value: number): string {\n return String(value);\n}\n\nexport async function listCommercialConditions(\n profileId: string,\n search?: string\n): Promise<VtexPaymentRecord[]> {\n const { vtexApi } = await getVtexApiClients(profileId);\n const response = await vtexApi.get<unknown>(\"/api/
|
|
5
|
-
"mappings": "AAAA,SAAS,yBAAyB;AAIlC,SAAS,cAAc,MAAoC;AACzD,MAAI,CAAC,MAAM,QAAQ,IAAI,GAAG;AACxB,WAAO,CAAC;AAAA,EACV;AAEA,SAAO,KAAK,OAAO,CAAC,SAAoC,SAAS,QAAQ,OAAO,SAAS,QAAQ;AACnG;AAEA,SAAS,+BAA+B,OAAuB;AAC7D,SAAO,OAAO,KAAK;AACrB;AAEA,eAAsB,yBACpB,WACA,QAC8B;AAC9B,QAAM,EAAE,QAAQ,IAAI,MAAM,kBAAkB,SAAS;AACrD,QAAM,WAAW,MAAM,QAAQ,IAAa,
|
|
4
|
+
"sourcesContent": ["import { getVtexApiClients } from \"./vtex-api.js\";\n\nexport type VtexPaymentRecord = Record<string, unknown>;\n\nfunction toRecordArray(data: unknown): VtexPaymentRecord[] {\n if (!Array.isArray(data)) {\n return [];\n }\n\n return data.filter((item): item is VtexPaymentRecord => item !== null && typeof item === \"object\");\n}\n\nfunction normalizeCommercialConditionId(value: number): string {\n return String(value);\n}\n\nfunction matchesCommercialConditionSearch(record: VtexPaymentRecord, search?: string): boolean {\n if (!search) {\n return true;\n }\n\n const normalizedSearch = search.trim().toLowerCase();\n const name = [record.name, record.Name].find((value): value is string => typeof value === \"string\");\n\n return typeof name === \"string\" && name.toLowerCase().includes(normalizedSearch);\n}\n\nexport async function listCommercialConditions(\n profileId: string,\n search?: string\n): Promise<VtexPaymentRecord[]> {\n const { vtexApi } = await getVtexApiClients(profileId);\n const response = await vtexApi.get<unknown>(\"/api/catalog_system/pvt/commercialcondition/list\");\n\n return toRecordArray(response.data).filter((record) => matchesCommercialConditionSearch(record, search));\n}\n\nexport async function getCommercialCondition(\n profileId: string,\n commercialConditionId: number\n): Promise<VtexPaymentRecord> {\n const { vtexApi } = await getVtexApiClients(profileId);\n const response = await vtexApi.get<VtexPaymentRecord>(\n `/api/catalog_system/pvt/commercialcondition/${normalizeCommercialConditionId(commercialConditionId)}`\n );\n\n return response.data;\n}\n\nexport async function listPaymentRules(\n profileId: string,\n filters?: { commercialConditionId?: number }\n): Promise<VtexPaymentRecord[]> {\n const { vtexApi } = await getVtexApiClients(profileId);\n const response = await vtexApi.get<unknown>(\"/api/pvt/rules\", {\n params:\n filters?.commercialConditionId === undefined\n ? undefined\n : { commercialConditionId: normalizeCommercialConditionId(filters.commercialConditionId) },\n });\n\n return toRecordArray(response.data);\n}\n\nexport async function getPaymentRule(profileId: string, ruleId: number): Promise<VtexPaymentRecord> {\n const { vtexApi } = await getVtexApiClients(profileId);\n const response = await vtexApi.get<VtexPaymentRecord>(`/api/pvt/rules/${ruleId}`);\n\n return response.data;\n}\n"],
|
|
5
|
+
"mappings": "AAAA,SAAS,yBAAyB;AAIlC,SAAS,cAAc,MAAoC;AACzD,MAAI,CAAC,MAAM,QAAQ,IAAI,GAAG;AACxB,WAAO,CAAC;AAAA,EACV;AAEA,SAAO,KAAK,OAAO,CAAC,SAAoC,SAAS,QAAQ,OAAO,SAAS,QAAQ;AACnG;AAEA,SAAS,+BAA+B,OAAuB;AAC7D,SAAO,OAAO,KAAK;AACrB;AAEA,SAAS,iCAAiC,QAA2B,QAA0B;AAC7F,MAAI,CAAC,QAAQ;AACX,WAAO;AAAA,EACT;AAEA,QAAM,mBAAmB,OAAO,KAAK,EAAE,YAAY;AACnD,QAAM,OAAO,CAAC,OAAO,MAAM,OAAO,IAAI,EAAE,KAAK,CAAC,UAA2B,OAAO,UAAU,QAAQ;AAElG,SAAO,OAAO,SAAS,YAAY,KAAK,YAAY,EAAE,SAAS,gBAAgB;AACjF;AAEA,eAAsB,yBACpB,WACA,QAC8B;AAC9B,QAAM,EAAE,QAAQ,IAAI,MAAM,kBAAkB,SAAS;AACrD,QAAM,WAAW,MAAM,QAAQ,IAAa,kDAAkD;AAE9F,SAAO,cAAc,SAAS,IAAI,EAAE,OAAO,CAAC,WAAW,iCAAiC,QAAQ,MAAM,CAAC;AACzG;AAEA,eAAsB,uBACpB,WACA,uBAC4B;AAC5B,QAAM,EAAE,QAAQ,IAAI,MAAM,kBAAkB,SAAS;AACrD,QAAM,WAAW,MAAM,QAAQ;AAAA,IAC7B,+CAA+C,+BAA+B,qBAAqB,CAAC;AAAA,EACtG;AAEA,SAAO,SAAS;AAClB;AAEA,eAAsB,iBACpB,WACA,SAC8B;AAC9B,QAAM,EAAE,QAAQ,IAAI,MAAM,kBAAkB,SAAS;AACrD,QAAM,WAAW,MAAM,QAAQ,IAAa,kBAAkB;AAAA,IAC5D,QACE,SAAS,0BAA0B,SAC/B,SACA,EAAE,uBAAuB,+BAA+B,QAAQ,qBAAqB,EAAE;AAAA,EAC/F,CAAC;AAED,SAAO,cAAc,SAAS,IAAI;AACpC;AAEA,eAAsB,eAAe,WAAmB,QAA4C;AAClG,QAAM,EAAE,QAAQ,IAAI,MAAM,kBAAkB,SAAS;AACrD,QAAM,WAAW,MAAM,QAAQ,IAAuB,kBAAkB,MAAM,EAAE;AAEhF,SAAO,SAAS;AAClB;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -293,6 +293,21 @@ describe("catalog navigation read wrappers", () => {
|
|
|
293
293
|
brandId: 7,
|
|
294
294
|
categoryId: "23",
|
|
295
295
|
productReference: "RUN-001"
|
|
296
|
+
},
|
|
297
|
+
{
|
|
298
|
+
productId: "102",
|
|
299
|
+
productName: "Trail",
|
|
300
|
+
brand: "Acme",
|
|
301
|
+
brandId: 7,
|
|
302
|
+
categoryId: "999",
|
|
303
|
+
productReference: "TRL-002"
|
|
304
|
+
},
|
|
305
|
+
{
|
|
306
|
+
productId: "103",
|
|
307
|
+
productName: "No Category",
|
|
308
|
+
brand: "Acme",
|
|
309
|
+
brandId: 7,
|
|
310
|
+
productReference: "NC-003"
|
|
296
311
|
}
|
|
297
312
|
],
|
|
298
313
|
total: 12
|
|
@@ -338,7 +353,7 @@ describe("catalog navigation read wrappers", () => {
|
|
|
338
353
|
total: 12,
|
|
339
354
|
page: 2,
|
|
340
355
|
pageSize: 25,
|
|
341
|
-
returned:
|
|
356
|
+
returned: 3,
|
|
342
357
|
has_more: false
|
|
343
358
|
},
|
|
344
359
|
profile_id: "profile-1",
|
|
@@ -351,7 +366,11 @@ describe("catalog navigation read wrappers", () => {
|
|
|
351
366
|
"category_id",
|
|
352
367
|
"product_reference"
|
|
353
368
|
],
|
|
354
|
-
rows: [
|
|
369
|
+
rows: [
|
|
370
|
+
["101", "Runner", "Acme", 7, "23", "RUN-001"],
|
|
371
|
+
["102", "Trail", "Acme", 7, "999", "TRL-002"],
|
|
372
|
+
["103", "No Category", "Acme", 7, null, "NC-003"]
|
|
373
|
+
]
|
|
355
374
|
}
|
|
356
375
|
});
|
|
357
376
|
expect(skus).toEqual({
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../src/tools/vtex/__tests__/catalog-navigation-reads.test.ts"],
|
|
4
|
-
"sourcesContent": ["import { beforeEach, describe, expect, it, vi } from \"vitest\";\n\nconst getCategoryTreeMock = vi.fn();\nconst listCategoriesMock = vi.fn();\nconst listBrandsMock = vi.fn();\nconst listSpecificationGroupsByCategoryMock = vi.fn();\nconst listProductsMock = vi.fn();\nconst listProductsByCategoryMock = vi.fn();\nconst listSkusByProductMock = vi.fn();\nconst getBrandMock = vi.fn();\nconst getCategoryMock = vi.fn();\nconst getProductMock = vi.fn();\nconst getProductSpecificationsMock = vi.fn();\nconst getSkuMock = vi.fn();\nconst resolveVtexProfileOrSelectionMock = vi.fn();\nconst objectMock = vi.fn((value) => ({ kind: \"object\", value }));\nconst errorMock = vi.fn((message) => ({ kind: \"error\", message }));\n\nvi.mock(\"mcp-use/server\", () => ({\n object: objectMock,\n error: errorMock,\n}));\n\nvi.mock(\"../../../services/vtex/vtex-catalog.js\", () => ({\n getCategoryTree: getCategoryTreeMock,\n listCategories: listCategoriesMock,\n listBrands: listBrandsMock,\n listSpecificationGroupsByCategory: listSpecificationGroupsByCategoryMock,\n listProducts: listProductsMock,\n listProductsByCategory: listProductsByCategoryMock,\n listSkusByProduct: listSkusByProductMock,\n}));\n\nvi.mock(\"../../../services/vtex/vtex-catalog-write.js\", () => ({\n getBrand: getBrandMock,\n getCategory: getCategoryMock,\n getProduct: getProductMock,\n getProductSpecifications: getProductSpecificationsMock,\n getSku: getSkuMock,\n}));\n\nvi.mock(\"../profile-resolution.js\", () => ({\n resolveVtexProfileOrSelection: resolveVtexProfileOrSelectionMock,\n}));\n\nconst sharedModule = await import(\"../catalog-navigation-reads.js\");\nconst getCategoryTreeModule = await import(\"../get-category-tree.js\");\nconst listCategoriesModule = await import(\"../list-categories.js\");\nconst getCategoryModule = await import(\"../get-category.js\");\nconst getBrandModule = await import(\"../get-brand.js\");\nconst listBrandsModule = await import(\"../list-brands.js\");\nconst listSpecificationGroupsModule = await import(\"../list-specification-groups.js\");\nconst getProductModule = await import(\"../get-product.js\");\nconst getProductSpecificationsModule = await import(\"../get-product-specifications.js\");\nconst listProductsModule = await import(\"../list-products.js\");\nconst listProductsByCategoryModule = await import(\"../list-products-by-category.js\");\nconst getSkuModule = await import(\"../get-sku.js\");\nconst listSkusByProductModule = await import(\"../list-skus-by-product.js\");\n\ndescribe(\"catalog navigation read wrappers\", () => {\n beforeEach(() => {\n vi.clearAllMocks();\n resolveVtexProfileOrSelectionMock.mockResolvedValue({\n ok: true,\n value: { profileId: \"profile-1\" },\n });\n });\n\n it(\"keeps stable public exports delegated to the shared module\", () => {\n expect(getCategoryTreeModule.getCategoryTreeSchema).toBe(sharedModule.getCategoryTreeSchema);\n expect(getCategoryTreeModule.getCategoryTreeHandler).toBe(sharedModule.getCategoryTreeHandler);\n expect(listCategoriesModule.listCategoriesSchema).toBe(sharedModule.listCategoriesSchema);\n expect(listCategoriesModule.listCategoriesHandler).toBe(sharedModule.listCategoriesHandler);\n expect(getCategoryModule.getCategorySchema).toBe(sharedModule.getCategorySchema);\n expect(getCategoryModule.getCategoryHandler).toBe(sharedModule.getCategoryHandler);\n expect(getBrandModule.getBrandSchema).toBe(sharedModule.getBrandSchema);\n expect(getBrandModule.getBrandHandler).toBe(sharedModule.getBrandHandler);\n expect(listBrandsModule.listBrandsSchema).toBe(sharedModule.listBrandsSchema);\n expect(listBrandsModule.listBrandsHandler).toBe(sharedModule.listBrandsHandler);\n expect(listSpecificationGroupsModule.listSpecificationGroupsSchema).toBe(\n sharedModule.listSpecificationGroupsSchema\n );\n expect(listSpecificationGroupsModule.listSpecificationGroupsHandler).toBe(\n sharedModule.listSpecificationGroupsHandler\n );\n expect(getProductModule.getProductSchema).toBe(sharedModule.getProductSchema);\n expect(getProductModule.getProductHandler).toBe(sharedModule.getProductHandler);\n expect(getProductSpecificationsModule.getProductSpecificationsSchema).toBe(\n sharedModule.getProductSpecificationsSchema\n );\n expect(getProductSpecificationsModule.getProductSpecificationsHandler).toBe(\n sharedModule.getProductSpecificationsHandler\n );\n expect(listProductsModule.listProductsSchema).toBe(sharedModule.listProductsSchema);\n expect(listProductsModule.listProductsHandler).toBe(sharedModule.listProductsHandler);\n expect(listProductsByCategoryModule.listProductsByCategorySchema).toBe(\n sharedModule.listProductsByCategorySchema\n );\n expect(listProductsByCategoryModule.listProductsByCategoryHandler).toBe(\n sharedModule.listProductsByCategoryHandler\n );\n expect(getSkuModule.getSkuSchema).toBe(sharedModule.getSkuSchema);\n expect(getSkuModule.getSkuHandler).toBe(sharedModule.getSkuHandler);\n expect(listSkusByProductModule.listSkusByProductSchema).toBe(sharedModule.listSkusByProductSchema);\n expect(listSkusByProductModule.listSkusByProductHandler).toBe(sharedModule.listSkusByProductHandler);\n });\n\n it(\"validates profile and catalog identifiers\", () => {\n expect(() => sharedModule.getCategorySchema.parse({ profileId: \" \", categoryId: \"10\" })).toThrow();\n expect(() => sharedModule.getBrandSchema.parse({ profileId: \"profile-1\", brandId: \"\" })).toThrow();\n expect(() => sharedModule.listSpecificationGroupsSchema.parse({ categoryId: \"\" })).toThrow();\n expect(() => sharedModule.getProductSchema.parse({ profileId: \"profile-1\", productId: \"\" })).toThrow();\n expect(() =>\n sharedModule.listProductsByCategorySchema.parse({ profileId: \"profile-1\", categoryId: \"\" })\n ).toThrow();\n expect(() =>\n sharedModule.getProductSpecificationsSchema.parse({ profileId: \"profile-1\", productId: \"\" })\n ).toThrow();\n expect(() => sharedModule.getSkuSchema.parse({ profileId: \"profile-1\", skuId: \"\" })).toThrow();\n expect(() =>\n sharedModule.listSkusByProductSchema.parse({ profileId: \"profile-1\", productId: \"\" })\n ).toThrow();\n });\n\n it(\"enforces the real VTEX category product page size cap\", () => {\n expect(\n sharedModule.listProductsByCategorySchema.parse({\n profileId: \"profile-1\",\n categoryId: \"23\",\n page: 1,\n pageSize: 50,\n })\n ).toEqual({\n profileId: \"profile-1\",\n categoryId: \"23\",\n page: 1,\n pageSize: 50,\n });\n\n expect(() =>\n sharedModule.listProductsByCategorySchema.parse({\n profileId: \"profile-1\",\n categoryId: \"23\",\n page: 1,\n pageSize: 51,\n })\n ).toThrow();\n });\n\n it(\"delegates category tree reads with the default VTEX depth\", async () => {\n getCategoryTreeMock.mockResolvedValue([{ id: 1, name: \"Root\", children: [{ id: 2, name: \"Child\" }] }]);\n\n const result = await sharedModule.getCategoryTreeHandler({ profileId: \"profile-1\" });\n\n expect(resolveVtexProfileOrSelectionMock).toHaveBeenCalledWith(\"profile-1\");\n expect(getCategoryTreeMock).toHaveBeenCalledWith(\"profile-1\", 5);\n expect(result).toEqual({\n kind: \"object\",\n value: {\n profile_id: \"profile-1\",\n depth: 5,\n categories: [{ id: 1, name: \"Root\", children: [{ id: 2, name: \"Child\" }] }],\n },\n });\n });\n\n it(\"returns the profile-selection response instead of silently defaulting when profileId is omitted\", async () => {\n resolveVtexProfileOrSelectionMock.mockResolvedValueOnce({\n ok: false,\n response: { selection_required: true, profiles: [{ id: \"profile-1\" }] },\n });\n\n const result = await sharedModule.getCategoryTreeHandler({});\n\n expect(resolveVtexProfileOrSelectionMock).toHaveBeenCalledWith(undefined);\n expect(getCategoryTreeMock).not.toHaveBeenCalled();\n expect(result).toEqual({ selection_required: true, profiles: [{ id: \"profile-1\" }] });\n });\n\n it(\"delegates shallow category tree reads with depth=1\", async () => {\n getCategoryTreeMock.mockResolvedValue([{ id: 1, name: \"Root\" }]);\n\n const result = await sharedModule.getCategoryTreeHandler({ profileId: \"profile-1\", depth: 1 });\n\n expect(getCategoryTreeMock).toHaveBeenCalledWith(\"profile-1\", 1);\n expect(result).toEqual({\n kind: \"object\",\n value: {\n profile_id: \"profile-1\",\n depth: 1,\n categories: [{ id: 1, name: \"Root\" }],\n },\n });\n });\n\n it(\"formats category and brand lists as compact rows with continuation metadata\", async () => {\n listCategoriesMock.mockResolvedValue({\n items: [\n { Id: 10, Name: \"Shoes\", FatherCategoryId: null, IsActive: true, ShowInStoreFront: true },\n { Id: 11, Name: \"Boots\", FatherCategoryId: 10, IsActive: false, ShowInStoreFront: false },\n ],\n total: 5,\n });\n listBrandsMock.mockResolvedValue({\n items: [{ Id: 7, Name: \"Acme\", Active: true, MenuHome: false }],\n total: 1,\n });\n\n const categories = await sharedModule.listCategoriesHandler({\n profileId: \"profile-1\",\n page: 1,\n pageSize: 2,\n });\n const brands = await sharedModule.listBrandsHandler({ profileId: \"profile-1\", page: 1, pageSize: 25 });\n\n expect(listCategoriesMock).toHaveBeenCalledWith(\"profile-1\", 1, 2);\n expect(categories).toEqual({\n kind: \"object\",\n value: {\n metadata: {\n total: 5,\n page: 1,\n pageSize: 2,\n returned: 2,\n has_more: true,\n next_page: 2,\n continuation: \"Call vtex_list_categories again with page=2 and pageSize=2 to continue.\",\n },\n profile_id: \"profile-1\",\n rows_schema: [\"id\", \"name\", \"parent_id\", \"is_active\", \"show_in_storefront\"],\n rows: [\n [10, \"Shoes\", null, true, true],\n [11, \"Boots\", 10, false, false],\n ],\n },\n });\n expect(brands).toEqual({\n kind: \"object\",\n value: {\n metadata: { total: 1, page: 1, pageSize: 25, returned: 1, has_more: false },\n profile_id: \"profile-1\",\n rows_schema: [\"id\", \"name\", \"is_active\", \"menu_home\"],\n rows: [[7, \"Acme\", true, false]],\n },\n });\n });\n\n it(\"lists specification groups for a category with optional name filtering\", async () => {\n listSpecificationGroupsByCategoryMock.mockResolvedValue([\n { Id: 70, Name: \"General\", CategoryId: 292 },\n { Id: 71, Name: \"Material\", CategoryId: 292 },\n ]);\n\n const result = await sharedModule.listSpecificationGroupsHandler({\n profileId: \"profile-1\",\n categoryId: \"292\",\n nameContains: \"mater\",\n });\n\n expect(listSpecificationGroupsByCategoryMock).toHaveBeenCalledWith(\"profile-1\", \"292\");\n expect(result).toEqual({\n kind: \"object\",\n value: {\n metadata: {\n total: 2,\n returned: 1,\n has_more: false,\n name_contains: \"mater\",\n },\n profile_id: \"profile-1\",\n category_id: \"292\",\n rows_schema: [\"id\", \"name\", \"category_id\"],\n rows: [[71, \"Material\", 292]],\n },\n });\n });\n\n it(\"delegates detail reads and strips nulls from normalized payloads\", async () => {\n getCategoryMock.mockResolvedValue({ Id: 10, Name: \"Shoes\", Empty: null });\n getBrandMock.mockResolvedValue({ Id: 7, Name: \"Acme\", Text: null });\n getProductMock.mockResolvedValue({ Id: 200, Name: \"Runner\", Description: null });\n getProductSpecificationsMock.mockResolvedValue([\n { Id: 90, Name: \"Material\", Value: \"Leather\", Empty: null },\n ]);\n getSkuMock.mockResolvedValue({ Id: 300, Name: \"Runner 42\", Ean: null });\n\n const category = await sharedModule.getCategoryHandler({ profileId: \"profile-1\", categoryId: \"10\" });\n const brand = await sharedModule.getBrandHandler({ profileId: \"profile-1\", brandId: \"7\" });\n const product = await sharedModule.getProductHandler({ profileId: \"profile-1\", productId: \"200\" });\n const specifications = await sharedModule.getProductSpecificationsHandler({\n profileId: \"profile-1\",\n productId: \"200\",\n });\n const sku = await sharedModule.getSkuHandler({ profileId: \"profile-1\", skuId: \"300\" });\n\n expect(getCategoryMock).toHaveBeenCalledWith(\"profile-1\", \"10\");\n expect(getBrandMock).toHaveBeenCalledWith(\"profile-1\", \"7\");\n expect(getProductMock).toHaveBeenCalledWith(\"profile-1\", \"200\");\n expect(getProductSpecificationsMock).toHaveBeenCalledWith(\"profile-1\", \"200\");\n expect(getSkuMock).toHaveBeenCalledWith(\"profile-1\", \"300\");\n expect(category).toEqual({ kind: \"object\", value: { profile_id: \"profile-1\", category_id: \"10\", category: { id: 10, name: \"Shoes\" } } });\n expect(brand).toEqual({ kind: \"object\", value: { profile_id: \"profile-1\", brand_id: \"7\", brand: { id: 7, name: \"Acme\" } } });\n expect(product).toEqual({ kind: \"object\", value: { profile_id: \"profile-1\", product_id: \"200\", product: { id: 200, name: \"Runner\" } } });\n expect(specifications).toEqual({\n kind: \"object\",\n value: {\n profile_id: \"profile-1\",\n product_id: \"200\",\n specifications: [{ id: 90, name: \"Material\", value: \"Leather\" }],\n },\n });\n expect(sku).toEqual({ kind: \"object\", value: { profile_id: \"profile-1\", sku_id: \"300\", sku: { id: 300, name: \"Runner 42\" } } });\n });\n\n it(\"formats product lists and SKU lists with compact token-efficient rows\", async () => {\n listProductsMock.mockResolvedValue({ productIds: [101, 102], total: 3 });\n listProductsByCategoryMock.mockResolvedValue({\n items: [\n {\n productId: \"101\",\n productName: \"Runner\",\n brand: \"Acme\",\n brandId: 7,\n categoryId: \"23\",\n productReference: \"RUN-001\",\n },\n ],\n total: 12,\n });\n listSkusByProductMock.mockResolvedValue([\n { Id: 501, Name: \"Runner 40\", IsActive: true, RefId: \"RUN-40\" },\n { Id: 502, Name: \"Runner 41\", IsActive: false, RefId: \"RUN-41\" },\n ]);\n\n const products = await sharedModule.listProductsHandler({\n profileId: \"profile-1\",\n page: 2,\n pageSize: 2,\n keyword: \"runner\",\n });\n const categoryProducts = await sharedModule.listProductsByCategoryHandler({\n profileId: \"profile-1\",\n categoryId: \"23\",\n page: 2,\n pageSize: 25,\n });\n const skus = await sharedModule.listSkusByProductHandler({ profileId: \"profile-1\", productId: \"101\" });\n\n expect(listProductsMock).toHaveBeenCalledWith(\"profile-1\", 3, 4, \"runner\");\n expect(listProductsByCategoryMock).toHaveBeenCalledWith(\"profile-1\", \"23\", 25, 49);\n expect(products).toEqual({\n kind: \"object\",\n value: {\n metadata: {\n total: 3,\n page: 2,\n pageSize: 2,\n returned: 2,\n has_more: false,\n },\n profile_id: \"profile-1\",\n rows_schema: [\"product_id\"],\n rows: [[101], [102]],\n },\n });\n expect(categoryProducts).toEqual({\n kind: \"object\",\n value: {\n metadata: {\n total: 12,\n page: 2,\n pageSize: 25,\n returned: 1,\n has_more: false,\n },\n profile_id: \"profile-1\",\n category_id: \"23\",\n rows_schema: [\n \"product_id\",\n \"product_name\",\n \"brand\",\n \"brand_id\",\n \"category_id\",\n \"product_reference\",\n ],\n rows: [[\"101\", \"Runner\", \"Acme\", 7, \"23\", \"RUN-001\"]],\n },\n });\n expect(skus).toEqual({\n kind: \"object\",\n value: {\n metadata: { total: 2, returned: 2, has_more: false },\n profile_id: \"profile-1\",\n product_id: \"101\",\n rows_schema: [\"id\", \"name\", \"is_active\", \"ref_id\"],\n rows: [\n [501, \"Runner 40\", true, \"RUN-40\"],\n [502, \"Runner 41\", false, \"RUN-41\"],\n ],\n },\n });\n });\n});\n"],
|
|
5
|
-
"mappings": "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",
|
|
4
|
+
"sourcesContent": ["import { beforeEach, describe, expect, it, vi } from \"vitest\";\n\nconst getCategoryTreeMock = vi.fn();\nconst listCategoriesMock = vi.fn();\nconst listBrandsMock = vi.fn();\nconst listSpecificationGroupsByCategoryMock = vi.fn();\nconst listProductsMock = vi.fn();\nconst listProductsByCategoryMock = vi.fn();\nconst listSkusByProductMock = vi.fn();\nconst getBrandMock = vi.fn();\nconst getCategoryMock = vi.fn();\nconst getProductMock = vi.fn();\nconst getProductSpecificationsMock = vi.fn();\nconst getSkuMock = vi.fn();\nconst resolveVtexProfileOrSelectionMock = vi.fn();\nconst objectMock = vi.fn((value) => ({ kind: \"object\", value }));\nconst errorMock = vi.fn((message) => ({ kind: \"error\", message }));\n\nvi.mock(\"mcp-use/server\", () => ({\n object: objectMock,\n error: errorMock,\n}));\n\nvi.mock(\"../../../services/vtex/vtex-catalog.js\", () => ({\n getCategoryTree: getCategoryTreeMock,\n listCategories: listCategoriesMock,\n listBrands: listBrandsMock,\n listSpecificationGroupsByCategory: listSpecificationGroupsByCategoryMock,\n listProducts: listProductsMock,\n listProductsByCategory: listProductsByCategoryMock,\n listSkusByProduct: listSkusByProductMock,\n}));\n\nvi.mock(\"../../../services/vtex/vtex-catalog-write.js\", () => ({\n getBrand: getBrandMock,\n getCategory: getCategoryMock,\n getProduct: getProductMock,\n getProductSpecifications: getProductSpecificationsMock,\n getSku: getSkuMock,\n}));\n\nvi.mock(\"../profile-resolution.js\", () => ({\n resolveVtexProfileOrSelection: resolveVtexProfileOrSelectionMock,\n}));\n\nconst sharedModule = await import(\"../catalog-navigation-reads.js\");\nconst getCategoryTreeModule = await import(\"../get-category-tree.js\");\nconst listCategoriesModule = await import(\"../list-categories.js\");\nconst getCategoryModule = await import(\"../get-category.js\");\nconst getBrandModule = await import(\"../get-brand.js\");\nconst listBrandsModule = await import(\"../list-brands.js\");\nconst listSpecificationGroupsModule = await import(\"../list-specification-groups.js\");\nconst getProductModule = await import(\"../get-product.js\");\nconst getProductSpecificationsModule = await import(\"../get-product-specifications.js\");\nconst listProductsModule = await import(\"../list-products.js\");\nconst listProductsByCategoryModule = await import(\"../list-products-by-category.js\");\nconst getSkuModule = await import(\"../get-sku.js\");\nconst listSkusByProductModule = await import(\"../list-skus-by-product.js\");\n\ndescribe(\"catalog navigation read wrappers\", () => {\n beforeEach(() => {\n vi.clearAllMocks();\n resolveVtexProfileOrSelectionMock.mockResolvedValue({\n ok: true,\n value: { profileId: \"profile-1\" },\n });\n });\n\n it(\"keeps stable public exports delegated to the shared module\", () => {\n expect(getCategoryTreeModule.getCategoryTreeSchema).toBe(sharedModule.getCategoryTreeSchema);\n expect(getCategoryTreeModule.getCategoryTreeHandler).toBe(sharedModule.getCategoryTreeHandler);\n expect(listCategoriesModule.listCategoriesSchema).toBe(sharedModule.listCategoriesSchema);\n expect(listCategoriesModule.listCategoriesHandler).toBe(sharedModule.listCategoriesHandler);\n expect(getCategoryModule.getCategorySchema).toBe(sharedModule.getCategorySchema);\n expect(getCategoryModule.getCategoryHandler).toBe(sharedModule.getCategoryHandler);\n expect(getBrandModule.getBrandSchema).toBe(sharedModule.getBrandSchema);\n expect(getBrandModule.getBrandHandler).toBe(sharedModule.getBrandHandler);\n expect(listBrandsModule.listBrandsSchema).toBe(sharedModule.listBrandsSchema);\n expect(listBrandsModule.listBrandsHandler).toBe(sharedModule.listBrandsHandler);\n expect(listSpecificationGroupsModule.listSpecificationGroupsSchema).toBe(\n sharedModule.listSpecificationGroupsSchema\n );\n expect(listSpecificationGroupsModule.listSpecificationGroupsHandler).toBe(\n sharedModule.listSpecificationGroupsHandler\n );\n expect(getProductModule.getProductSchema).toBe(sharedModule.getProductSchema);\n expect(getProductModule.getProductHandler).toBe(sharedModule.getProductHandler);\n expect(getProductSpecificationsModule.getProductSpecificationsSchema).toBe(\n sharedModule.getProductSpecificationsSchema\n );\n expect(getProductSpecificationsModule.getProductSpecificationsHandler).toBe(\n sharedModule.getProductSpecificationsHandler\n );\n expect(listProductsModule.listProductsSchema).toBe(sharedModule.listProductsSchema);\n expect(listProductsModule.listProductsHandler).toBe(sharedModule.listProductsHandler);\n expect(listProductsByCategoryModule.listProductsByCategorySchema).toBe(\n sharedModule.listProductsByCategorySchema\n );\n expect(listProductsByCategoryModule.listProductsByCategoryHandler).toBe(\n sharedModule.listProductsByCategoryHandler\n );\n expect(getSkuModule.getSkuSchema).toBe(sharedModule.getSkuSchema);\n expect(getSkuModule.getSkuHandler).toBe(sharedModule.getSkuHandler);\n expect(listSkusByProductModule.listSkusByProductSchema).toBe(sharedModule.listSkusByProductSchema);\n expect(listSkusByProductModule.listSkusByProductHandler).toBe(sharedModule.listSkusByProductHandler);\n });\n\n it(\"validates profile and catalog identifiers\", () => {\n expect(() => sharedModule.getCategorySchema.parse({ profileId: \" \", categoryId: \"10\" })).toThrow();\n expect(() => sharedModule.getBrandSchema.parse({ profileId: \"profile-1\", brandId: \"\" })).toThrow();\n expect(() => sharedModule.listSpecificationGroupsSchema.parse({ categoryId: \"\" })).toThrow();\n expect(() => sharedModule.getProductSchema.parse({ profileId: \"profile-1\", productId: \"\" })).toThrow();\n expect(() =>\n sharedModule.listProductsByCategorySchema.parse({ profileId: \"profile-1\", categoryId: \"\" })\n ).toThrow();\n expect(() =>\n sharedModule.getProductSpecificationsSchema.parse({ profileId: \"profile-1\", productId: \"\" })\n ).toThrow();\n expect(() => sharedModule.getSkuSchema.parse({ profileId: \"profile-1\", skuId: \"\" })).toThrow();\n expect(() =>\n sharedModule.listSkusByProductSchema.parse({ profileId: \"profile-1\", productId: \"\" })\n ).toThrow();\n });\n\n it(\"enforces the real VTEX category product page size cap\", () => {\n expect(\n sharedModule.listProductsByCategorySchema.parse({\n profileId: \"profile-1\",\n categoryId: \"23\",\n page: 1,\n pageSize: 50,\n })\n ).toEqual({\n profileId: \"profile-1\",\n categoryId: \"23\",\n page: 1,\n pageSize: 50,\n });\n\n expect(() =>\n sharedModule.listProductsByCategorySchema.parse({\n profileId: \"profile-1\",\n categoryId: \"23\",\n page: 1,\n pageSize: 51,\n })\n ).toThrow();\n });\n\n it(\"delegates category tree reads with the default VTEX depth\", async () => {\n getCategoryTreeMock.mockResolvedValue([{ id: 1, name: \"Root\", children: [{ id: 2, name: \"Child\" }] }]);\n\n const result = await sharedModule.getCategoryTreeHandler({ profileId: \"profile-1\" });\n\n expect(resolveVtexProfileOrSelectionMock).toHaveBeenCalledWith(\"profile-1\");\n expect(getCategoryTreeMock).toHaveBeenCalledWith(\"profile-1\", 5);\n expect(result).toEqual({\n kind: \"object\",\n value: {\n profile_id: \"profile-1\",\n depth: 5,\n categories: [{ id: 1, name: \"Root\", children: [{ id: 2, name: \"Child\" }] }],\n },\n });\n });\n\n it(\"returns the profile-selection response instead of silently defaulting when profileId is omitted\", async () => {\n resolveVtexProfileOrSelectionMock.mockResolvedValueOnce({\n ok: false,\n response: { selection_required: true, profiles: [{ id: \"profile-1\" }] },\n });\n\n const result = await sharedModule.getCategoryTreeHandler({});\n\n expect(resolveVtexProfileOrSelectionMock).toHaveBeenCalledWith(undefined);\n expect(getCategoryTreeMock).not.toHaveBeenCalled();\n expect(result).toEqual({ selection_required: true, profiles: [{ id: \"profile-1\" }] });\n });\n\n it(\"delegates shallow category tree reads with depth=1\", async () => {\n getCategoryTreeMock.mockResolvedValue([{ id: 1, name: \"Root\" }]);\n\n const result = await sharedModule.getCategoryTreeHandler({ profileId: \"profile-1\", depth: 1 });\n\n expect(getCategoryTreeMock).toHaveBeenCalledWith(\"profile-1\", 1);\n expect(result).toEqual({\n kind: \"object\",\n value: {\n profile_id: \"profile-1\",\n depth: 1,\n categories: [{ id: 1, name: \"Root\" }],\n },\n });\n });\n\n it(\"formats category and brand lists as compact rows with continuation metadata\", async () => {\n listCategoriesMock.mockResolvedValue({\n items: [\n { Id: 10, Name: \"Shoes\", FatherCategoryId: null, IsActive: true, ShowInStoreFront: true },\n { Id: 11, Name: \"Boots\", FatherCategoryId: 10, IsActive: false, ShowInStoreFront: false },\n ],\n total: 5,\n });\n listBrandsMock.mockResolvedValue({\n items: [{ Id: 7, Name: \"Acme\", Active: true, MenuHome: false }],\n total: 1,\n });\n\n const categories = await sharedModule.listCategoriesHandler({\n profileId: \"profile-1\",\n page: 1,\n pageSize: 2,\n });\n const brands = await sharedModule.listBrandsHandler({ profileId: \"profile-1\", page: 1, pageSize: 25 });\n\n expect(listCategoriesMock).toHaveBeenCalledWith(\"profile-1\", 1, 2);\n expect(categories).toEqual({\n kind: \"object\",\n value: {\n metadata: {\n total: 5,\n page: 1,\n pageSize: 2,\n returned: 2,\n has_more: true,\n next_page: 2,\n continuation: \"Call vtex_list_categories again with page=2 and pageSize=2 to continue.\",\n },\n profile_id: \"profile-1\",\n rows_schema: [\"id\", \"name\", \"parent_id\", \"is_active\", \"show_in_storefront\"],\n rows: [\n [10, \"Shoes\", null, true, true],\n [11, \"Boots\", 10, false, false],\n ],\n },\n });\n expect(brands).toEqual({\n kind: \"object\",\n value: {\n metadata: { total: 1, page: 1, pageSize: 25, returned: 1, has_more: false },\n profile_id: \"profile-1\",\n rows_schema: [\"id\", \"name\", \"is_active\", \"menu_home\"],\n rows: [[7, \"Acme\", true, false]],\n },\n });\n });\n\n it(\"lists specification groups for a category with optional name filtering\", async () => {\n listSpecificationGroupsByCategoryMock.mockResolvedValue([\n { Id: 70, Name: \"General\", CategoryId: 292 },\n { Id: 71, Name: \"Material\", CategoryId: 292 },\n ]);\n\n const result = await sharedModule.listSpecificationGroupsHandler({\n profileId: \"profile-1\",\n categoryId: \"292\",\n nameContains: \"mater\",\n });\n\n expect(listSpecificationGroupsByCategoryMock).toHaveBeenCalledWith(\"profile-1\", \"292\");\n expect(result).toEqual({\n kind: \"object\",\n value: {\n metadata: {\n total: 2,\n returned: 1,\n has_more: false,\n name_contains: \"mater\",\n },\n profile_id: \"profile-1\",\n category_id: \"292\",\n rows_schema: [\"id\", \"name\", \"category_id\"],\n rows: [[71, \"Material\", 292]],\n },\n });\n });\n\n it(\"delegates detail reads and strips nulls from normalized payloads\", async () => {\n getCategoryMock.mockResolvedValue({ Id: 10, Name: \"Shoes\", Empty: null });\n getBrandMock.mockResolvedValue({ Id: 7, Name: \"Acme\", Text: null });\n getProductMock.mockResolvedValue({ Id: 200, Name: \"Runner\", Description: null });\n getProductSpecificationsMock.mockResolvedValue([\n { Id: 90, Name: \"Material\", Value: \"Leather\", Empty: null },\n ]);\n getSkuMock.mockResolvedValue({ Id: 300, Name: \"Runner 42\", Ean: null });\n\n const category = await sharedModule.getCategoryHandler({ profileId: \"profile-1\", categoryId: \"10\" });\n const brand = await sharedModule.getBrandHandler({ profileId: \"profile-1\", brandId: \"7\" });\n const product = await sharedModule.getProductHandler({ profileId: \"profile-1\", productId: \"200\" });\n const specifications = await sharedModule.getProductSpecificationsHandler({\n profileId: \"profile-1\",\n productId: \"200\",\n });\n const sku = await sharedModule.getSkuHandler({ profileId: \"profile-1\", skuId: \"300\" });\n\n expect(getCategoryMock).toHaveBeenCalledWith(\"profile-1\", \"10\");\n expect(getBrandMock).toHaveBeenCalledWith(\"profile-1\", \"7\");\n expect(getProductMock).toHaveBeenCalledWith(\"profile-1\", \"200\");\n expect(getProductSpecificationsMock).toHaveBeenCalledWith(\"profile-1\", \"200\");\n expect(getSkuMock).toHaveBeenCalledWith(\"profile-1\", \"300\");\n expect(category).toEqual({ kind: \"object\", value: { profile_id: \"profile-1\", category_id: \"10\", category: { id: 10, name: \"Shoes\" } } });\n expect(brand).toEqual({ kind: \"object\", value: { profile_id: \"profile-1\", brand_id: \"7\", brand: { id: 7, name: \"Acme\" } } });\n expect(product).toEqual({ kind: \"object\", value: { profile_id: \"profile-1\", product_id: \"200\", product: { id: 200, name: \"Runner\" } } });\n expect(specifications).toEqual({\n kind: \"object\",\n value: {\n profile_id: \"profile-1\",\n product_id: \"200\",\n specifications: [{ id: 90, name: \"Material\", value: \"Leather\" }],\n },\n });\n expect(sku).toEqual({ kind: \"object\", value: { profile_id: \"profile-1\", sku_id: \"300\", sku: { id: 300, name: \"Runner 42\" } } });\n });\n\n it(\"formats product lists and SKU lists with compact token-efficient rows\", async () => {\n listProductsMock.mockResolvedValue({ productIds: [101, 102], total: 3 });\n listProductsByCategoryMock.mockResolvedValue({\n items: [\n {\n productId: \"101\",\n productName: \"Runner\",\n brand: \"Acme\",\n brandId: 7,\n categoryId: \"23\",\n productReference: \"RUN-001\",\n },\n {\n productId: \"102\",\n productName: \"Trail\",\n brand: \"Acme\",\n brandId: 7,\n categoryId: \"999\",\n productReference: \"TRL-002\",\n },\n {\n productId: \"103\",\n productName: \"No Category\",\n brand: \"Acme\",\n brandId: 7,\n productReference: \"NC-003\",\n },\n ],\n total: 12,\n });\n listSkusByProductMock.mockResolvedValue([\n { Id: 501, Name: \"Runner 40\", IsActive: true, RefId: \"RUN-40\" },\n { Id: 502, Name: \"Runner 41\", IsActive: false, RefId: \"RUN-41\" },\n ]);\n\n const products = await sharedModule.listProductsHandler({\n profileId: \"profile-1\",\n page: 2,\n pageSize: 2,\n keyword: \"runner\",\n });\n const categoryProducts = await sharedModule.listProductsByCategoryHandler({\n profileId: \"profile-1\",\n categoryId: \"23\",\n page: 2,\n pageSize: 25,\n });\n const skus = await sharedModule.listSkusByProductHandler({ profileId: \"profile-1\", productId: \"101\" });\n\n expect(listProductsMock).toHaveBeenCalledWith(\"profile-1\", 3, 4, \"runner\");\n expect(listProductsByCategoryMock).toHaveBeenCalledWith(\"profile-1\", \"23\", 25, 49);\n expect(products).toEqual({\n kind: \"object\",\n value: {\n metadata: {\n total: 3,\n page: 2,\n pageSize: 2,\n returned: 2,\n has_more: false,\n },\n profile_id: \"profile-1\",\n rows_schema: [\"product_id\"],\n rows: [[101], [102]],\n },\n });\n expect(categoryProducts).toEqual({\n kind: \"object\",\n value: {\n metadata: {\n total: 12,\n page: 2,\n pageSize: 25,\n returned: 3,\n has_more: false,\n },\n profile_id: \"profile-1\",\n category_id: \"23\",\n rows_schema: [\n \"product_id\",\n \"product_name\",\n \"brand\",\n \"brand_id\",\n \"category_id\",\n \"product_reference\",\n ],\n rows: [\n [\"101\", \"Runner\", \"Acme\", 7, \"23\", \"RUN-001\"],\n [\"102\", \"Trail\", \"Acme\", 7, \"999\", \"TRL-002\"],\n [\"103\", \"No Category\", \"Acme\", 7, null, \"NC-003\"],\n ],\n },\n });\n expect(skus).toEqual({\n kind: \"object\",\n value: {\n metadata: { total: 2, returned: 2, has_more: false },\n profile_id: \"profile-1\",\n product_id: \"101\",\n rows_schema: [\"id\", \"name\", \"is_active\", \"ref_id\"],\n rows: [\n [501, \"Runner 40\", true, \"RUN-40\"],\n [502, \"Runner 41\", false, \"RUN-41\"],\n ],\n },\n });\n });\n});\n"],
|
|
5
|
+
"mappings": "AAAA,SAAS,YAAY,UAAU,QAAQ,IAAI,UAAU;AAErD,MAAM,sBAAsB,GAAG,GAAG;AAClC,MAAM,qBAAqB,GAAG,GAAG;AACjC,MAAM,iBAAiB,GAAG,GAAG;AAC7B,MAAM,wCAAwC,GAAG,GAAG;AACpD,MAAM,mBAAmB,GAAG,GAAG;AAC/B,MAAM,6BAA6B,GAAG,GAAG;AACzC,MAAM,wBAAwB,GAAG,GAAG;AACpC,MAAM,eAAe,GAAG,GAAG;AAC3B,MAAM,kBAAkB,GAAG,GAAG;AAC9B,MAAM,iBAAiB,GAAG,GAAG;AAC7B,MAAM,+BAA+B,GAAG,GAAG;AAC3C,MAAM,aAAa,GAAG,GAAG;AACzB,MAAM,oCAAoC,GAAG,GAAG;AAChD,MAAM,aAAa,GAAG,GAAG,CAAC,WAAW,EAAE,MAAM,UAAU,MAAM,EAAE;AAC/D,MAAM,YAAY,GAAG,GAAG,CAAC,aAAa,EAAE,MAAM,SAAS,QAAQ,EAAE;AAEjE,GAAG,KAAK,kBAAkB,OAAO;AAAA,EAC/B,QAAQ;AAAA,EACR,OAAO;AACT,EAAE;AAEF,GAAG,KAAK,0CAA0C,OAAO;AAAA,EACvD,iBAAiB;AAAA,EACjB,gBAAgB;AAAA,EAChB,YAAY;AAAA,EACZ,mCAAmC;AAAA,EACnC,cAAc;AAAA,EACd,wBAAwB;AAAA,EACxB,mBAAmB;AACrB,EAAE;AAEF,GAAG,KAAK,gDAAgD,OAAO;AAAA,EAC7D,UAAU;AAAA,EACV,aAAa;AAAA,EACb,YAAY;AAAA,EACZ,0BAA0B;AAAA,EAC1B,QAAQ;AACV,EAAE;AAEF,GAAG,KAAK,4BAA4B,OAAO;AAAA,EACzC,+BAA+B;AACjC,EAAE;AAEF,MAAM,eAAe,MAAM,OAAO,gCAAgC;AAClE,MAAM,wBAAwB,MAAM,OAAO,yBAAyB;AACpE,MAAM,uBAAuB,MAAM,OAAO,uBAAuB;AACjE,MAAM,oBAAoB,MAAM,OAAO,oBAAoB;AAC3D,MAAM,iBAAiB,MAAM,OAAO,iBAAiB;AACrD,MAAM,mBAAmB,MAAM,OAAO,mBAAmB;AACzD,MAAM,gCAAgC,MAAM,OAAO,iCAAiC;AACpF,MAAM,mBAAmB,MAAM,OAAO,mBAAmB;AACzD,MAAM,iCAAiC,MAAM,OAAO,kCAAkC;AACtF,MAAM,qBAAqB,MAAM,OAAO,qBAAqB;AAC7D,MAAM,+BAA+B,MAAM,OAAO,iCAAiC;AACnF,MAAM,eAAe,MAAM,OAAO,eAAe;AACjD,MAAM,0BAA0B,MAAM,OAAO,4BAA4B;AAEzE,SAAS,oCAAoC,MAAM;AACjD,aAAW,MAAM;AACf,OAAG,cAAc;AACjB,sCAAkC,kBAAkB;AAAA,MAClD,IAAI;AAAA,MACJ,OAAO,EAAE,WAAW,YAAY;AAAA,IAClC,CAAC;AAAA,EACH,CAAC;AAED,KAAG,8DAA8D,MAAM;AACrE,WAAO,sBAAsB,qBAAqB,EAAE,KAAK,aAAa,qBAAqB;AAC3F,WAAO,sBAAsB,sBAAsB,EAAE,KAAK,aAAa,sBAAsB;AAC7F,WAAO,qBAAqB,oBAAoB,EAAE,KAAK,aAAa,oBAAoB;AACxF,WAAO,qBAAqB,qBAAqB,EAAE,KAAK,aAAa,qBAAqB;AAC1F,WAAO,kBAAkB,iBAAiB,EAAE,KAAK,aAAa,iBAAiB;AAC/E,WAAO,kBAAkB,kBAAkB,EAAE,KAAK,aAAa,kBAAkB;AACjF,WAAO,eAAe,cAAc,EAAE,KAAK,aAAa,cAAc;AACtE,WAAO,eAAe,eAAe,EAAE,KAAK,aAAa,eAAe;AACxE,WAAO,iBAAiB,gBAAgB,EAAE,KAAK,aAAa,gBAAgB;AAC5E,WAAO,iBAAiB,iBAAiB,EAAE,KAAK,aAAa,iBAAiB;AAC9E,WAAO,8BAA8B,6BAA6B,EAAE;AAAA,MAClE,aAAa;AAAA,IACf;AACA,WAAO,8BAA8B,8BAA8B,EAAE;AAAA,MACnE,aAAa;AAAA,IACf;AACA,WAAO,iBAAiB,gBAAgB,EAAE,KAAK,aAAa,gBAAgB;AAC5E,WAAO,iBAAiB,iBAAiB,EAAE,KAAK,aAAa,iBAAiB;AAC9E,WAAO,+BAA+B,8BAA8B,EAAE;AAAA,MACpE,aAAa;AAAA,IACf;AACA,WAAO,+BAA+B,+BAA+B,EAAE;AAAA,MACrE,aAAa;AAAA,IACf;AACA,WAAO,mBAAmB,kBAAkB,EAAE,KAAK,aAAa,kBAAkB;AAClF,WAAO,mBAAmB,mBAAmB,EAAE,KAAK,aAAa,mBAAmB;AACpF,WAAO,6BAA6B,4BAA4B,EAAE;AAAA,MAChE,aAAa;AAAA,IACf;AACA,WAAO,6BAA6B,6BAA6B,EAAE;AAAA,MACjE,aAAa;AAAA,IACf;AACA,WAAO,aAAa,YAAY,EAAE,KAAK,aAAa,YAAY;AAChE,WAAO,aAAa,aAAa,EAAE,KAAK,aAAa,aAAa;AAClE,WAAO,wBAAwB,uBAAuB,EAAE,KAAK,aAAa,uBAAuB;AACjG,WAAO,wBAAwB,wBAAwB,EAAE,KAAK,aAAa,wBAAwB;AAAA,EACrG,CAAC;AAED,KAAG,6CAA6C,MAAM;AACpD,WAAO,MAAM,aAAa,kBAAkB,MAAM,EAAE,WAAW,OAAO,YAAY,KAAK,CAAC,CAAC,EAAE,QAAQ;AACnG,WAAO,MAAM,aAAa,eAAe,MAAM,EAAE,WAAW,aAAa,SAAS,GAAG,CAAC,CAAC,EAAE,QAAQ;AACjG,WAAO,MAAM,aAAa,8BAA8B,MAAM,EAAE,YAAY,GAAG,CAAC,CAAC,EAAE,QAAQ;AAC3F,WAAO,MAAM,aAAa,iBAAiB,MAAM,EAAE,WAAW,aAAa,WAAW,GAAG,CAAC,CAAC,EAAE,QAAQ;AACrG;AAAA,MAAO,MACL,aAAa,6BAA6B,MAAM,EAAE,WAAW,aAAa,YAAY,GAAG,CAAC;AAAA,IAC5F,EAAE,QAAQ;AACV;AAAA,MAAO,MACL,aAAa,+BAA+B,MAAM,EAAE,WAAW,aAAa,WAAW,GAAG,CAAC;AAAA,IAC7F,EAAE,QAAQ;AACV,WAAO,MAAM,aAAa,aAAa,MAAM,EAAE,WAAW,aAAa,OAAO,GAAG,CAAC,CAAC,EAAE,QAAQ;AAC7F;AAAA,MAAO,MACL,aAAa,wBAAwB,MAAM,EAAE,WAAW,aAAa,WAAW,GAAG,CAAC;AAAA,IACtF,EAAE,QAAQ;AAAA,EACZ,CAAC;AAED,KAAG,yDAAyD,MAAM;AAChE;AAAA,MACE,aAAa,6BAA6B,MAAM;AAAA,QAC9C,WAAW;AAAA,QACX,YAAY;AAAA,QACZ,MAAM;AAAA,QACN,UAAU;AAAA,MACZ,CAAC;AAAA,IACH,EAAE,QAAQ;AAAA,MACR,WAAW;AAAA,MACX,YAAY;AAAA,MACZ,MAAM;AAAA,MACN,UAAU;AAAA,IACZ,CAAC;AAED;AAAA,MAAO,MACL,aAAa,6BAA6B,MAAM;AAAA,QAC9C,WAAW;AAAA,QACX,YAAY;AAAA,QACZ,MAAM;AAAA,QACN,UAAU;AAAA,MACZ,CAAC;AAAA,IACH,EAAE,QAAQ;AAAA,EACZ,CAAC;AAED,KAAG,6DAA6D,YAAY;AAC1E,wBAAoB,kBAAkB,CAAC,EAAE,IAAI,GAAG,MAAM,QAAQ,UAAU,CAAC,EAAE,IAAI,GAAG,MAAM,QAAQ,CAAC,EAAE,CAAC,CAAC;AAErG,UAAM,SAAS,MAAM,aAAa,uBAAuB,EAAE,WAAW,YAAY,CAAC;AAEnF,WAAO,iCAAiC,EAAE,qBAAqB,WAAW;AAC1E,WAAO,mBAAmB,EAAE,qBAAqB,aAAa,CAAC;AAC/D,WAAO,MAAM,EAAE,QAAQ;AAAA,MACrB,MAAM;AAAA,MACN,OAAO;AAAA,QACL,YAAY;AAAA,QACZ,OAAO;AAAA,QACP,YAAY,CAAC,EAAE,IAAI,GAAG,MAAM,QAAQ,UAAU,CAAC,EAAE,IAAI,GAAG,MAAM,QAAQ,CAAC,EAAE,CAAC;AAAA,MAC5E;AAAA,IACF,CAAC;AAAA,EACH,CAAC;AAED,KAAG,mGAAmG,YAAY;AAChH,sCAAkC,sBAAsB;AAAA,MACtD,IAAI;AAAA,MACJ,UAAU,EAAE,oBAAoB,MAAM,UAAU,CAAC,EAAE,IAAI,YAAY,CAAC,EAAE;AAAA,IACxE,CAAC;AAED,UAAM,SAAS,MAAM,aAAa,uBAAuB,CAAC,CAAC;AAE3D,WAAO,iCAAiC,EAAE,qBAAqB,MAAS;AACxE,WAAO,mBAAmB,EAAE,IAAI,iBAAiB;AACjD,WAAO,MAAM,EAAE,QAAQ,EAAE,oBAAoB,MAAM,UAAU,CAAC,EAAE,IAAI,YAAY,CAAC,EAAE,CAAC;AAAA,EACtF,CAAC;AAED,KAAG,sDAAsD,YAAY;AACnE,wBAAoB,kBAAkB,CAAC,EAAE,IAAI,GAAG,MAAM,OAAO,CAAC,CAAC;AAE/D,UAAM,SAAS,MAAM,aAAa,uBAAuB,EAAE,WAAW,aAAa,OAAO,EAAE,CAAC;AAE7F,WAAO,mBAAmB,EAAE,qBAAqB,aAAa,CAAC;AAC/D,WAAO,MAAM,EAAE,QAAQ;AAAA,MACrB,MAAM;AAAA,MACN,OAAO;AAAA,QACL,YAAY;AAAA,QACZ,OAAO;AAAA,QACP,YAAY,CAAC,EAAE,IAAI,GAAG,MAAM,OAAO,CAAC;AAAA,MACtC;AAAA,IACF,CAAC;AAAA,EACH,CAAC;AAED,KAAG,+EAA+E,YAAY;AAC5F,uBAAmB,kBAAkB;AAAA,MACnC,OAAO;AAAA,QACL,EAAE,IAAI,IAAI,MAAM,SAAS,kBAAkB,MAAM,UAAU,MAAM,kBAAkB,KAAK;AAAA,QACxF,EAAE,IAAI,IAAI,MAAM,SAAS,kBAAkB,IAAI,UAAU,OAAO,kBAAkB,MAAM;AAAA,MAC1F;AAAA,MACA,OAAO;AAAA,IACT,CAAC;AACD,mBAAe,kBAAkB;AAAA,MAC/B,OAAO,CAAC,EAAE,IAAI,GAAG,MAAM,QAAQ,QAAQ,MAAM,UAAU,MAAM,CAAC;AAAA,MAC9D,OAAO;AAAA,IACT,CAAC;AAED,UAAM,aAAa,MAAM,aAAa,sBAAsB;AAAA,MAC1D,WAAW;AAAA,MACX,MAAM;AAAA,MACN,UAAU;AAAA,IACZ,CAAC;AACD,UAAM,SAAS,MAAM,aAAa,kBAAkB,EAAE,WAAW,aAAa,MAAM,GAAG,UAAU,GAAG,CAAC;AAErG,WAAO,kBAAkB,EAAE,qBAAqB,aAAa,GAAG,CAAC;AACjE,WAAO,UAAU,EAAE,QAAQ;AAAA,MACzB,MAAM;AAAA,MACN,OAAO;AAAA,QACL,UAAU;AAAA,UACR,OAAO;AAAA,UACP,MAAM;AAAA,UACN,UAAU;AAAA,UACV,UAAU;AAAA,UACV,UAAU;AAAA,UACV,WAAW;AAAA,UACX,cAAc;AAAA,QAChB;AAAA,QACA,YAAY;AAAA,QACZ,aAAa,CAAC,MAAM,QAAQ,aAAa,aAAa,oBAAoB;AAAA,QAC1E,MAAM;AAAA,UACJ,CAAC,IAAI,SAAS,MAAM,MAAM,IAAI;AAAA,UAC9B,CAAC,IAAI,SAAS,IAAI,OAAO,KAAK;AAAA,QAChC;AAAA,MACF;AAAA,IACF,CAAC;AACD,WAAO,MAAM,EAAE,QAAQ;AAAA,MACrB,MAAM;AAAA,MACN,OAAO;AAAA,QACL,UAAU,EAAE,OAAO,GAAG,MAAM,GAAG,UAAU,IAAI,UAAU,GAAG,UAAU,MAAM;AAAA,QAC1E,YAAY;AAAA,QACZ,aAAa,CAAC,MAAM,QAAQ,aAAa,WAAW;AAAA,QACpD,MAAM,CAAC,CAAC,GAAG,QAAQ,MAAM,KAAK,CAAC;AAAA,MACjC;AAAA,IACF,CAAC;AAAA,EACH,CAAC;AAED,KAAG,0EAA0E,YAAY;AACvF,0CAAsC,kBAAkB;AAAA,MACtD,EAAE,IAAI,IAAI,MAAM,WAAW,YAAY,IAAI;AAAA,MAC3C,EAAE,IAAI,IAAI,MAAM,YAAY,YAAY,IAAI;AAAA,IAC9C,CAAC;AAED,UAAM,SAAS,MAAM,aAAa,+BAA+B;AAAA,MAC/D,WAAW;AAAA,MACX,YAAY;AAAA,MACZ,cAAc;AAAA,IAChB,CAAC;AAED,WAAO,qCAAqC,EAAE,qBAAqB,aAAa,KAAK;AACrF,WAAO,MAAM,EAAE,QAAQ;AAAA,MACrB,MAAM;AAAA,MACN,OAAO;AAAA,QACL,UAAU;AAAA,UACR,OAAO;AAAA,UACP,UAAU;AAAA,UACV,UAAU;AAAA,UACV,eAAe;AAAA,QACjB;AAAA,QACA,YAAY;AAAA,QACZ,aAAa;AAAA,QACb,aAAa,CAAC,MAAM,QAAQ,aAAa;AAAA,QACzC,MAAM,CAAC,CAAC,IAAI,YAAY,GAAG,CAAC;AAAA,MAC9B;AAAA,IACF,CAAC;AAAA,EACH,CAAC;AAED,KAAG,oEAAoE,YAAY;AACjF,oBAAgB,kBAAkB,EAAE,IAAI,IAAI,MAAM,SAAS,OAAO,KAAK,CAAC;AACxE,iBAAa,kBAAkB,EAAE,IAAI,GAAG,MAAM,QAAQ,MAAM,KAAK,CAAC;AAClE,mBAAe,kBAAkB,EAAE,IAAI,KAAK,MAAM,UAAU,aAAa,KAAK,CAAC;AAC/E,iCAA6B,kBAAkB;AAAA,MAC7C,EAAE,IAAI,IAAI,MAAM,YAAY,OAAO,WAAW,OAAO,KAAK;AAAA,IAC5D,CAAC;AACD,eAAW,kBAAkB,EAAE,IAAI,KAAK,MAAM,aAAa,KAAK,KAAK,CAAC;AAEtE,UAAM,WAAW,MAAM,aAAa,mBAAmB,EAAE,WAAW,aAAa,YAAY,KAAK,CAAC;AACnG,UAAM,QAAQ,MAAM,aAAa,gBAAgB,EAAE,WAAW,aAAa,SAAS,IAAI,CAAC;AACzF,UAAM,UAAU,MAAM,aAAa,kBAAkB,EAAE,WAAW,aAAa,WAAW,MAAM,CAAC;AACjG,UAAM,iBAAiB,MAAM,aAAa,gCAAgC;AAAA,MACxE,WAAW;AAAA,MACX,WAAW;AAAA,IACb,CAAC;AACD,UAAM,MAAM,MAAM,aAAa,cAAc,EAAE,WAAW,aAAa,OAAO,MAAM,CAAC;AAErF,WAAO,eAAe,EAAE,qBAAqB,aAAa,IAAI;AAC9D,WAAO,YAAY,EAAE,qBAAqB,aAAa,GAAG;AAC1D,WAAO,cAAc,EAAE,qBAAqB,aAAa,KAAK;AAC9D,WAAO,4BAA4B,EAAE,qBAAqB,aAAa,KAAK;AAC5E,WAAO,UAAU,EAAE,qBAAqB,aAAa,KAAK;AAC1D,WAAO,QAAQ,EAAE,QAAQ,EAAE,MAAM,UAAU,OAAO,EAAE,YAAY,aAAa,aAAa,MAAM,UAAU,EAAE,IAAI,IAAI,MAAM,QAAQ,EAAE,EAAE,CAAC;AACvI,WAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,UAAU,OAAO,EAAE,YAAY,aAAa,UAAU,KAAK,OAAO,EAAE,IAAI,GAAG,MAAM,OAAO,EAAE,EAAE,CAAC;AAC3H,WAAO,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,OAAO,EAAE,YAAY,aAAa,YAAY,OAAO,SAAS,EAAE,IAAI,KAAK,MAAM,SAAS,EAAE,EAAE,CAAC;AACvI,WAAO,cAAc,EAAE,QAAQ;AAAA,MAC7B,MAAM;AAAA,MACN,OAAO;AAAA,QACL,YAAY;AAAA,QACZ,YAAY;AAAA,QACZ,gBAAgB,CAAC,EAAE,IAAI,IAAI,MAAM,YAAY,OAAO,UAAU,CAAC;AAAA,MACjE;AAAA,IACF,CAAC;AACD,WAAO,GAAG,EAAE,QAAQ,EAAE,MAAM,UAAU,OAAO,EAAE,YAAY,aAAa,QAAQ,OAAO,KAAK,EAAE,IAAI,KAAK,MAAM,YAAY,EAAE,EAAE,CAAC;AAAA,EAChI,CAAC;AAED,KAAG,yEAAyE,YAAY;AACtF,qBAAiB,kBAAkB,EAAE,YAAY,CAAC,KAAK,GAAG,GAAG,OAAO,EAAE,CAAC;AACvE,+BAA2B,kBAAkB;AAAA,MAC3C,OAAO;AAAA,QACL;AAAA,UACE,WAAW;AAAA,UACX,aAAa;AAAA,UACb,OAAO;AAAA,UACP,SAAS;AAAA,UACT,YAAY;AAAA,UACZ,kBAAkB;AAAA,QACpB;AAAA,QACA;AAAA,UACE,WAAW;AAAA,UACX,aAAa;AAAA,UACb,OAAO;AAAA,UACP,SAAS;AAAA,UACT,YAAY;AAAA,UACZ,kBAAkB;AAAA,QACpB;AAAA,QACA;AAAA,UACE,WAAW;AAAA,UACX,aAAa;AAAA,UACb,OAAO;AAAA,UACP,SAAS;AAAA,UACT,kBAAkB;AAAA,QACpB;AAAA,MACF;AAAA,MACA,OAAO;AAAA,IACT,CAAC;AACD,0BAAsB,kBAAkB;AAAA,MACtC,EAAE,IAAI,KAAK,MAAM,aAAa,UAAU,MAAM,OAAO,SAAS;AAAA,MAC9D,EAAE,IAAI,KAAK,MAAM,aAAa,UAAU,OAAO,OAAO,SAAS;AAAA,IACjE,CAAC;AAED,UAAM,WAAW,MAAM,aAAa,oBAAoB;AAAA,MACtD,WAAW;AAAA,MACX,MAAM;AAAA,MACN,UAAU;AAAA,MACV,SAAS;AAAA,IACX,CAAC;AACD,UAAM,mBAAmB,MAAM,aAAa,8BAA8B;AAAA,MACxE,WAAW;AAAA,MACX,YAAY;AAAA,MACZ,MAAM;AAAA,MACN,UAAU;AAAA,IACZ,CAAC;AACD,UAAM,OAAO,MAAM,aAAa,yBAAyB,EAAE,WAAW,aAAa,WAAW,MAAM,CAAC;AAErG,WAAO,gBAAgB,EAAE,qBAAqB,aAAa,GAAG,GAAG,QAAQ;AACzE,WAAO,0BAA0B,EAAE,qBAAqB,aAAa,MAAM,IAAI,EAAE;AACjF,WAAO,QAAQ,EAAE,QAAQ;AAAA,MACvB,MAAM;AAAA,MACN,OAAO;AAAA,QACL,UAAU;AAAA,UACR,OAAO;AAAA,UACP,MAAM;AAAA,UACN,UAAU;AAAA,UACV,UAAU;AAAA,UACV,UAAU;AAAA,QACZ;AAAA,QACA,YAAY;AAAA,QACZ,aAAa,CAAC,YAAY;AAAA,QAC1B,MAAM,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC;AAAA,MACrB;AAAA,IACF,CAAC;AACD,WAAO,gBAAgB,EAAE,QAAQ;AAAA,MAC/B,MAAM;AAAA,MACN,OAAO;AAAA,QACL,UAAU;AAAA,UACR,OAAO;AAAA,UACP,MAAM;AAAA,UACN,UAAU;AAAA,UACV,UAAU;AAAA,UACV,UAAU;AAAA,QACZ;AAAA,QACA,YAAY;AAAA,QACZ,aAAa;AAAA,QACb,aAAa;AAAA,UACX;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAAA,QACA,MAAM;AAAA,UACJ,CAAC,OAAO,UAAU,QAAQ,GAAG,MAAM,SAAS;AAAA,UAC5C,CAAC,OAAO,SAAS,QAAQ,GAAG,OAAO,SAAS;AAAA,UAC5C,CAAC,OAAO,eAAe,QAAQ,GAAG,MAAM,QAAQ;AAAA,QAClD;AAAA,MACF;AAAA,IACF,CAAC;AACD,WAAO,IAAI,EAAE,QAAQ;AAAA,MACnB,MAAM;AAAA,MACN,OAAO;AAAA,QACL,UAAU,EAAE,OAAO,GAAG,UAAU,GAAG,UAAU,MAAM;AAAA,QACnD,YAAY;AAAA,QACZ,YAAY;AAAA,QACZ,aAAa,CAAC,MAAM,QAAQ,aAAa,QAAQ;AAAA,QACjD,MAAM;AAAA,UACJ,CAAC,KAAK,aAAa,MAAM,QAAQ;AAAA,UACjC,CAAC,KAAK,aAAa,OAAO,QAAQ;AAAA,QACpC;AAAA,MACF;AAAA,IACF,CAAC;AAAA,EACH,CAAC;AACH,CAAC;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -4,13 +4,6 @@ const objectMock = vi.fn((value) => ({ kind: "object", value }));
|
|
|
4
4
|
const errorMock = vi.fn((message) => ({ kind: "error", message }));
|
|
5
5
|
const listCommercialConditionsMock = vi.fn();
|
|
6
6
|
const getCommercialConditionMock = vi.fn();
|
|
7
|
-
const createCommercialConditionMock = vi.fn();
|
|
8
|
-
const updateCommercialConditionMock = vi.fn();
|
|
9
|
-
const deleteCommercialConditionMock = vi.fn();
|
|
10
|
-
const resolveVtexWriteProfileMock = vi.fn();
|
|
11
|
-
const buildWriteSuccessResponseMock = vi.fn((value) => ({ kind: "write", value }));
|
|
12
|
-
const handleVtexWriteErrorMock = vi.fn((_err, fallback) => ({ kind: "error", message: fallback }));
|
|
13
|
-
const requireExplicitConfirmationMock = vi.fn();
|
|
14
7
|
vi.mock("mcp-use/server", () => ({
|
|
15
8
|
object: objectMock,
|
|
16
9
|
error: errorMock
|
|
@@ -19,27 +12,13 @@ vi.mock("../../../services/vtex/vtex-payments.js", () => ({
|
|
|
19
12
|
listCommercialConditions: listCommercialConditionsMock,
|
|
20
13
|
getCommercialCondition: getCommercialConditionMock
|
|
21
14
|
}));
|
|
22
|
-
vi.mock("../../../services/vtex/vtex-payments-write.js", () => ({
|
|
23
|
-
createCommercialCondition: createCommercialConditionMock,
|
|
24
|
-
updateCommercialCondition: updateCommercialConditionMock,
|
|
25
|
-
deleteCommercialCondition: deleteCommercialConditionMock
|
|
26
|
-
}));
|
|
27
15
|
vi.mock("../write-helpers.js", () => ({
|
|
28
|
-
|
|
29
|
-
resolveVtexWriteProfile: resolveVtexWriteProfileMock,
|
|
30
|
-
buildWriteSuccessResponse: buildWriteSuccessResponseMock,
|
|
31
|
-
handleVtexWriteError: handleVtexWriteErrorMock,
|
|
32
|
-
requireExplicitConfirmation: requireExplicitConfirmationMock
|
|
16
|
+
vtexProfileIdSchemaField: z.string().trim().min(1).optional().describe("profile")
|
|
33
17
|
}));
|
|
34
18
|
const module = await import("../commercial-conditions.js");
|
|
35
19
|
describe("vtex_commercial_conditions tool", () => {
|
|
36
20
|
beforeEach(() => {
|
|
37
21
|
vi.clearAllMocks();
|
|
38
|
-
resolveVtexWriteProfileMock.mockResolvedValue({
|
|
39
|
-
ok: true,
|
|
40
|
-
value: { profileId: "profile-1" }
|
|
41
|
-
});
|
|
42
|
-
requireExplicitConfirmationMock.mockReturnValue(null);
|
|
43
22
|
});
|
|
44
23
|
it("requires profileId and validates numeric commercialConditionId across actions", () => {
|
|
45
24
|
expect(() => module.commercialConditionsSchema.parse({ action: "list" })).toThrow();
|
|
@@ -73,42 +52,12 @@ describe("vtex_commercial_conditions tool", () => {
|
|
|
73
52
|
commercialConditionId: 10
|
|
74
53
|
});
|
|
75
54
|
expect(
|
|
76
|
-
module.commercialConditionsSchema.parse({
|
|
55
|
+
() => module.commercialConditionsSchema.parse({
|
|
77
56
|
action: "create",
|
|
78
57
|
profileId: "profile-1",
|
|
79
58
|
name: "9 cuotas"
|
|
80
59
|
})
|
|
81
|
-
).
|
|
82
|
-
action: "create",
|
|
83
|
-
profileId: "profile-1",
|
|
84
|
-
name: "9 cuotas"
|
|
85
|
-
});
|
|
86
|
-
expect(
|
|
87
|
-
module.commercialConditionsSchema.parse({
|
|
88
|
-
action: "update",
|
|
89
|
-
profileId: "profile-1",
|
|
90
|
-
commercialConditionId: 10,
|
|
91
|
-
name: "12 cuotas"
|
|
92
|
-
})
|
|
93
|
-
).toEqual({
|
|
94
|
-
action: "update",
|
|
95
|
-
profileId: "profile-1",
|
|
96
|
-
commercialConditionId: 10,
|
|
97
|
-
name: "12 cuotas"
|
|
98
|
-
});
|
|
99
|
-
expect(
|
|
100
|
-
module.commercialConditionsSchema.parse({
|
|
101
|
-
action: "delete",
|
|
102
|
-
profileId: "profile-1",
|
|
103
|
-
commercialConditionId: 10,
|
|
104
|
-
confirmed: true
|
|
105
|
-
})
|
|
106
|
-
).toEqual({
|
|
107
|
-
action: "delete",
|
|
108
|
-
profileId: "profile-1",
|
|
109
|
-
commercialConditionId: 10,
|
|
110
|
-
confirmed: true
|
|
111
|
-
});
|
|
60
|
+
).toThrow();
|
|
112
61
|
});
|
|
113
62
|
it("returns compact list responses for commercial conditions", async () => {
|
|
114
63
|
listCommercialConditionsMock.mockResolvedValue([
|
|
@@ -137,45 +86,13 @@ describe("vtex_commercial_conditions tool", () => {
|
|
|
137
86
|
}
|
|
138
87
|
});
|
|
139
88
|
});
|
|
140
|
-
it("
|
|
89
|
+
it("gets commercial conditions through the service layer", async () => {
|
|
141
90
|
getCommercialConditionMock.mockResolvedValueOnce({ id: 10, name: "9 cuotas", isActive: true });
|
|
142
|
-
getCommercialConditionMock.mockResolvedValueOnce({
|
|
143
|
-
id: 10,
|
|
144
|
-
name: "9 cuotas",
|
|
145
|
-
description: "Promo base",
|
|
146
|
-
isActive: true
|
|
147
|
-
});
|
|
148
|
-
createCommercialConditionMock.mockResolvedValue({ id: 10, Name: "9 cuotas" });
|
|
149
|
-
updateCommercialConditionMock.mockResolvedValue({
|
|
150
|
-
id: 10,
|
|
151
|
-
Name: "12 cuotas",
|
|
152
|
-
Description: "Promo base",
|
|
153
|
-
IsActive: true
|
|
154
|
-
});
|
|
155
|
-
deleteCommercialConditionMock.mockResolvedValue(void 0);
|
|
156
91
|
const fetched = await module.commercialConditionsHandler({
|
|
157
92
|
action: "get",
|
|
158
93
|
profileId: "profile-1",
|
|
159
94
|
commercialConditionId: 10
|
|
160
95
|
});
|
|
161
|
-
const created = await module.commercialConditionsHandler({
|
|
162
|
-
action: "create",
|
|
163
|
-
profileId: "profile-1",
|
|
164
|
-
name: "9 cuotas",
|
|
165
|
-
description: "Promo"
|
|
166
|
-
});
|
|
167
|
-
const updated = await module.commercialConditionsHandler({
|
|
168
|
-
action: "update",
|
|
169
|
-
profileId: "profile-1",
|
|
170
|
-
commercialConditionId: 10,
|
|
171
|
-
name: "12 cuotas"
|
|
172
|
-
});
|
|
173
|
-
const deleted = await module.commercialConditionsHandler({
|
|
174
|
-
action: "delete",
|
|
175
|
-
profileId: "profile-1",
|
|
176
|
-
commercialConditionId: 10,
|
|
177
|
-
confirmed: true
|
|
178
|
-
});
|
|
179
96
|
expect(getCommercialConditionMock).toHaveBeenCalledWith("profile-1", 10);
|
|
180
97
|
expect(fetched).toEqual({
|
|
181
98
|
kind: "object",
|
|
@@ -185,92 +102,6 @@ describe("vtex_commercial_conditions tool", () => {
|
|
|
185
102
|
condition: { id: 10, name: "9 cuotas", is_active: true }
|
|
186
103
|
}
|
|
187
104
|
});
|
|
188
|
-
expect(createCommercialConditionMock).toHaveBeenCalledWith("profile-1", {
|
|
189
|
-
Name: "9 cuotas",
|
|
190
|
-
Description: "Promo"
|
|
191
|
-
});
|
|
192
|
-
expect(buildWriteSuccessResponseMock).toHaveBeenNthCalledWith(
|
|
193
|
-
1,
|
|
194
|
-
expect.objectContaining({
|
|
195
|
-
operation: "commercial_conditions_create",
|
|
196
|
-
resourceId: "10",
|
|
197
|
-
message: "Commercial condition created. You can now link it to payment rules or SKU assignments as needed.",
|
|
198
|
-
after: { id: 10, Name: "9 cuotas" }
|
|
199
|
-
})
|
|
200
|
-
);
|
|
201
|
-
expect(getCommercialConditionMock).toHaveBeenNthCalledWith(2, "profile-1", 10);
|
|
202
|
-
expect(updateCommercialConditionMock).toHaveBeenCalledWith("profile-1", 10, {
|
|
203
|
-
Name: "12 cuotas"
|
|
204
|
-
});
|
|
205
|
-
expect(buildWriteSuccessResponseMock).toHaveBeenNthCalledWith(
|
|
206
|
-
2,
|
|
207
|
-
expect.objectContaining({
|
|
208
|
-
operation: "commercial_conditions_update",
|
|
209
|
-
resourceId: "10",
|
|
210
|
-
message: "Commercial condition updated. Review linked payment rules and checkout behavior to confirm the intended installment strategy.",
|
|
211
|
-
before: {
|
|
212
|
-
id: 10,
|
|
213
|
-
name: "9 cuotas",
|
|
214
|
-
description: "Promo base",
|
|
215
|
-
isActive: true
|
|
216
|
-
},
|
|
217
|
-
after: {
|
|
218
|
-
id: 10,
|
|
219
|
-
Name: "12 cuotas",
|
|
220
|
-
Description: "Promo base",
|
|
221
|
-
IsActive: true
|
|
222
|
-
}
|
|
223
|
-
})
|
|
224
|
-
);
|
|
225
|
-
expect(deleteCommercialConditionMock).toHaveBeenCalledWith("profile-1", 10);
|
|
226
|
-
expect(created).toMatchObject({
|
|
227
|
-
kind: "write",
|
|
228
|
-
value: {
|
|
229
|
-
operation: "commercial_conditions_create",
|
|
230
|
-
riskLevel: "low",
|
|
231
|
-
message: "Commercial condition created. You can now link it to payment rules or SKU assignments as needed."
|
|
232
|
-
}
|
|
233
|
-
});
|
|
234
|
-
expect(updated).toMatchObject({
|
|
235
|
-
kind: "write",
|
|
236
|
-
value: {
|
|
237
|
-
operation: "commercial_conditions_update",
|
|
238
|
-
riskLevel: "medium",
|
|
239
|
-
message: "Commercial condition updated. Review linked payment rules and checkout behavior to confirm the intended installment strategy."
|
|
240
|
-
}
|
|
241
|
-
});
|
|
242
|
-
expect(deleted).toMatchObject({
|
|
243
|
-
kind: "write",
|
|
244
|
-
value: {
|
|
245
|
-
operation: "commercial_conditions_delete",
|
|
246
|
-
riskLevel: "high",
|
|
247
|
-
warnings: [
|
|
248
|
-
"Deleting a commercial condition can break linked payment rules and installment visibility until dependent rules are updated."
|
|
249
|
-
]
|
|
250
|
-
}
|
|
251
|
-
});
|
|
252
|
-
expect(JSON.stringify(created)).not.toContain("sandbox");
|
|
253
|
-
expect(JSON.stringify(created)).not.toContain("production");
|
|
254
|
-
expect(JSON.stringify(created)).not.toContain("legacy");
|
|
255
|
-
expect(JSON.stringify(updated)).not.toContain("sandbox");
|
|
256
|
-
expect(JSON.stringify(updated)).not.toContain("production");
|
|
257
|
-
expect(JSON.stringify(updated)).not.toContain("legacy");
|
|
258
|
-
});
|
|
259
|
-
it("requires explicit confirmation before deleting a commercial condition", async () => {
|
|
260
|
-
requireExplicitConfirmationMock.mockReturnValueOnce({
|
|
261
|
-
kind: "object",
|
|
262
|
-
value: { success: false, risk_level: "high" }
|
|
263
|
-
});
|
|
264
|
-
const result = await module.commercialConditionsHandler({
|
|
265
|
-
action: "delete",
|
|
266
|
-
profileId: "profile-1",
|
|
267
|
-
commercialConditionId: 10
|
|
268
|
-
});
|
|
269
|
-
expect(deleteCommercialConditionMock).not.toHaveBeenCalled();
|
|
270
|
-
expect(result).toEqual({
|
|
271
|
-
kind: "object",
|
|
272
|
-
value: { success: false, risk_level: "high" }
|
|
273
|
-
});
|
|
274
105
|
});
|
|
275
106
|
});
|
|
276
107
|
//# sourceMappingURL=commercial-conditions.test.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../src/tools/vtex/__tests__/commercial-conditions.test.ts"],
|
|
4
|
-
"sourcesContent": ["import { z } from \"zod\";\nimport { beforeEach, describe, expect, it, vi } from \"vitest\";\n\nconst objectMock = vi.fn((value) => ({ kind: \"object\", value }));\nconst errorMock = vi.fn((message) => ({ kind: \"error\", message }));\nconst listCommercialConditionsMock = vi.fn();\nconst getCommercialConditionMock = vi.fn();\nconst createCommercialConditionMock = vi.fn();\nconst updateCommercialConditionMock = vi.fn();\nconst deleteCommercialConditionMock = vi.fn();\nconst resolveVtexWriteProfileMock = vi.fn();\nconst buildWriteSuccessResponseMock = vi.fn((value) => ({ kind: \"write\", value }));\nconst handleVtexWriteErrorMock = vi.fn((_err, fallback) => ({ kind: \"error\", message: fallback }));\nconst requireExplicitConfirmationMock = vi.fn();\n\nvi.mock(\"mcp-use/server\", () => ({\n object: objectMock,\n error: errorMock,\n}));\n\nvi.mock(\"../../../services/vtex/vtex-payments.js\", () => ({\n listCommercialConditions: listCommercialConditionsMock,\n getCommercialCondition: getCommercialConditionMock,\n}));\n\nvi.mock(\"../../../services/vtex/vtex-payments-write.js\", () => ({\n createCommercialCondition: createCommercialConditionMock,\n updateCommercialCondition: updateCommercialConditionMock,\n deleteCommercialCondition: deleteCommercialConditionMock,\n}));\n\nvi.mock(\"../write-helpers.js\", () => ({\n confirmationSchemaField: z.boolean().optional().describe(\"confirmed\"),\n resolveVtexWriteProfile: resolveVtexWriteProfileMock,\n buildWriteSuccessResponse: buildWriteSuccessResponseMock,\n handleVtexWriteError: handleVtexWriteErrorMock,\n requireExplicitConfirmation: requireExplicitConfirmationMock,\n}));\n\nconst module = await import(\"../commercial-conditions.js\");\n\ndescribe(\"vtex_commercial_conditions tool\", () => {\n beforeEach(() => {\n vi.clearAllMocks();\n resolveVtexWriteProfileMock.mockResolvedValue({\n ok: true,\n value: { profileId: \"profile-1\" },\n });\n requireExplicitConfirmationMock.mockReturnValue(null);\n });\n\n it(\"requires profileId and validates numeric commercialConditionId across actions\", () => {\n expect(() => module.commercialConditionsSchema.parse({ action: \"list\" })).toThrow();\n expect(() =>\n module.commercialConditionsSchema.parse({\n action: \"get\",\n profileId: \"profile-1\",\n commercialConditionId: 1.5,\n })\n ).toThrow();\n\n expect(\n module.commercialConditionsSchema.parse({\n action: \"list\",\n profileId: \"profile-1\",\n search: \"9 cuotas\",\n })\n ).toEqual({\n action: \"list\",\n profileId: \"profile-1\",\n search: \"9 cuotas\",\n });\n\n expect(\n module.commercialConditionsSchema.parse({\n action: \"get\",\n profileId: \"profile-1\",\n commercialConditionId: 10,\n })\n ).toEqual({\n action: \"get\",\n profileId: \"profile-1\",\n commercialConditionId: 10,\n });\n\n expect(\n module.commercialConditionsSchema.parse({\n action: \"create\",\n profileId: \"profile-1\",\n name: \"9 cuotas\",\n })\n ).toEqual({\n action: \"create\",\n profileId: \"profile-1\",\n name: \"9 cuotas\",\n });\n\n expect(\n module.commercialConditionsSchema.parse({\n action: \"update\",\n profileId: \"profile-1\",\n commercialConditionId: 10,\n name: \"12 cuotas\",\n })\n ).toEqual({\n action: \"update\",\n profileId: \"profile-1\",\n commercialConditionId: 10,\n name: \"12 cuotas\",\n });\n\n expect(\n module.commercialConditionsSchema.parse({\n action: \"delete\",\n profileId: \"profile-1\",\n commercialConditionId: 10,\n confirmed: true,\n })\n ).toEqual({\n action: \"delete\",\n profileId: \"profile-1\",\n commercialConditionId: 10,\n confirmed: true,\n });\n });\n\n it(\"returns compact list responses for commercial conditions\", async () => {\n listCommercialConditionsMock.mockResolvedValue([\n { id: 10, name: \"9 cuotas\", isActive: true },\n { id: 11, name: \"12 cuotas\", IsActive: false },\n ]);\n\n const result = await module.commercialConditionsHandler({\n action: \"list\",\n profileId: \"profile-1\",\n search: \"cuotas\",\n });\n\n expect(listCommercialConditionsMock).toHaveBeenCalledWith(\"profile-1\", \"cuotas\");\n expect(result).toEqual({\n kind: \"object\",\n value: {\n metadata: {\n total: 2,\n profile_id: \"profile-1\",\n search: \"cuotas\",\n },\n conditions_schema: [\"id\", \"name\", \"is_active\"],\n conditions: [\n [10, \"9 cuotas\", true],\n [11, \"12 cuotas\", false],\n ],\n },\n });\n });\n\n it(\"creates, updates, gets and deletes commercial conditions through the service layer\", async () => {\n getCommercialConditionMock.mockResolvedValueOnce({ id: 10, name: \"9 cuotas\", isActive: true });\n getCommercialConditionMock.mockResolvedValueOnce({\n id: 10,\n name: \"9 cuotas\",\n description: \"Promo base\",\n isActive: true,\n });\n createCommercialConditionMock.mockResolvedValue({ id: 10, Name: \"9 cuotas\" });\n updateCommercialConditionMock.mockResolvedValue({\n id: 10,\n Name: \"12 cuotas\",\n Description: \"Promo base\",\n IsActive: true,\n });\n deleteCommercialConditionMock.mockResolvedValue(undefined);\n\n const fetched = await module.commercialConditionsHandler({\n action: \"get\",\n profileId: \"profile-1\",\n commercialConditionId: 10,\n });\n const created = await module.commercialConditionsHandler({\n action: \"create\",\n profileId: \"profile-1\",\n name: \"9 cuotas\",\n description: \"Promo\",\n });\n const updated = await module.commercialConditionsHandler({\n action: \"update\",\n profileId: \"profile-1\",\n commercialConditionId: 10,\n name: \"12 cuotas\",\n });\n const deleted = await module.commercialConditionsHandler({\n action: \"delete\",\n profileId: \"profile-1\",\n commercialConditionId: 10,\n confirmed: true,\n });\n\n expect(getCommercialConditionMock).toHaveBeenCalledWith(\"profile-1\", 10);\n expect(fetched).toEqual({\n kind: \"object\",\n value: {\n profile_id: \"profile-1\",\n commercial_condition_id: 10,\n condition: { id: 10, name: \"9 cuotas\", is_active: true },\n },\n });\n expect(createCommercialConditionMock).toHaveBeenCalledWith(\"profile-1\", {\n Name: \"9 cuotas\",\n Description: \"Promo\",\n });\n expect(buildWriteSuccessResponseMock).toHaveBeenNthCalledWith(\n 1,\n expect.objectContaining({\n operation: \"commercial_conditions_create\",\n resourceId: \"10\",\n message:\n \"Commercial condition created. You can now link it to payment rules or SKU assignments as needed.\",\n after: { id: 10, Name: \"9 cuotas\" },\n })\n );\n expect(getCommercialConditionMock).toHaveBeenNthCalledWith(2, \"profile-1\", 10);\n expect(updateCommercialConditionMock).toHaveBeenCalledWith(\"profile-1\", 10, {\n Name: \"12 cuotas\",\n });\n expect(buildWriteSuccessResponseMock).toHaveBeenNthCalledWith(\n 2,\n expect.objectContaining({\n operation: \"commercial_conditions_update\",\n resourceId: \"10\",\n message:\n \"Commercial condition updated. Review linked payment rules and checkout behavior to confirm the intended installment strategy.\",\n before: {\n id: 10,\n name: \"9 cuotas\",\n description: \"Promo base\",\n isActive: true,\n },\n after: {\n id: 10,\n Name: \"12 cuotas\",\n Description: \"Promo base\",\n IsActive: true,\n },\n })\n );\n expect(deleteCommercialConditionMock).toHaveBeenCalledWith(\"profile-1\", 10);\n expect(created).toMatchObject({\n kind: \"write\",\n value: {\n operation: \"commercial_conditions_create\",\n riskLevel: \"low\",\n message:\n \"Commercial condition created. You can now link it to payment rules or SKU assignments as needed.\",\n },\n });\n expect(updated).toMatchObject({\n kind: \"write\",\n value: {\n operation: \"commercial_conditions_update\",\n riskLevel: \"medium\",\n message:\n \"Commercial condition updated. Review linked payment rules and checkout behavior to confirm the intended installment strategy.\",\n },\n });\n expect(deleted).toMatchObject({\n kind: \"write\",\n value: {\n operation: \"commercial_conditions_delete\",\n riskLevel: \"high\",\n warnings: [\n \"Deleting a commercial condition can break linked payment rules and installment visibility until dependent rules are updated.\",\n ],\n },\n });\n expect(JSON.stringify(created)).not.toContain(\"sandbox\");\n expect(JSON.stringify(created)).not.toContain(\"production\");\n expect(JSON.stringify(created)).not.toContain(\"legacy\");\n expect(JSON.stringify(updated)).not.toContain(\"sandbox\");\n expect(JSON.stringify(updated)).not.toContain(\"production\");\n expect(JSON.stringify(updated)).not.toContain(\"legacy\");\n });\n\n it(\"requires explicit confirmation before deleting a commercial condition\", async () => {\n requireExplicitConfirmationMock.mockReturnValueOnce({\n kind: \"object\",\n value: { success: false, risk_level: \"high\" },\n });\n\n const result = await module.commercialConditionsHandler({\n action: \"delete\",\n profileId: \"profile-1\",\n commercialConditionId: 10,\n });\n\n expect(deleteCommercialConditionMock).not.toHaveBeenCalled();\n expect(result).toEqual({\n kind: \"object\",\n value: { success: false, risk_level: \"high\" },\n });\n });\n});\n"],
|
|
5
|
-
"mappings": "AAAA,SAAS,SAAS;AAClB,SAAS,YAAY,UAAU,QAAQ,IAAI,UAAU;AAErD,MAAM,aAAa,GAAG,GAAG,CAAC,WAAW,EAAE,MAAM,UAAU,MAAM,EAAE;AAC/D,MAAM,YAAY,GAAG,GAAG,CAAC,aAAa,EAAE,MAAM,SAAS,QAAQ,EAAE;AACjE,MAAM,+BAA+B,GAAG,GAAG;AAC3C,MAAM,6BAA6B,GAAG,GAAG;
|
|
4
|
+
"sourcesContent": ["import { z } from \"zod\";\nimport { beforeEach, describe, expect, it, vi } from \"vitest\";\n\nconst objectMock = vi.fn((value) => ({ kind: \"object\", value }));\nconst errorMock = vi.fn((message) => ({ kind: \"error\", message }));\nconst listCommercialConditionsMock = vi.fn();\nconst getCommercialConditionMock = vi.fn();\n\nvi.mock(\"mcp-use/server\", () => ({\n object: objectMock,\n error: errorMock,\n}));\n\nvi.mock(\"../../../services/vtex/vtex-payments.js\", () => ({\n listCommercialConditions: listCommercialConditionsMock,\n getCommercialCondition: getCommercialConditionMock,\n}));\n\nvi.mock(\"../write-helpers.js\", () => ({\n vtexProfileIdSchemaField: z.string().trim().min(1).optional().describe(\"profile\"),\n}));\n\nconst module = await import(\"../commercial-conditions.js\");\n\ndescribe(\"vtex_commercial_conditions tool\", () => {\n beforeEach(() => {\n vi.clearAllMocks();\n });\n\n it(\"requires profileId and validates numeric commercialConditionId across actions\", () => {\n expect(() => module.commercialConditionsSchema.parse({ action: \"list\" })).toThrow();\n expect(() =>\n module.commercialConditionsSchema.parse({\n action: \"get\",\n profileId: \"profile-1\",\n commercialConditionId: 1.5,\n })\n ).toThrow();\n\n expect(\n module.commercialConditionsSchema.parse({\n action: \"list\",\n profileId: \"profile-1\",\n search: \"9 cuotas\",\n })\n ).toEqual({\n action: \"list\",\n profileId: \"profile-1\",\n search: \"9 cuotas\",\n });\n\n expect(\n module.commercialConditionsSchema.parse({\n action: \"get\",\n profileId: \"profile-1\",\n commercialConditionId: 10,\n })\n ).toEqual({\n action: \"get\",\n profileId: \"profile-1\",\n commercialConditionId: 10,\n });\n\n expect(() =>\n module.commercialConditionsSchema.parse({\n action: \"create\",\n profileId: \"profile-1\",\n name: \"9 cuotas\",\n })\n ).toThrow();\n });\n\n it(\"returns compact list responses for commercial conditions\", async () => {\n listCommercialConditionsMock.mockResolvedValue([\n { id: 10, name: \"9 cuotas\", isActive: true },\n { id: 11, name: \"12 cuotas\", IsActive: false },\n ]);\n\n const result = await module.commercialConditionsHandler({\n action: \"list\",\n profileId: \"profile-1\",\n search: \"cuotas\",\n });\n\n expect(listCommercialConditionsMock).toHaveBeenCalledWith(\"profile-1\", \"cuotas\");\n expect(result).toEqual({\n kind: \"object\",\n value: {\n metadata: {\n total: 2,\n profile_id: \"profile-1\",\n search: \"cuotas\",\n },\n conditions_schema: [\"id\", \"name\", \"is_active\"],\n conditions: [\n [10, \"9 cuotas\", true],\n [11, \"12 cuotas\", false],\n ],\n },\n });\n });\n\n it(\"gets commercial conditions through the service layer\", async () => {\n getCommercialConditionMock.mockResolvedValueOnce({ id: 10, name: \"9 cuotas\", isActive: true });\n\n const fetched = await module.commercialConditionsHandler({\n action: \"get\",\n profileId: \"profile-1\",\n commercialConditionId: 10,\n });\n\n expect(getCommercialConditionMock).toHaveBeenCalledWith(\"profile-1\", 10);\n expect(fetched).toEqual({\n kind: \"object\",\n value: {\n profile_id: \"profile-1\",\n commercial_condition_id: 10,\n condition: { id: 10, name: \"9 cuotas\", is_active: true },\n },\n });\n });\n});\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -25,6 +25,7 @@ vi.mock("../../../services/vtex/vtex-payments-write.js", () => ({
|
|
|
25
25
|
deletePaymentRule: deletePaymentRuleMock
|
|
26
26
|
}));
|
|
27
27
|
vi.mock("../write-helpers.js", () => ({
|
|
28
|
+
vtexProfileIdSchemaField: z.string().trim().min(1).optional().describe("profile"),
|
|
28
29
|
confirmationSchemaField: z.boolean().optional().describe("confirmed"),
|
|
29
30
|
resolveVtexWriteProfile: resolveVtexWriteProfileMock,
|
|
30
31
|
buildWriteSuccessResponse: buildWriteSuccessResponseMock,
|