@yoryoboy/bi-mcp 1.14.3 → 1.16.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/.tsbuildinfo +1 -1
- package/dist/index.js +12 -1
- package/dist/index.js.map +2 -2
- package/dist/mcp-use.json +2 -2
- package/dist/src/services/mercadolibre/mercadolibre-billing.js +99 -1
- package/dist/src/services/mercadolibre/mercadolibre-billing.js.map +2 -2
- package/dist/src/tools/mercadolibre/get-billing-provisions-summary.js +391 -0
- package/dist/src/tools/mercadolibre/get-billing-provisions-summary.js.map +7 -0
- package/dist/src/tools/mercadolibre/get-order-details.js +18 -4
- package/dist/src/tools/mercadolibre/get-order-details.js.map +2 -2
- package/dist/src/tools/mercadolibre/get-orders-summary.js +6 -2
- package/dist/src/tools/mercadolibre/get-orders-summary.js.map +2 -2
- package/dist/src/tools/mercadolibre/get-shipping-summary.js +50 -14
- package/dist/src/tools/mercadolibre/get-shipping-summary.js.map +2 -2
- package/dist/src/tools/mercadolibre/index.js +1 -0
- package/dist/src/tools/mercadolibre/index.js.map +2 -2
- package/dist/tests/meli/mercadolibre-billing-provisions.test.js +940 -0
- package/dist/tests/meli/mercadolibre-billing-provisions.test.js.map +7 -0
- package/dist/tests/meli/mercadolibre-tool-handlers-medium-batch4.test.js +16 -4
- package/dist/tests/meli/mercadolibre-tool-handlers-medium-batch4.test.js.map +2 -2
- package/dist/tests/meli/mercadolibre-tool-handlers-monster-batch5.test.js +25 -3
- package/dist/tests/meli/mercadolibre-tool-handlers-monster-batch5.test.js.map +2 -2
- package/dist/tests/meli/mercadolibre-tool-handlers-monster-batch6.test.js +141 -5
- package/dist/tests/meli/mercadolibre-tool-handlers-monster-batch6.test.js.map +2 -2
- package/dist/tests/meli/mercadolibre-tool-handlers-monster-batch7.test.js +3 -2
- package/dist/tests/meli/mercadolibre-tool-handlers-monster-batch7.test.js.map +2 -2
- package/dist/vitest.config.js +3 -1
- package/dist/vitest.config.js.map +2 -2
- package/package.json +1 -1
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../tests/meli/mercadolibre-tool-handlers-monster-batch5.test.ts"],
|
|
4
|
-
"sourcesContent": ["import { beforeEach, describe, expect, it, vi } from \"vitest\";\n\nimport { meliGetOrdersSummaryHandler } from \"../../src/tools/mercadolibre/get-orders-summary.js\";\nimport { resolveMercadoLibreProfileOrSelection } from \"../../src/tools/mercadolibre/profile-resolution.js\";\nimport {\n buildMercadoLibrePaginationMetadata,\n formatMercadoLibreError,\n normalizeMercadoLibrePaging,\n} from \"../../src/services/mercadolibre/mercadolibre-api.js\";\nimport {\n searchMercadoLibreOrders,\n searchMercadoLibreOrdersBatch,\n} from \"../../src/services/mercadolibre/mercadolibre-orders.js\";\n\nvi.mock(\"mcp-use/server\", () => ({\n object: vi.fn((payload: unknown) => ({ kind: \"object\", payload })),\n error: vi.fn((message: string) => ({ kind: \"error\", message })),\n}));\n\nvi.mock(\"../../src/tools/mercadolibre/profile-resolution.js\", () => ({\n resolveMercadoLibreProfileOrSelection: vi.fn(),\n}));\n\nvi.mock(\"../../src/services/mercadolibre/mercadolibre-api.js\", () => ({\n formatMercadoLibreError: vi.fn(\n (err: unknown, fallback: string) =>\n `formatted:${fallback}:${err instanceof Error ? err.message : String(err)}`\n ),\n normalizeMercadoLibrePaging: vi.fn((paging: unknown) => paging),\n buildMercadoLibrePaginationMetadata: vi.fn((metadata: unknown) => {\n const params = metadata as {\n total: number;\n limit: number;\n offset: number;\n returned: number;\n };\n return {\n pagination_source: \"service\",\n total: params.total,\n limit: params.limit,\n offset: params.offset,\n returned: params.returned,\n has_more: params.offset + params.returned < params.total,\n continuation:\n params.offset + params.returned < params.total\n ? `Reenviar la misma tool con offset=${params.offset + params.limit} para continuar.`\n : \"No more pages for this query.\",\n };\n }),\n}));\n\nvi.mock(\"../../src/services/mercadolibre/mercadolibre-orders.js\", () => ({\n searchMercadoLibreOrders: vi.fn(),\n searchMercadoLibreOrdersBatch: vi.fn(),\n}));\n\nfunction buildOrder(overrides: Record<string, unknown> = {}) {\n return {\n id: \"2001\",\n date_created: \"2026-03-01T10:15:30.000Z\",\n date_closed: \"2026-03-02T12:00:00.000Z\",\n last_updated: \"2026-03-03T18:45:00.000Z\",\n status: \"paid\",\n total_amount: 150.5,\n paid_amount: 145.25,\n currency_id: \"ARS\",\n fulfilled: true,\n pack_id: \"PACK-1\",\n tags: [\"delivered\", \"catalog\"],\n buyer: {\n id: 7001,\n nickname: \"buyer-one\",\n },\n seller: {\n id: 9001,\n nickname: \"meli-store\",\n },\n shipping: {\n id: 3001,\n status: \"delivered\",\n },\n payments: [\n {\n id: 5001,\n status: \"approved\",\n status_detail: \"accredited\",\n payment_method_id: \"visa\",\n payment_type: \"credit_card\",\n total_paid_amount: 145.25,\n transaction_amount: 150.5,\n installments: 3,\n available_actions: [\"refund\", \"capture\"],\n },\n ],\n coupon: {\n amount: 5.25,\n },\n context: {\n channel: \"marketplace\",\n site: \"MLA\",\n flows: [\"catalog\"],\n },\n feedback: {\n buyer: { status: \"positive\", reason: \"fast\" },\n seller: { status: \"neutral\" },\n },\n order_request: {\n change: { status: \"open\", reason: \"size\" },\n return: { status: \"closed\" },\n },\n order_items: [\n {\n quantity: 2,\n unit_price: 75.25,\n sale_fee: 10.1,\n listing_type_id: \"gold_special\",\n stock: { node_id: \"warehouse-1\" },\n item: {\n id: \"MLA-1\",\n title: \"Running Shoe\",\n seller_sku: \"SKU-1\",\n variation_attributes: [\n { name: \"Color\", value_name: \"Red\" },\n { id: \"SIZE\", value_id: \"42\" },\n ],\n },\n },\n ],\n ...overrides,\n };\n}\n\ndescribe(\"MercadoLibre monster tool handlers batch 5\", () => {\n beforeEach(() => {\n vi.clearAllMocks();\n\n vi.mocked(resolveMercadoLibreProfileOrSelection).mockResolvedValue({\n ok: true,\n value: { profileId: \"meli-profile-1\" },\n });\n\n vi.mocked(normalizeMercadoLibrePaging).mockImplementation((paging) => paging as never);\n vi.mocked(buildMercadoLibrePaginationMetadata).mockImplementation(\n ((metadata: unknown) => {\n const params = metadata as {\n total: number;\n limit: number;\n offset: number;\n returned: number;\n };\n return {\n pagination_source: \"service\",\n total: params.total,\n limit: params.limit,\n offset: params.offset,\n returned: params.returned,\n has_more: params.offset + params.returned < params.total,\n continuation:\n params.offset + params.returned < params.total\n ? `Reenviar la misma tool con offset=${params.offset + params.limit} para continuar.`\n : \"No more pages for this query.\",\n };\n }) as never\n );\n });\n\n it(\"returns compact order rows with normalized nested values and explicit optional filters\", async () => {\n vi.mocked(searchMercadoLibreOrders).mockResolvedValue({\n paging: { total: 1, limit: 1, offset: 2 },\n results: [buildOrder()],\n } as never);\n vi.mocked(searchMercadoLibreOrdersBatch).mockResolvedValue({ successful: [], failed: [] } as never);\n\n const result = await meliGetOrdersSummaryHandler({\n profileId: \"custom-profile\",\n startDate: \"2026-03-01\",\n endDate: \"2026-03-31\",\n responseMode: \"orders_chunk\",\n status: \"paid\",\n q: \"SKU-1\",\n sort: \"date_desc\",\n offset: 2,\n limit: 1,\n });\n\n expect(resolveMercadoLibreProfileOrSelection).toHaveBeenCalledWith(\"custom-profile\");\n expect(searchMercadoLibreOrders).toHaveBeenCalledWith(\"meli-profile-1\", {\n seller: \"\",\n from: \"2026-03-01\",\n to: \"2026-03-31\",\n status: \"paid\",\n q: \"SKU-1\",\n sort: \"date_desc\",\n offset: 2,\n limit: 1,\n });\n expect(searchMercadoLibreOrdersBatch).not.toHaveBeenCalled();\n expect(result).toEqual({\n kind: \"object\",\n payload: {\n profile_id: \"meli-profile-1\",\n metadata: {\n pagination_source: \"service\",\n total: 1,\n limit: 1,\n offset: 2,\n returned: 1,\n has_more: false,\n continuation: \"No more pages for this query.\",\n fetch_mode: \"orders_chunk\",\n pages_per_call_limit: 15,\n pages_requested: 1,\n pages_succeeded: 1,\n pages_failed: 0,\n universe_fully_fetched: false,\n },\n metrics_by_currency: {\n ARS: { orders: 1, revenue: 150.5, avg_order_value: 150.5 },\n },\n orders_schema: [\n \"id\",\n \"date_created\",\n \"status\",\n \"total_amount\",\n \"currency\",\n \"buyer\",\n \"shipping_status\",\n \"items\",\n \"date_closed\",\n \"last_updated\",\n \"paid_amount\",\n \"buyer_id\",\n \"seller\",\n \"seller_id\",\n \"shipping_id\",\n \"pack_id\",\n \"fulfilled\",\n \"tags\",\n \"channel\",\n \"site\",\n \"payment_id\",\n \"payment_status\",\n \"payment_status_detail\",\n \"payment_method\",\n \"payment_type\",\n \"payment_total_paid\",\n \"payment_transaction_amount\",\n \"installments\",\n \"coupon_amount\",\n \"available_actions\",\n \"feedback_buyer\",\n \"feedback_seller\",\n \"order_request_change\",\n \"order_request_return\",\n \"first_item_id\",\n \"first_item_title\",\n \"first_item_sku\",\n \"first_item_quantity\",\n \"first_item_unit_price\",\n \"first_item_sale_fee\",\n \"first_item_listing_type\",\n \"variation_attributes\",\n \"stock_node_id\",\n ],\n orders: [\n [\n \"2001\",\n \"2026-03-01 10:15\",\n \"paid\",\n 150.5,\n \"ARS\",\n \"buyer-one\",\n \"delivered\",\n 1,\n \"2026-03-02 12:00\",\n \"2026-03-03 18:45\",\n 145.25,\n \"7001\",\n \"meli-store\",\n \"9001\",\n \"3001\",\n \"PACK-1\",\n true,\n \"delivered | catalog\",\n \"marketplace\",\n \"MLA\",\n \"5001\",\n \"approved\",\n \"accredited\",\n \"visa\",\n \"credit_card\",\n 145.25,\n 150.5,\n 3,\n 5.25,\n \"refund | capture\",\n \"status:positive | reason:fast\",\n \"status:neutral\",\n \"status:open | reason:size\",\n \"status:closed\",\n \"MLA-1\",\n \"Running Shoe\",\n \"SKU-1\",\n 2,\n 75.25,\n 10.1,\n \"gold_special\",\n \"Color: Red | SIZE: 42\",\n \"warehouse-1\",\n ],\n ],\n },\n });\n });\n\n it(\"reports partial page failures for orders_chunk and keeps failed-page guidance\", async () => {\n vi.mocked(searchMercadoLibreOrders).mockResolvedValue({\n paging: { total: 25, limit: 10, offset: 0 },\n results: [buildOrder()],\n } as never);\n vi.mocked(searchMercadoLibreOrdersBatch).mockResolvedValue({\n successful: [\n {\n id: \"10\",\n document: {\n results: [\n buildOrder({\n id: \"2002\",\n total_amount: 50,\n paid_amount: 50,\n currency_id: \"USD\",\n buyer: { id: 7002, nickname: \"buyer-two\" },\n seller: { id: 9001, nickname: \"meli-store\" },\n }),\n ],\n },\n },\n ],\n failed: [\n {\n id: \"20\",\n message: \"rate limited\",\n statusCode: 429,\n attempts: 3,\n retryable: true,\n },\n ],\n } as never);\n\n const result = await meliGetOrdersSummaryHandler({\n profileId: \"meli-profile-1\",\n startDate: \"2026-03-01\",\n endDate: \"2026-03-31\",\n responseMode: \"orders_chunk\",\n limit: 10,\n offset: 0,\n });\n\n expect(searchMercadoLibreOrdersBatch).toHaveBeenCalledWith(\n \"meli-profile-1\",\n {\n seller: \"\",\n from: \"2026-03-01\",\n to: \"2026-03-31\",\n status: undefined,\n q: undefined,\n sort: undefined,\n limit: 10,\n },\n [10, 20],\n {\n maxConcurrency: 15,\n maxRetries: 2,\n }\n );\n expect(result).toEqual({\n kind: \"object\",\n payload: expect.objectContaining({\n profile_id: \"meli-profile-1\",\n metrics_by_currency: {\n ARS: { orders: 1, revenue: 150.5, avg_order_value: 150.5 },\n USD: { orders: 1, revenue: 50, avg_order_value: 50 },\n },\n failed_pages: [\n {\n offset: 20,\n limit: 10,\n page_number: 3,\n message: \"rate limited\",\n status_code: 429,\n attempts: 3,\n retryable: true,\n },\n ],\n metadata: expect.objectContaining({\n pagination_source: \"service\",\n total: 25,\n limit: 10,\n offset: 0,\n returned: 2,\n has_more: true,\n fetch_mode: \"orders_chunk\",\n pages_per_call_limit: 15,\n pages_requested: 3,\n pages_succeeded: 2,\n pages_failed: 1,\n universe_fully_fetched: false,\n continuation:\n 'Se recuperaron paginas parciales. Reintentar primero la misma tool con responseMode=\"orders_chunk\", offset=20 y limit=10. Offsets fallidos: 20. Luego continuar con offset=30 si hace falta.',\n }),\n }),\n });\n });\n\n it(\"returns calculation mode by default with stable coverage metadata and aggregate slices\", async () => {\n vi.mocked(searchMercadoLibreOrders).mockResolvedValue({\n paging: { total: 3, limit: 2, offset: 0 },\n results: [\n buildOrder(),\n buildOrder({\n id: \"2003\",\n total_amount: 80,\n paid_amount: 80,\n buyer: { id: 7003, nickname: \"buyer-three\" },\n payments: [\n {\n id: 5003,\n status: \"approved\",\n status_detail: \"accredited\",\n payment_method_id: \"master\",\n payment_type: \"debit_card\",\n total_paid_amount: 80,\n transaction_amount: 80,\n installments: 1,\n available_actions: [],\n },\n ],\n tags: [\"delivered\", \"order_has_discount\"],\n coupon: { amount: 0 },\n }),\n ],\n } as never);\n vi.mocked(searchMercadoLibreOrdersBatch).mockResolvedValue({\n successful: [\n {\n id: \"2\",\n document: {\n results: [\n buildOrder({\n id: \"2004\",\n status: \"cancelled\",\n total_amount: 40,\n paid_amount: 0,\n tags: [\"not_delivered\"],\n payments: [\n {\n id: 5004,\n status: \"refunded\",\n status_detail: \"reversed\",\n payment_method_id: \"account_money\",\n payment_type: \"account_money\",\n total_paid_amount: 0,\n transaction_amount: 40,\n transaction_amount_refunded: 40,\n shipping_cost: 10,\n coupon_amount: 3,\n installments: 1,\n available_actions: [],\n },\n ],\n cancel_detail: {\n group: \"shipment\",\n code: \"lost\",\n requested_by: \"seller\",\n },\n buyer: { id: 7004, nickname: \"buyer-four\" },\n }),\n ],\n },\n },\n ],\n failed: [],\n } as never);\n\n const result = await meliGetOrdersSummaryHandler({\n profileId: \"meli-profile-1\",\n startDate: \"2026-03-01\",\n endDate: \"2026-03-31\",\n responseMode: \"calculations\",\n });\n\n expect(searchMercadoLibreOrders).toHaveBeenCalledWith(\"meli-profile-1\", {\n seller: \"\",\n from: \"2026-03-01\",\n to: \"2026-03-31\",\n status: undefined,\n q: undefined,\n sort: undefined,\n offset: 0,\n limit: 50,\n });\n expect(result).toEqual({\n kind: \"object\",\n payload: expect.objectContaining({\n profile_id: \"meli-profile-1\",\n metadata: {\n total: 3,\n limit: 2,\n offset: 0,\n returned: 3,\n has_more: false,\n continuation:\n 'Calculos completos. Si el usuario pide detalle de ordenes, invocar la misma tool con responseMode=\"orders_chunk\", offset=0 y limit=50.',\n fetch_mode: \"full_calculations\",\n pages_requested: 2,\n pages_succeeded: 2,\n pages_failed: 0,\n universe_fully_fetched: true,\n },\n metrics_by_currency: {\n ARS: { orders: 3, revenue: 270.5, avg_order_value: 90.17 },\n },\n calculations: expect.objectContaining({\n overview: expect.objectContaining({\n orders_total: 3,\n units_total: 6,\n distinct_items_total: 1,\n distinct_buyers_total: 3,\n fulfilled_orders: 3,\n delivered_orders: 2,\n orders_with_discount: 1,\n }),\n financial_by_currency: {\n ARS: expect.objectContaining({\n revenue_total: 270.5,\n paid_amount_total: 225.25,\n avg_order_value: 90.17,\n }),\n },\n coverage: {\n fetch_mode: \"full_calculations\",\n universe_fully_fetched: true,\n orders_returned: 3,\n pages_requested: 2,\n pages_succeeded: 2,\n pages_failed: 0,\n failed_pages_count: 0,\n },\n refunds_cancellations: expect.objectContaining({\n cancel_group_breakdown: expect.objectContaining({\n entries: [{ key: \"shipment\", orders: 1, rate: 0.3333 }],\n }),\n }),\n shipping_and_discounts: expect.objectContaining({\n by_currency: expect.objectContaining({\n ARS: expect.objectContaining({\n orders_with_shipping_cost: 1,\n orders_with_coupon: 2,\n not_delivered_orders: 1,\n }),\n }),\n }),\n }),\n }),\n });\n expect((result as unknown as { payload: Record<string, unknown> }).payload.orders_schema).toBeUndefined();\n expect((result as unknown as { payload: Record<string, unknown> }).payload.orders).toBeUndefined();\n });\n\n it(\"returns profile selection responses unchanged before hitting services\", async () => {\n vi.mocked(resolveMercadoLibreProfileOrSelection).mockResolvedValue({\n ok: false,\n response: { selection_required: true, provider: \"mercadolibre\" },\n } as never);\n\n const result = await meliGetOrdersSummaryHandler({\n profileId: undefined,\n startDate: \"2026-03-01\",\n endDate: \"2026-03-31\",\n responseMode: \"calculations\",\n });\n\n expect(result).toEqual({ selection_required: true, provider: \"mercadolibre\" });\n expect(searchMercadoLibreOrders).not.toHaveBeenCalled();\n });\n\n it(\"formats unexpected service failures through the stable error contract\", async () => {\n vi.mocked(searchMercadoLibreOrders).mockRejectedValue(new Error(\"boom\"));\n\n const result = await meliGetOrdersSummaryHandler({\n profileId: \"meli-profile-1\",\n startDate: \"2026-03-01\",\n endDate: \"2026-03-31\",\n responseMode: \"orders_chunk\",\n });\n\n expect(formatMercadoLibreError).toHaveBeenCalledWith(\n expect.any(Error),\n \"Failed to fetch MercadoLibre orders summary\"\n );\n expect(result).toEqual({\n kind: \"error\",\n message: \"formatted:Failed to fetch MercadoLibre orders summary:boom\",\n });\n });\n});\n"],
|
|
5
|
-
"mappings": "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",
|
|
4
|
+
"sourcesContent": ["import { beforeEach, describe, expect, it, vi } from \"vitest\";\n\nimport { meliGetOrdersSummaryHandler } from \"../../src/tools/mercadolibre/get-orders-summary.js\";\nimport { resolveMercadoLibreProfileOrSelection } from \"../../src/tools/mercadolibre/profile-resolution.js\";\nimport {\n buildMercadoLibrePaginationMetadata,\n formatMercadoLibreError,\n normalizeMercadoLibrePaging,\n} from \"../../src/services/mercadolibre/mercadolibre-api.js\";\nimport {\n searchMercadoLibreOrders,\n searchMercadoLibreOrdersBatch,\n} from \"../../src/services/mercadolibre/mercadolibre-orders.js\";\n\nvi.mock(\"mcp-use/server\", () => ({\n object: vi.fn((payload: unknown) => ({ kind: \"object\", payload })),\n error: vi.fn((message: string) => ({ kind: \"error\", message })),\n}));\n\nvi.mock(\"../../src/tools/mercadolibre/profile-resolution.js\", () => ({\n resolveMercadoLibreProfileOrSelection: vi.fn(),\n}));\n\nvi.mock(\"../../src/services/mercadolibre/mercadolibre-api.js\", () => ({\n formatMercadoLibreError: vi.fn(\n (err: unknown, fallback: string) =>\n `formatted:${fallback}:${err instanceof Error ? err.message : String(err)}`\n ),\n normalizeMercadoLibrePaging: vi.fn((paging: unknown) => paging),\n buildMercadoLibrePaginationMetadata: vi.fn((metadata: unknown) => {\n const params = metadata as {\n total: number;\n limit: number;\n offset: number;\n returned: number;\n };\n return {\n pagination_source: \"service\",\n total: params.total,\n limit: params.limit,\n offset: params.offset,\n returned: params.returned,\n has_more: params.offset + params.returned < params.total,\n continuation:\n params.offset + params.returned < params.total\n ? `Reenviar la misma tool con offset=${params.offset + params.limit} para continuar.`\n : \"No more pages for this query.\",\n };\n }),\n}));\n\nvi.mock(\"../../src/services/mercadolibre/mercadolibre-orders.js\", () => ({\n searchMercadoLibreOrders: vi.fn(),\n searchMercadoLibreOrdersBatch: vi.fn(),\n}));\n\nfunction buildOrder(overrides: Record<string, unknown> = {}) {\n return {\n id: \"2001\",\n date_created: \"2026-03-01T10:15:30.000Z\",\n date_closed: \"2026-03-02T12:00:00.000Z\",\n last_updated: \"2026-03-03T18:45:00.000Z\",\n status: \"paid\",\n total_amount: 150.5,\n paid_amount: 145.25,\n currency_id: \"ARS\",\n fulfilled: true,\n pack_id: \"PACK-1\",\n tags: [\"delivered\", \"catalog\"],\n buyer: {\n id: 7001,\n nickname: \"buyer-one\",\n },\n seller: {\n id: 9001,\n nickname: \"meli-store\",\n },\n shipping: {\n id: 3001,\n status: \"delivered\",\n },\n payments: [\n {\n id: 5001,\n status: \"approved\",\n status_detail: \"accredited\",\n payment_method_id: \"visa\",\n payment_type: \"credit_card\",\n total_paid_amount: 145.25,\n transaction_amount: 150.5,\n installments: 3,\n available_actions: [\"refund\", \"capture\"],\n },\n ],\n coupon: {\n amount: 5.25,\n },\n context: {\n channel: \"marketplace\",\n site: \"MLA\",\n flows: [\"catalog\"],\n },\n feedback: {\n buyer: { status: \"positive\", reason: \"fast\" },\n seller: { status: \"neutral\" },\n },\n order_request: {\n change: { status: \"open\", reason: \"size\" },\n return: { status: \"closed\" },\n },\n order_items: [\n {\n quantity: 2,\n unit_price: 75.25,\n sale_fee: 10.1,\n listing_type_id: \"gold_special\",\n stock: { node_id: \"warehouse-1\" },\n item: {\n id: \"MLA-1\",\n title: \"Running Shoe\",\n seller_sku: \"SKU-1\",\n variation_attributes: [\n { name: \"Color\", value_name: \"Red\" },\n { id: \"SIZE\", value_id: \"42\" },\n ],\n },\n },\n ],\n ...overrides,\n };\n}\n\ndescribe(\"MercadoLibre monster tool handlers batch 5\", () => {\n beforeEach(() => {\n vi.clearAllMocks();\n\n vi.mocked(resolveMercadoLibreProfileOrSelection).mockResolvedValue({\n ok: true,\n value: { profileId: \"meli-profile-1\" },\n });\n\n vi.mocked(normalizeMercadoLibrePaging).mockImplementation((paging) => paging as never);\n vi.mocked(buildMercadoLibrePaginationMetadata).mockImplementation(\n ((metadata: unknown) => {\n const params = metadata as {\n total: number;\n limit: number;\n offset: number;\n returned: number;\n };\n return {\n pagination_source: \"service\",\n total: params.total,\n limit: params.limit,\n offset: params.offset,\n returned: params.returned,\n has_more: params.offset + params.returned < params.total,\n continuation:\n params.offset + params.returned < params.total\n ? `Reenviar la misma tool con offset=${params.offset + params.limit} para continuar.`\n : \"No more pages for this query.\",\n };\n }) as never\n );\n });\n\n it(\"returns compact order rows with normalized nested values and explicit optional filters\", async () => {\n vi.mocked(searchMercadoLibreOrders).mockResolvedValue({\n paging: { total: 1, limit: 1, offset: 2 },\n results: [\n buildOrder({\n payments: [\n {\n id: 5001,\n status: \"approved\",\n status_detail: \"accredited\",\n payment_method_id: \"visa\",\n payment_type: \"credit_card\",\n total_paid_amount: 145.25,\n transaction_amount: 150.5,\n shipping_cost: 12.5,\n coupon_amount: 4.75,\n installments: 3,\n available_actions: [\"refund\", \"capture\"],\n },\n ],\n }),\n ],\n } as never);\n vi.mocked(searchMercadoLibreOrdersBatch).mockResolvedValue({ successful: [], failed: [] } as never);\n\n const result = await meliGetOrdersSummaryHandler({\n profileId: \"custom-profile\",\n startDate: \"2026-03-01\",\n endDate: \"2026-03-31\",\n responseMode: \"orders_chunk\",\n status: \"paid\",\n q: \"SKU-1\",\n sort: \"date_desc\",\n offset: 2,\n limit: 1,\n });\n\n expect(resolveMercadoLibreProfileOrSelection).toHaveBeenCalledWith(\"custom-profile\");\n expect(searchMercadoLibreOrders).toHaveBeenCalledWith(\"meli-profile-1\", {\n seller: \"\",\n from: \"2026-03-01\",\n to: \"2026-03-31\",\n status: \"paid\",\n q: \"SKU-1\",\n sort: \"date_desc\",\n offset: 2,\n limit: 1,\n });\n expect(searchMercadoLibreOrdersBatch).not.toHaveBeenCalled();\n expect(result).toEqual({\n kind: \"object\",\n payload: {\n profile_id: \"meli-profile-1\",\n metadata: {\n pagination_source: \"service\",\n total: 1,\n limit: 1,\n offset: 2,\n returned: 1,\n has_more: false,\n continuation: \"No more pages for this query.\",\n fetch_mode: \"orders_chunk\",\n pages_per_call_limit: 15,\n pages_requested: 1,\n pages_succeeded: 1,\n pages_failed: 0,\n universe_fully_fetched: false,\n },\n metrics_by_currency: {\n ARS: { orders: 1, revenue: 150.5, avg_order_value: 150.5 },\n },\n orders_schema: [\n \"id\",\n \"date_created\",\n \"status\",\n \"total_amount\",\n \"currency\",\n \"buyer\",\n \"shipping_status\",\n \"items\",\n \"date_closed\",\n \"last_updated\",\n \"paid_amount\",\n \"buyer_id\",\n \"seller\",\n \"seller_id\",\n \"shipping_id\",\n \"pack_id\",\n \"fulfilled\",\n \"tags\",\n \"channel\",\n \"site\",\n \"payment_id\",\n \"payment_status\",\n \"payment_status_detail\",\n \"payment_method\",\n \"payment_type\",\n \"payment_total_paid\",\n \"payment_transaction_amount\",\n \"installments\",\n \"coupon_amount\",\n \"available_actions\",\n \"feedback_buyer\",\n \"feedback_seller\",\n \"order_request_change\",\n \"order_request_return\",\n \"first_item_id\",\n \"first_item_title\",\n \"first_item_sku\",\n \"first_item_quantity\",\n \"first_item_unit_price\",\n \"first_item_sale_fee\",\n \"first_item_listing_type\",\n \"variation_attributes\",\n \"stock_node_id\",\n \"payment_shipping_cost\",\n \"payment_coupon_amount\",\n ],\n orders: [\n [\n \"2001\",\n \"2026-03-01 10:15\",\n \"paid\",\n 150.5,\n \"ARS\",\n \"buyer-one\",\n \"delivered\",\n 1,\n \"2026-03-02 12:00\",\n \"2026-03-03 18:45\",\n 145.25,\n \"7001\",\n \"meli-store\",\n \"9001\",\n \"3001\",\n \"PACK-1\",\n true,\n \"delivered | catalog\",\n \"marketplace\",\n \"MLA\",\n \"5001\",\n \"approved\",\n \"accredited\",\n \"visa\",\n \"credit_card\",\n 145.25,\n 150.5,\n 3,\n 5.25,\n \"refund | capture\",\n \"status:positive | reason:fast\",\n \"status:neutral\",\n \"status:open | reason:size\",\n \"status:closed\",\n \"MLA-1\",\n \"Running Shoe\",\n \"SKU-1\",\n 2,\n 75.25,\n 10.1,\n \"gold_special\",\n \"Color: Red | SIZE: 42\",\n \"warehouse-1\",\n 12.5,\n 4.75,\n ],\n ],\n },\n });\n });\n\n it(\"reports partial page failures for orders_chunk and keeps failed-page guidance\", async () => {\n vi.mocked(searchMercadoLibreOrders).mockResolvedValue({\n paging: { total: 25, limit: 10, offset: 0 },\n results: [buildOrder()],\n } as never);\n vi.mocked(searchMercadoLibreOrdersBatch).mockResolvedValue({\n successful: [\n {\n id: \"10\",\n document: {\n results: [\n buildOrder({\n id: \"2002\",\n total_amount: 50,\n paid_amount: 50,\n currency_id: \"USD\",\n buyer: { id: 7002, nickname: \"buyer-two\" },\n seller: { id: 9001, nickname: \"meli-store\" },\n }),\n ],\n },\n },\n ],\n failed: [\n {\n id: \"20\",\n message: \"rate limited\",\n statusCode: 429,\n attempts: 3,\n retryable: true,\n },\n ],\n } as never);\n\n const result = await meliGetOrdersSummaryHandler({\n profileId: \"meli-profile-1\",\n startDate: \"2026-03-01\",\n endDate: \"2026-03-31\",\n responseMode: \"orders_chunk\",\n limit: 10,\n offset: 0,\n });\n\n expect(searchMercadoLibreOrdersBatch).toHaveBeenCalledWith(\n \"meli-profile-1\",\n {\n seller: \"\",\n from: \"2026-03-01\",\n to: \"2026-03-31\",\n status: undefined,\n q: undefined,\n sort: undefined,\n limit: 10,\n },\n [10, 20],\n {\n maxConcurrency: 15,\n maxRetries: 2,\n }\n );\n expect(result).toEqual({\n kind: \"object\",\n payload: expect.objectContaining({\n profile_id: \"meli-profile-1\",\n metrics_by_currency: {\n ARS: { orders: 1, revenue: 150.5, avg_order_value: 150.5 },\n USD: { orders: 1, revenue: 50, avg_order_value: 50 },\n },\n failed_pages: [\n {\n offset: 20,\n limit: 10,\n page_number: 3,\n message: \"rate limited\",\n status_code: 429,\n attempts: 3,\n retryable: true,\n },\n ],\n metadata: expect.objectContaining({\n pagination_source: \"service\",\n total: 25,\n limit: 10,\n offset: 0,\n returned: 2,\n has_more: true,\n fetch_mode: \"orders_chunk\",\n pages_per_call_limit: 15,\n pages_requested: 3,\n pages_succeeded: 2,\n pages_failed: 1,\n universe_fully_fetched: false,\n continuation:\n 'Se recuperaron paginas parciales. Reintentar primero la misma tool con responseMode=\"orders_chunk\", offset=20 y limit=10. Offsets fallidos: 20. Luego continuar con offset=30 si hace falta.',\n }),\n }),\n });\n });\n\n it(\"returns calculation mode by default with stable coverage metadata and aggregate slices\", async () => {\n vi.mocked(searchMercadoLibreOrders).mockResolvedValue({\n paging: { total: 3, limit: 2, offset: 0 },\n results: [\n buildOrder(),\n buildOrder({\n id: \"2003\",\n total_amount: 80,\n paid_amount: 80,\n buyer: { id: 7003, nickname: \"buyer-three\" },\n payments: [\n {\n id: 5003,\n status: \"approved\",\n status_detail: \"accredited\",\n payment_method_id: \"master\",\n payment_type: \"debit_card\",\n total_paid_amount: 80,\n transaction_amount: 80,\n installments: 1,\n available_actions: [],\n },\n ],\n tags: [\"delivered\", \"order_has_discount\"],\n coupon: { amount: 0 },\n }),\n ],\n } as never);\n vi.mocked(searchMercadoLibreOrdersBatch).mockResolvedValue({\n successful: [\n {\n id: \"2\",\n document: {\n results: [\n buildOrder({\n id: \"2004\",\n status: \"cancelled\",\n total_amount: 40,\n paid_amount: 0,\n tags: [\"not_delivered\"],\n payments: [\n {\n id: 5004,\n status: \"refunded\",\n status_detail: \"reversed\",\n payment_method_id: \"account_money\",\n payment_type: \"account_money\",\n total_paid_amount: 0,\n transaction_amount: 40,\n transaction_amount_refunded: 40,\n shipping_cost: 10,\n coupon_amount: 3,\n installments: 1,\n available_actions: [],\n },\n ],\n cancel_detail: {\n group: \"shipment\",\n code: \"lost\",\n requested_by: \"seller\",\n },\n buyer: { id: 7004, nickname: \"buyer-four\" },\n }),\n ],\n },\n },\n ],\n failed: [],\n } as never);\n\n const result = await meliGetOrdersSummaryHandler({\n profileId: \"meli-profile-1\",\n startDate: \"2026-03-01\",\n endDate: \"2026-03-31\",\n responseMode: \"calculations\",\n });\n\n expect(searchMercadoLibreOrders).toHaveBeenCalledWith(\"meli-profile-1\", {\n seller: \"\",\n from: \"2026-03-01\",\n to: \"2026-03-31\",\n status: undefined,\n q: undefined,\n sort: undefined,\n offset: 0,\n limit: 50,\n });\n expect(result).toEqual({\n kind: \"object\",\n payload: expect.objectContaining({\n profile_id: \"meli-profile-1\",\n metadata: {\n total: 3,\n limit: 2,\n offset: 0,\n returned: 3,\n has_more: false,\n continuation:\n 'Calculos completos. Si el usuario pide detalle de ordenes, invocar la misma tool con responseMode=\"orders_chunk\", offset=0 y limit=50.',\n fetch_mode: \"full_calculations\",\n pages_requested: 2,\n pages_succeeded: 2,\n pages_failed: 0,\n universe_fully_fetched: true,\n },\n metrics_by_currency: {\n ARS: { orders: 3, revenue: 270.5, avg_order_value: 90.17 },\n },\n calculations: expect.objectContaining({\n overview: expect.objectContaining({\n orders_total: 3,\n units_total: 6,\n distinct_items_total: 1,\n distinct_buyers_total: 3,\n fulfilled_orders: 3,\n delivered_orders: 2,\n orders_with_discount: 1,\n }),\n financial_by_currency: {\n ARS: expect.objectContaining({\n revenue_total: 270.5,\n paid_amount_total: 225.25,\n avg_order_value: 90.17,\n }),\n },\n coverage: {\n fetch_mode: \"full_calculations\",\n universe_fully_fetched: true,\n orders_returned: 3,\n pages_requested: 2,\n pages_succeeded: 2,\n pages_failed: 0,\n failed_pages_count: 0,\n },\n refunds_cancellations: expect.objectContaining({\n cancel_group_breakdown: expect.objectContaining({\n entries: [{ key: \"shipment\", orders: 1, rate: 0.3333 }],\n }),\n }),\n shipping_and_discounts: expect.objectContaining({\n by_currency: expect.objectContaining({\n ARS: expect.objectContaining({\n orders_with_shipping_cost: 1,\n orders_with_coupon: 2,\n not_delivered_orders: 1,\n }),\n }),\n }),\n }),\n }),\n });\n expect((result as unknown as { payload: Record<string, unknown> }).payload.orders_schema).toBeUndefined();\n expect((result as unknown as { payload: Record<string, unknown> }).payload.orders).toBeUndefined();\n });\n\n it(\"returns profile selection responses unchanged before hitting services\", async () => {\n vi.mocked(resolveMercadoLibreProfileOrSelection).mockResolvedValue({\n ok: false,\n response: { selection_required: true, provider: \"mercadolibre\" },\n } as never);\n\n const result = await meliGetOrdersSummaryHandler({\n profileId: undefined,\n startDate: \"2026-03-01\",\n endDate: \"2026-03-31\",\n responseMode: \"calculations\",\n });\n\n expect(result).toEqual({ selection_required: true, provider: \"mercadolibre\" });\n expect(searchMercadoLibreOrders).not.toHaveBeenCalled();\n });\n\n it(\"formats unexpected service failures through the stable error contract\", async () => {\n vi.mocked(searchMercadoLibreOrders).mockRejectedValue(new Error(\"boom\"));\n\n const result = await meliGetOrdersSummaryHandler({\n profileId: \"meli-profile-1\",\n startDate: \"2026-03-01\",\n endDate: \"2026-03-31\",\n responseMode: \"orders_chunk\",\n });\n\n expect(formatMercadoLibreError).toHaveBeenCalledWith(\n expect.any(Error),\n \"Failed to fetch MercadoLibre orders summary\"\n );\n expect(result).toEqual({\n kind: \"error\",\n message: \"formatted:Failed to fetch MercadoLibre orders summary:boom\",\n });\n });\n});\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -55,7 +55,7 @@ describe("MercadoLibre monster tool handlers batch 6", () => {
|
|
|
55
55
|
it("returns compact shipment rows with normalized fields for shipments_chunk", async () => {
|
|
56
56
|
vi.mocked(searchMercadoLibreOrders).mockResolvedValue({
|
|
57
57
|
paging: { total: 1, limit: 1, offset: 2 },
|
|
58
|
-
results: [buildOrder({ id: 501, currency_id: void 0 })]
|
|
58
|
+
results: [buildOrder({ id: 501, currency_id: void 0, payments: [{ shipping_cost: 17.5 }] })]
|
|
59
59
|
});
|
|
60
60
|
vi.mocked(getMercadoLibreShipmentBatch).mockResolvedValue({
|
|
61
61
|
successful: [
|
|
@@ -136,16 +136,148 @@ describe("MercadoLibre monster tool handlers batch 6", () => {
|
|
|
136
136
|
"logistic_type",
|
|
137
137
|
"mode",
|
|
138
138
|
"currency_id",
|
|
139
|
-
"cost"
|
|
139
|
+
"cost",
|
|
140
|
+
"buyer_shipping_paid"
|
|
140
141
|
],
|
|
141
|
-
shipments: [["501", "7001", "delivered", "unknown", "", "me2", "UNKNOWN", 20]]
|
|
142
|
+
shipments: [["501", "7001", "delivered", "unknown", "", "me2", "UNKNOWN", 20, 17.5]]
|
|
142
143
|
}
|
|
143
144
|
});
|
|
144
145
|
});
|
|
146
|
+
it("aggregates buyer-paid shipping across all orders that share one shipment in calculations", async () => {
|
|
147
|
+
vi.mocked(searchMercadoLibreOrders).mockResolvedValue({
|
|
148
|
+
paging: { total: 2, limit: 50, offset: 0 },
|
|
149
|
+
results: [
|
|
150
|
+
buildOrder({
|
|
151
|
+
id: "3001",
|
|
152
|
+
shipping: { id: "9500" },
|
|
153
|
+
payments: [{ shipping_cost: 5 }]
|
|
154
|
+
}),
|
|
155
|
+
buildOrder({
|
|
156
|
+
id: "3002",
|
|
157
|
+
shipping: { id: "9500" },
|
|
158
|
+
payments: [{ shipping_cost: 7.5 }]
|
|
159
|
+
})
|
|
160
|
+
]
|
|
161
|
+
});
|
|
162
|
+
vi.mocked(getMercadoLibreShipmentBatch).mockResolvedValue({
|
|
163
|
+
successful: [
|
|
164
|
+
{
|
|
165
|
+
id: "9500",
|
|
166
|
+
document: {
|
|
167
|
+
status: "delivered",
|
|
168
|
+
substatus: "delivered",
|
|
169
|
+
logistic_type: "fulfillment",
|
|
170
|
+
mode: "me2"
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
],
|
|
174
|
+
failed: []
|
|
175
|
+
});
|
|
176
|
+
vi.mocked(getMercadoLibreShipmentCostsBatch).mockResolvedValue({
|
|
177
|
+
successful: [
|
|
178
|
+
{
|
|
179
|
+
id: "9500",
|
|
180
|
+
document: {
|
|
181
|
+
receiver: { cost: 18 }
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
],
|
|
185
|
+
failed: []
|
|
186
|
+
});
|
|
187
|
+
const result = await meliGetShippingSummaryHandler({
|
|
188
|
+
profileId: "meli-profile-1",
|
|
189
|
+
startDate: "2026-05-01",
|
|
190
|
+
endDate: "2026-05-31",
|
|
191
|
+
responseMode: "calculations"
|
|
192
|
+
});
|
|
193
|
+
expect(result).toEqual({
|
|
194
|
+
kind: "object",
|
|
195
|
+
payload: expect.objectContaining({
|
|
196
|
+
calculations: expect.objectContaining({
|
|
197
|
+
overview: expect.objectContaining({
|
|
198
|
+
orders_total: 2,
|
|
199
|
+
orders_with_shipping: 2,
|
|
200
|
+
shipments_total: 1,
|
|
201
|
+
shipments_requested: 1
|
|
202
|
+
}),
|
|
203
|
+
costs_by_currency: {
|
|
204
|
+
ARS: {
|
|
205
|
+
total_shipping_cost: 18,
|
|
206
|
+
shipments: 1,
|
|
207
|
+
shipments_with_cost: 1,
|
|
208
|
+
zero_cost_shipments: 0,
|
|
209
|
+
buyer_shipping_paid_total: 12.5,
|
|
210
|
+
orders_with_buyer_shipping_paid: 2,
|
|
211
|
+
avg_buyer_shipping_paid_per_order_with_payment: 6.25,
|
|
212
|
+
avg_cost_per_shipment: 18,
|
|
213
|
+
avg_cost_per_shipment_with_cost: 18,
|
|
214
|
+
shipping_cost_rate_by_shipment: 1
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
})
|
|
218
|
+
})
|
|
219
|
+
});
|
|
220
|
+
});
|
|
221
|
+
it("exposes aggregated buyer-paid shipping in shipments_chunk when one shipment groups multiple orders", async () => {
|
|
222
|
+
vi.mocked(searchMercadoLibreOrders).mockResolvedValue({
|
|
223
|
+
paging: { total: 2, limit: 50, offset: 0 },
|
|
224
|
+
results: [
|
|
225
|
+
buildOrder({
|
|
226
|
+
id: "3101",
|
|
227
|
+
shipping: { id: "9600" },
|
|
228
|
+
payments: [{ shipping_cost: 4 }]
|
|
229
|
+
}),
|
|
230
|
+
buildOrder({
|
|
231
|
+
id: "3102",
|
|
232
|
+
shipping: { id: "9600" },
|
|
233
|
+
payments: [{ shipping_cost: 6.5 }]
|
|
234
|
+
})
|
|
235
|
+
]
|
|
236
|
+
});
|
|
237
|
+
vi.mocked(getMercadoLibreShipmentBatch).mockResolvedValue({
|
|
238
|
+
successful: [
|
|
239
|
+
{
|
|
240
|
+
id: "9600",
|
|
241
|
+
document: {
|
|
242
|
+
status: "delivered",
|
|
243
|
+
substatus: "delivered",
|
|
244
|
+
logistic_type: "cross_docking",
|
|
245
|
+
mode: "me2"
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
],
|
|
249
|
+
failed: []
|
|
250
|
+
});
|
|
251
|
+
vi.mocked(getMercadoLibreShipmentCostsBatch).mockResolvedValue({
|
|
252
|
+
successful: [
|
|
253
|
+
{
|
|
254
|
+
id: "9600",
|
|
255
|
+
document: {
|
|
256
|
+
receiver: { cost: 14 }
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
],
|
|
260
|
+
failed: []
|
|
261
|
+
});
|
|
262
|
+
const result = await meliGetShippingSummaryHandler({
|
|
263
|
+
profileId: "meli-profile-1",
|
|
264
|
+
startDate: "2026-05-01",
|
|
265
|
+
endDate: "2026-05-31",
|
|
266
|
+
responseMode: "shipments_chunk",
|
|
267
|
+
limit: 50,
|
|
268
|
+
offset: 0
|
|
269
|
+
});
|
|
270
|
+
expect(result).toEqual({
|
|
271
|
+
kind: "object",
|
|
272
|
+
payload: expect.objectContaining({
|
|
273
|
+
shipments: [["3101", "9600", "delivered", "delivered", "cross_docking", "me2", "ARS", 14, 10.5]]
|
|
274
|
+
})
|
|
275
|
+
});
|
|
276
|
+
});
|
|
145
277
|
it("keeps calculations stable when pages and shipment fetches fail partially", async () => {
|
|
146
278
|
vi.mocked(searchMercadoLibreOrders).mockResolvedValue({
|
|
147
279
|
paging: { total: 101, limit: 50, offset: 0 },
|
|
148
|
-
results: [buildOrder({ id: "2001", shipping: { id: "9001" } })]
|
|
280
|
+
results: [buildOrder({ id: "2001", shipping: { id: "9001" }, payments: [{ shipping_cost: 8 }] })]
|
|
149
281
|
});
|
|
150
282
|
vi.mocked(searchMercadoLibreOrdersBatch).mockResolvedValue({
|
|
151
283
|
successful: [
|
|
@@ -156,7 +288,8 @@ describe("MercadoLibre monster tool handlers batch 6", () => {
|
|
|
156
288
|
buildOrder({
|
|
157
289
|
id: "2002",
|
|
158
290
|
shipping: { id: "9002" },
|
|
159
|
-
currency_id: "USD"
|
|
291
|
+
currency_id: "USD",
|
|
292
|
+
payments: [{ shipping_cost: 0 }]
|
|
160
293
|
})
|
|
161
294
|
]
|
|
162
295
|
}
|
|
@@ -281,6 +414,9 @@ describe("MercadoLibre monster tool handlers batch 6", () => {
|
|
|
281
414
|
shipments: 1,
|
|
282
415
|
shipments_with_cost: 1,
|
|
283
416
|
zero_cost_shipments: 0,
|
|
417
|
+
buyer_shipping_paid_total: 8,
|
|
418
|
+
orders_with_buyer_shipping_paid: 1,
|
|
419
|
+
avg_buyer_shipping_paid_per_order_with_payment: 8,
|
|
284
420
|
avg_cost_per_shipment: 21.22,
|
|
285
421
|
avg_cost_per_shipment_with_cost: 21.22,
|
|
286
422
|
shipping_cost_rate_by_shipment: 1
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../tests/meli/mercadolibre-tool-handlers-monster-batch6.test.ts"],
|
|
4
|
-
"sourcesContent": ["import { beforeEach, describe, expect, it, vi } from \"vitest\";\n\nimport { meliGetShippingSummaryHandler } from \"../../src/tools/mercadolibre/get-shipping-summary.js\";\nimport { resolveMercadoLibreProfileOrSelection } from \"../../src/tools/mercadolibre/profile-resolution.js\";\nimport {\n formatMercadoLibreError,\n normalizeMercadoLibrePaging,\n} from \"../../src/services/mercadolibre/mercadolibre-api.js\";\nimport {\n getMercadoLibreShipmentBatch,\n getMercadoLibreShipmentCostsBatch,\n searchMercadoLibreOrders,\n searchMercadoLibreOrdersBatch,\n} from \"../../src/services/mercadolibre/mercadolibre-orders.js\";\n\nvi.mock(\"mcp-use/server\", () => ({\n object: vi.fn((payload: unknown) => ({ kind: \"object\", payload })),\n error: vi.fn((message: string) => ({ kind: \"error\", message })),\n}));\n\nvi.mock(\"../../src/tools/mercadolibre/profile-resolution.js\", () => ({\n resolveMercadoLibreProfileOrSelection: vi.fn(),\n}));\n\nvi.mock(\"../../src/services/mercadolibre/mercadolibre-api.js\", () => ({\n formatMercadoLibreError: vi.fn(\n (err: unknown, fallback: string) =>\n `formatted:${fallback}:${err instanceof Error ? err.message : String(err)}`\n ),\n normalizeMercadoLibrePaging: vi.fn((paging: unknown) => paging),\n}));\n\nvi.mock(\"../../src/services/mercadolibre/mercadolibre-orders.js\", () => ({\n searchMercadoLibreOrders: vi.fn(),\n searchMercadoLibreOrdersBatch: vi.fn(),\n getMercadoLibreShipmentBatch: vi.fn(),\n getMercadoLibreShipmentCostsBatch: vi.fn(),\n}));\n\nfunction buildOrder(overrides: Record<string, unknown> = {}) {\n return {\n id: \"1001\",\n date_created: \"2026-05-03T15:00:00.000Z\",\n currency_id: \"ARS\",\n shipping: { id: \"7001\" },\n ...overrides,\n };\n}\n\ndescribe(\"MercadoLibre monster tool handlers batch 6\", () => {\n beforeEach(() => {\n vi.clearAllMocks();\n\n vi.mocked(resolveMercadoLibreProfileOrSelection).mockResolvedValue({\n ok: true,\n value: { profileId: \"meli-profile-1\" },\n });\n\n vi.mocked(normalizeMercadoLibrePaging).mockImplementation((paging) => paging as never);\n vi.mocked(searchMercadoLibreOrdersBatch).mockResolvedValue({\n successful: [],\n failed: [],\n } as never);\n });\n\n it(\"returns compact shipment rows with normalized fields for shipments_chunk\", async () => {\n vi.mocked(searchMercadoLibreOrders).mockResolvedValue({\n paging: { total: 1, limit: 1, offset: 2 },\n results: [buildOrder({ id: 501, currency_id: undefined })],\n } as never);\n vi.mocked(getMercadoLibreShipmentBatch).mockResolvedValue({\n successful: [\n {\n id: \"7001\",\n document: {\n status: \"delivered\",\n substatus: 404,\n logistic_type: null,\n mode: \"me2\",\n },\n },\n ],\n failed: [],\n } as never);\n vi.mocked(getMercadoLibreShipmentCostsBatch).mockResolvedValue({\n successful: [\n {\n id: \"7001\",\n document: {\n receiver: { cost: \"19.995\" },\n },\n },\n ],\n failed: [],\n } as never);\n\n const result = await meliGetShippingSummaryHandler({\n profileId: \"custom-profile\",\n startDate: \"2026-05-01\",\n endDate: \"2026-05-31\",\n status: \"paid\",\n responseMode: \"shipments_chunk\",\n limit: 1,\n offset: 2,\n });\n\n expect(resolveMercadoLibreProfileOrSelection).toHaveBeenCalledWith(\"custom-profile\");\n expect(searchMercadoLibreOrders).toHaveBeenCalledWith(\"meli-profile-1\", {\n seller: \"\",\n from: \"2026-05-01\",\n to: \"2026-05-31\",\n status: \"paid\",\n limit: 1,\n offset: 2,\n });\n expect(searchMercadoLibreOrdersBatch).not.toHaveBeenCalled();\n expect(getMercadoLibreShipmentBatch).toHaveBeenCalledWith(\"meli-profile-1\", [\"7001\"], {\n maxConcurrency: 15,\n maxRetries: 2,\n });\n expect(getMercadoLibreShipmentCostsBatch).toHaveBeenCalledWith(\"meli-profile-1\", [\"7001\"], {\n maxConcurrency: 15,\n maxRetries: 2,\n });\n expect(result).toEqual({\n kind: \"object\",\n payload: {\n profile_id: \"meli-profile-1\",\n metadata: {\n total: 1,\n limit: 1,\n offset: 2,\n returned: 1,\n has_more: false,\n continuation: \"No more pages for this query.\",\n fetch_mode: \"shipments_chunk\",\n pages_per_call_limit: 15,\n pages_requested: 1,\n pages_succeeded: 1,\n pages_failed: 0,\n shipment_failures: 0,\n universe_fully_fetched: false,\n },\n shipments_schema: [\n \"order_id\",\n \"shipment_id\",\n \"status\",\n \"substatus\",\n \"logistic_type\",\n \"mode\",\n \"currency_id\",\n \"cost\",\n ],\n shipments: [[\"501\", \"7001\", \"delivered\", \"unknown\", \"\", \"me2\", \"UNKNOWN\", 20]],\n },\n });\n });\n\n it(\"keeps calculations stable when pages and shipment fetches fail partially\", async () => {\n vi.mocked(searchMercadoLibreOrders).mockResolvedValue({\n paging: { total: 101, limit: 50, offset: 0 },\n results: [buildOrder({ id: \"2001\", shipping: { id: \"9001\" } })],\n } as never);\n vi.mocked(searchMercadoLibreOrdersBatch).mockResolvedValue({\n successful: [\n {\n id: \"50\",\n document: {\n results: [\n buildOrder({\n id: \"2002\",\n shipping: { id: \"9002\" },\n currency_id: \"USD\",\n }),\n ],\n },\n },\n ],\n failed: [\n {\n id: \"100\",\n message: \"rate limited\",\n statusCode: 429,\n attempts: 3,\n retryable: true,\n },\n ],\n } as never);\n vi.mocked(getMercadoLibreShipmentBatch).mockResolvedValue({\n successful: [\n {\n id: \"9001\",\n document: {\n status: \"delivered\",\n substatus: \"delivered\",\n logistic_type: \"fulfillment\",\n mode: \"me2\",\n },\n },\n ],\n failed: [\n {\n id: \"9002\",\n message: \"shipment missing\",\n statusCode: 404,\n attempts: 2,\n retryable: false,\n },\n ],\n } as never);\n vi.mocked(getMercadoLibreShipmentCostsBatch).mockResolvedValue({\n successful: [\n {\n id: \"9001\",\n document: {\n gross_amount: 21.219,\n },\n },\n ],\n failed: [\n {\n id: \"9002\",\n message: \"cost missing\",\n statusCode: 500,\n attempts: 3,\n retryable: true,\n },\n ],\n } as never);\n\n const result = await meliGetShippingSummaryHandler({\n profileId: \"meli-profile-1\",\n startDate: \"2026-05-01\",\n endDate: \"2026-05-31\",\n status: \"paid\",\n responseMode: \"calculations\",\n });\n\n expect(searchMercadoLibreOrdersBatch).toHaveBeenCalledWith(\n \"meli-profile-1\",\n {\n seller: \"\",\n from: \"2026-05-01\",\n to: \"2026-05-31\",\n status: \"paid\",\n limit: 50,\n },\n [50, 100],\n {\n maxConcurrency: 15,\n maxRetries: 2,\n }\n );\n expect(result).toEqual({\n kind: \"object\",\n payload: {\n profile_id: \"meli-profile-1\",\n metadata: {\n total: 101,\n limit: 50,\n offset: 0,\n returned: 2,\n has_more: true,\n continuation:\n 'Calculos parciales por paginas fallidas. Reintentar la misma tool con responseMode=\"calculations\". Offsets fallidos: 100.',\n fetch_mode: \"full_calculations\",\n pages_requested: 3,\n pages_succeeded: 2,\n pages_failed: 1,\n shipment_failures: 2,\n universe_fully_fetched: false,\n },\n calculations: {\n overview: {\n orders_total: 2,\n orders_with_shipping: 2,\n shipments_total: 1,\n shipments_requested: 2,\n shipping_attachment_rate: 1,\n delivered_shipments: 1,\n cancelled_shipments: 0,\n not_delivered_shipments: 0,\n },\n delivery_health: {\n status_breakdown: {\n entries: [{ key: \"delivered\", orders: 1, rate: 1 }],\n },\n substatus_breakdown: {\n entries: [{ key: \"delivered\", orders: 1, rate: 1 }],\n },\n delivered_rate: 1,\n cancelled_rate: 0,\n not_delivered_rate: 0,\n },\n costs_by_currency: {\n ARS: {\n total_shipping_cost: 21.22,\n shipments: 1,\n shipments_with_cost: 1,\n zero_cost_shipments: 0,\n avg_cost_per_shipment: 21.22,\n avg_cost_per_shipment_with_cost: 21.22,\n shipping_cost_rate_by_shipment: 1,\n },\n },\n logistics_mix: {\n logistic_type_breakdown: {\n entries: [{ key: \"fulfillment\", orders: 1, rate: 1 }],\n },\n mode_breakdown: {\n entries: [{ key: \"me2\", orders: 1, rate: 1 }],\n },\n top_logistic_type_by_shipments: \"fulfillment\",\n top_mode_by_shipments: \"me2\",\n },\n daily_trend: [\n {\n date: \"2026-05-03\",\n shipments: 1,\n delivered_shipments: 1,\n cancelled_shipments: 0,\n not_delivered_shipments: 0,\n shipping_cost_by_currency: {\n ARS: 21.22,\n },\n },\n ],\n coverage: {\n fetch_mode: \"full_calculations\",\n universe_fully_fetched: false,\n orders_returned: 2,\n shipments_requested: 2,\n shipments_inspected: 1,\n pages_requested: 3,\n pages_succeeded: 2,\n pages_failed: 1,\n failed_pages_count: 1,\n shipment_failures_count: 2,\n failed_pages: [\n {\n offset: 100,\n limit: 50,\n page_number: 3,\n message: \"rate limited\",\n status_code: 429,\n attempts: 3,\n retryable: true,\n },\n ],\n },\n },\n failures: [\n {\n order_id: \"2002\",\n shipment_id: \"9002\",\n stage: \"shipment\",\n message: \"shipment missing\",\n status_code: 404,\n attempts: 2,\n retryable: false,\n },\n {\n order_id: \"2002\",\n shipment_id: \"9002\",\n stage: \"costs\",\n message: \"cost missing\",\n status_code: 500,\n attempts: 3,\n retryable: true,\n },\n ],\n failed_pages: [\n {\n offset: 100,\n limit: 50,\n page_number: 3,\n message: \"rate limited\",\n status_code: 429,\n attempts: 3,\n retryable: true,\n },\n ],\n },\n });\n });\n\n it(\"formats thrown service errors with the stable error contract\", async () => {\n vi.mocked(searchMercadoLibreOrders).mockRejectedValue(new Error(\"boom\"));\n\n const result = await meliGetShippingSummaryHandler({\n profileId: \"meli-profile-1\",\n startDate: \"2026-05-01\",\n endDate: \"2026-05-31\",\n responseMode: \"calculations\",\n });\n\n expect(formatMercadoLibreError).toHaveBeenCalledWith(\n expect.any(Error),\n \"Failed to summarize MercadoLibre shipping\"\n );\n expect(result).toEqual({\n kind: \"error\",\n message: \"formatted:Failed to summarize MercadoLibre shipping:boom\",\n });\n });\n});\n"],
|
|
5
|
-
"mappings": "AAAA,SAAS,YAAY,UAAU,QAAQ,IAAI,UAAU;AAErD,SAAS,qCAAqC;AAC9C,SAAS,6CAA6C;AACtD;AAAA,EACE;AAAA,EACA;AAAA,OACK;AACP;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAEP,GAAG,KAAK,kBAAkB,OAAO;AAAA,EAC/B,QAAQ,GAAG,GAAG,CAAC,aAAsB,EAAE,MAAM,UAAU,QAAQ,EAAE;AAAA,EACjE,OAAO,GAAG,GAAG,CAAC,aAAqB,EAAE,MAAM,SAAS,QAAQ,EAAE;AAChE,EAAE;AAEF,GAAG,KAAK,sDAAsD,OAAO;AAAA,EACnE,uCAAuC,GAAG,GAAG;AAC/C,EAAE;AAEF,GAAG,KAAK,uDAAuD,OAAO;AAAA,EACpE,yBAAyB,GAAG;AAAA,IAC1B,CAAC,KAAc,aACb,aAAa,QAAQ,IAAI,eAAe,QAAQ,IAAI,UAAU,OAAO,GAAG,CAAC;AAAA,EAC7E;AAAA,EACA,6BAA6B,GAAG,GAAG,CAAC,WAAoB,MAAM;AAChE,EAAE;AAEF,GAAG,KAAK,0DAA0D,OAAO;AAAA,EACvE,0BAA0B,GAAG,GAAG;AAAA,EAChC,+BAA+B,GAAG,GAAG;AAAA,EACrC,8BAA8B,GAAG,GAAG;AAAA,EACpC,mCAAmC,GAAG,GAAG;AAC3C,EAAE;AAEF,SAAS,WAAW,YAAqC,CAAC,GAAG;AAC3D,SAAO;AAAA,IACL,IAAI;AAAA,IACJ,cAAc;AAAA,IACd,aAAa;AAAA,IACb,UAAU,EAAE,IAAI,OAAO;AAAA,IACvB,GAAG;AAAA,EACL;AACF;AAEA,SAAS,8CAA8C,MAAM;AAC3D,aAAW,MAAM;AACf,OAAG,cAAc;AAEjB,OAAG,OAAO,qCAAqC,EAAE,kBAAkB;AAAA,MACjE,IAAI;AAAA,MACJ,OAAO,EAAE,WAAW,iBAAiB;AAAA,IACvC,CAAC;AAED,OAAG,OAAO,2BAA2B,EAAE,mBAAmB,CAAC,WAAW,MAAe;AACrF,OAAG,OAAO,6BAA6B,EAAE,kBAAkB;AAAA,MACzD,YAAY,CAAC;AAAA,MACb,QAAQ,CAAC;AAAA,IACX,CAAU;AAAA,EACZ,CAAC;AAED,KAAG,4EAA4E,YAAY;AACzF,OAAG,OAAO,wBAAwB,EAAE,kBAAkB;AAAA,MACpD,QAAQ,EAAE,OAAO,GAAG,OAAO,GAAG,QAAQ,EAAE;AAAA,MACxC,SAAS,CAAC,WAAW,EAAE,IAAI,KAAK,aAAa,
|
|
4
|
+
"sourcesContent": ["import { beforeEach, describe, expect, it, vi } from \"vitest\";\n\nimport { meliGetShippingSummaryHandler } from \"../../src/tools/mercadolibre/get-shipping-summary.js\";\nimport { resolveMercadoLibreProfileOrSelection } from \"../../src/tools/mercadolibre/profile-resolution.js\";\nimport {\n formatMercadoLibreError,\n normalizeMercadoLibrePaging,\n} from \"../../src/services/mercadolibre/mercadolibre-api.js\";\nimport {\n getMercadoLibreShipmentBatch,\n getMercadoLibreShipmentCostsBatch,\n searchMercadoLibreOrders,\n searchMercadoLibreOrdersBatch,\n} from \"../../src/services/mercadolibre/mercadolibre-orders.js\";\n\nvi.mock(\"mcp-use/server\", () => ({\n object: vi.fn((payload: unknown) => ({ kind: \"object\", payload })),\n error: vi.fn((message: string) => ({ kind: \"error\", message })),\n}));\n\nvi.mock(\"../../src/tools/mercadolibre/profile-resolution.js\", () => ({\n resolveMercadoLibreProfileOrSelection: vi.fn(),\n}));\n\nvi.mock(\"../../src/services/mercadolibre/mercadolibre-api.js\", () => ({\n formatMercadoLibreError: vi.fn(\n (err: unknown, fallback: string) =>\n `formatted:${fallback}:${err instanceof Error ? err.message : String(err)}`\n ),\n normalizeMercadoLibrePaging: vi.fn((paging: unknown) => paging),\n}));\n\nvi.mock(\"../../src/services/mercadolibre/mercadolibre-orders.js\", () => ({\n searchMercadoLibreOrders: vi.fn(),\n searchMercadoLibreOrdersBatch: vi.fn(),\n getMercadoLibreShipmentBatch: vi.fn(),\n getMercadoLibreShipmentCostsBatch: vi.fn(),\n}));\n\nfunction buildOrder(overrides: Record<string, unknown> = {}) {\n return {\n id: \"1001\",\n date_created: \"2026-05-03T15:00:00.000Z\",\n currency_id: \"ARS\",\n shipping: { id: \"7001\" },\n ...overrides,\n };\n}\n\ndescribe(\"MercadoLibre monster tool handlers batch 6\", () => {\n beforeEach(() => {\n vi.clearAllMocks();\n\n vi.mocked(resolveMercadoLibreProfileOrSelection).mockResolvedValue({\n ok: true,\n value: { profileId: \"meli-profile-1\" },\n });\n\n vi.mocked(normalizeMercadoLibrePaging).mockImplementation((paging) => paging as never);\n vi.mocked(searchMercadoLibreOrdersBatch).mockResolvedValue({\n successful: [],\n failed: [],\n } as never);\n });\n\n it(\"returns compact shipment rows with normalized fields for shipments_chunk\", async () => {\n vi.mocked(searchMercadoLibreOrders).mockResolvedValue({\n paging: { total: 1, limit: 1, offset: 2 },\n results: [buildOrder({ id: 501, currency_id: undefined, payments: [{ shipping_cost: 17.5 }] })],\n } as never);\n vi.mocked(getMercadoLibreShipmentBatch).mockResolvedValue({\n successful: [\n {\n id: \"7001\",\n document: {\n status: \"delivered\",\n substatus: 404,\n logistic_type: null,\n mode: \"me2\",\n },\n },\n ],\n failed: [],\n } as never);\n vi.mocked(getMercadoLibreShipmentCostsBatch).mockResolvedValue({\n successful: [\n {\n id: \"7001\",\n document: {\n receiver: { cost: \"19.995\" },\n },\n },\n ],\n failed: [],\n } as never);\n\n const result = await meliGetShippingSummaryHandler({\n profileId: \"custom-profile\",\n startDate: \"2026-05-01\",\n endDate: \"2026-05-31\",\n status: \"paid\",\n responseMode: \"shipments_chunk\",\n limit: 1,\n offset: 2,\n });\n\n expect(resolveMercadoLibreProfileOrSelection).toHaveBeenCalledWith(\"custom-profile\");\n expect(searchMercadoLibreOrders).toHaveBeenCalledWith(\"meli-profile-1\", {\n seller: \"\",\n from: \"2026-05-01\",\n to: \"2026-05-31\",\n status: \"paid\",\n limit: 1,\n offset: 2,\n });\n expect(searchMercadoLibreOrdersBatch).not.toHaveBeenCalled();\n expect(getMercadoLibreShipmentBatch).toHaveBeenCalledWith(\"meli-profile-1\", [\"7001\"], {\n maxConcurrency: 15,\n maxRetries: 2,\n });\n expect(getMercadoLibreShipmentCostsBatch).toHaveBeenCalledWith(\"meli-profile-1\", [\"7001\"], {\n maxConcurrency: 15,\n maxRetries: 2,\n });\n expect(result).toEqual({\n kind: \"object\",\n payload: {\n profile_id: \"meli-profile-1\",\n metadata: {\n total: 1,\n limit: 1,\n offset: 2,\n returned: 1,\n has_more: false,\n continuation: \"No more pages for this query.\",\n fetch_mode: \"shipments_chunk\",\n pages_per_call_limit: 15,\n pages_requested: 1,\n pages_succeeded: 1,\n pages_failed: 0,\n shipment_failures: 0,\n universe_fully_fetched: false,\n },\n shipments_schema: [\n \"order_id\",\n \"shipment_id\",\n \"status\",\n \"substatus\",\n \"logistic_type\",\n \"mode\",\n \"currency_id\",\n \"cost\",\n \"buyer_shipping_paid\",\n ],\n shipments: [[\"501\", \"7001\", \"delivered\", \"unknown\", \"\", \"me2\", \"UNKNOWN\", 20, 17.5]],\n },\n });\n });\n\n it(\"aggregates buyer-paid shipping across all orders that share one shipment in calculations\", async () => {\n vi.mocked(searchMercadoLibreOrders).mockResolvedValue({\n paging: { total: 2, limit: 50, offset: 0 },\n results: [\n buildOrder({\n id: \"3001\",\n shipping: { id: \"9500\" },\n payments: [{ shipping_cost: 5 }],\n }),\n buildOrder({\n id: \"3002\",\n shipping: { id: \"9500\" },\n payments: [{ shipping_cost: 7.5 }],\n }),\n ],\n } as never);\n vi.mocked(getMercadoLibreShipmentBatch).mockResolvedValue({\n successful: [\n {\n id: \"9500\",\n document: {\n status: \"delivered\",\n substatus: \"delivered\",\n logistic_type: \"fulfillment\",\n mode: \"me2\",\n },\n },\n ],\n failed: [],\n } as never);\n vi.mocked(getMercadoLibreShipmentCostsBatch).mockResolvedValue({\n successful: [\n {\n id: \"9500\",\n document: {\n receiver: { cost: 18 },\n },\n },\n ],\n failed: [],\n } as never);\n\n const result = await meliGetShippingSummaryHandler({\n profileId: \"meli-profile-1\",\n startDate: \"2026-05-01\",\n endDate: \"2026-05-31\",\n responseMode: \"calculations\",\n });\n\n expect(result).toEqual({\n kind: \"object\",\n payload: expect.objectContaining({\n calculations: expect.objectContaining({\n overview: expect.objectContaining({\n orders_total: 2,\n orders_with_shipping: 2,\n shipments_total: 1,\n shipments_requested: 1,\n }),\n costs_by_currency: {\n ARS: {\n total_shipping_cost: 18,\n shipments: 1,\n shipments_with_cost: 1,\n zero_cost_shipments: 0,\n buyer_shipping_paid_total: 12.5,\n orders_with_buyer_shipping_paid: 2,\n avg_buyer_shipping_paid_per_order_with_payment: 6.25,\n avg_cost_per_shipment: 18,\n avg_cost_per_shipment_with_cost: 18,\n shipping_cost_rate_by_shipment: 1,\n },\n },\n }),\n }),\n });\n });\n\n it(\"exposes aggregated buyer-paid shipping in shipments_chunk when one shipment groups multiple orders\", async () => {\n vi.mocked(searchMercadoLibreOrders).mockResolvedValue({\n paging: { total: 2, limit: 50, offset: 0 },\n results: [\n buildOrder({\n id: \"3101\",\n shipping: { id: \"9600\" },\n payments: [{ shipping_cost: 4 }],\n }),\n buildOrder({\n id: \"3102\",\n shipping: { id: \"9600\" },\n payments: [{ shipping_cost: 6.5 }],\n }),\n ],\n } as never);\n vi.mocked(getMercadoLibreShipmentBatch).mockResolvedValue({\n successful: [\n {\n id: \"9600\",\n document: {\n status: \"delivered\",\n substatus: \"delivered\",\n logistic_type: \"cross_docking\",\n mode: \"me2\",\n },\n },\n ],\n failed: [],\n } as never);\n vi.mocked(getMercadoLibreShipmentCostsBatch).mockResolvedValue({\n successful: [\n {\n id: \"9600\",\n document: {\n receiver: { cost: 14 },\n },\n },\n ],\n failed: [],\n } as never);\n\n const result = await meliGetShippingSummaryHandler({\n profileId: \"meli-profile-1\",\n startDate: \"2026-05-01\",\n endDate: \"2026-05-31\",\n responseMode: \"shipments_chunk\",\n limit: 50,\n offset: 0,\n });\n\n expect(result).toEqual({\n kind: \"object\",\n payload: expect.objectContaining({\n shipments: [[\"3101\", \"9600\", \"delivered\", \"delivered\", \"cross_docking\", \"me2\", \"ARS\", 14, 10.5]],\n }),\n });\n });\n\n it(\"keeps calculations stable when pages and shipment fetches fail partially\", async () => {\n vi.mocked(searchMercadoLibreOrders).mockResolvedValue({\n paging: { total: 101, limit: 50, offset: 0 },\n results: [buildOrder({ id: \"2001\", shipping: { id: \"9001\" }, payments: [{ shipping_cost: 8 }] })],\n } as never);\n vi.mocked(searchMercadoLibreOrdersBatch).mockResolvedValue({\n successful: [\n {\n id: \"50\",\n document: {\n results: [\n buildOrder({\n id: \"2002\",\n shipping: { id: \"9002\" },\n currency_id: \"USD\",\n payments: [{ shipping_cost: 0 }],\n }),\n ],\n },\n },\n ],\n failed: [\n {\n id: \"100\",\n message: \"rate limited\",\n statusCode: 429,\n attempts: 3,\n retryable: true,\n },\n ],\n } as never);\n vi.mocked(getMercadoLibreShipmentBatch).mockResolvedValue({\n successful: [\n {\n id: \"9001\",\n document: {\n status: \"delivered\",\n substatus: \"delivered\",\n logistic_type: \"fulfillment\",\n mode: \"me2\",\n },\n },\n ],\n failed: [\n {\n id: \"9002\",\n message: \"shipment missing\",\n statusCode: 404,\n attempts: 2,\n retryable: false,\n },\n ],\n } as never);\n vi.mocked(getMercadoLibreShipmentCostsBatch).mockResolvedValue({\n successful: [\n {\n id: \"9001\",\n document: {\n gross_amount: 21.219,\n },\n },\n ],\n failed: [\n {\n id: \"9002\",\n message: \"cost missing\",\n statusCode: 500,\n attempts: 3,\n retryable: true,\n },\n ],\n } as never);\n\n const result = await meliGetShippingSummaryHandler({\n profileId: \"meli-profile-1\",\n startDate: \"2026-05-01\",\n endDate: \"2026-05-31\",\n status: \"paid\",\n responseMode: \"calculations\",\n });\n\n expect(searchMercadoLibreOrdersBatch).toHaveBeenCalledWith(\n \"meli-profile-1\",\n {\n seller: \"\",\n from: \"2026-05-01\",\n to: \"2026-05-31\",\n status: \"paid\",\n limit: 50,\n },\n [50, 100],\n {\n maxConcurrency: 15,\n maxRetries: 2,\n }\n );\n expect(result).toEqual({\n kind: \"object\",\n payload: {\n profile_id: \"meli-profile-1\",\n metadata: {\n total: 101,\n limit: 50,\n offset: 0,\n returned: 2,\n has_more: true,\n continuation:\n 'Calculos parciales por paginas fallidas. Reintentar la misma tool con responseMode=\"calculations\". Offsets fallidos: 100.',\n fetch_mode: \"full_calculations\",\n pages_requested: 3,\n pages_succeeded: 2,\n pages_failed: 1,\n shipment_failures: 2,\n universe_fully_fetched: false,\n },\n calculations: {\n overview: {\n orders_total: 2,\n orders_with_shipping: 2,\n shipments_total: 1,\n shipments_requested: 2,\n shipping_attachment_rate: 1,\n delivered_shipments: 1,\n cancelled_shipments: 0,\n not_delivered_shipments: 0,\n },\n delivery_health: {\n status_breakdown: {\n entries: [{ key: \"delivered\", orders: 1, rate: 1 }],\n },\n substatus_breakdown: {\n entries: [{ key: \"delivered\", orders: 1, rate: 1 }],\n },\n delivered_rate: 1,\n cancelled_rate: 0,\n not_delivered_rate: 0,\n },\n costs_by_currency: {\n ARS: {\n total_shipping_cost: 21.22,\n shipments: 1,\n shipments_with_cost: 1,\n zero_cost_shipments: 0,\n buyer_shipping_paid_total: 8,\n orders_with_buyer_shipping_paid: 1,\n avg_buyer_shipping_paid_per_order_with_payment: 8,\n avg_cost_per_shipment: 21.22,\n avg_cost_per_shipment_with_cost: 21.22,\n shipping_cost_rate_by_shipment: 1,\n },\n },\n logistics_mix: {\n logistic_type_breakdown: {\n entries: [{ key: \"fulfillment\", orders: 1, rate: 1 }],\n },\n mode_breakdown: {\n entries: [{ key: \"me2\", orders: 1, rate: 1 }],\n },\n top_logistic_type_by_shipments: \"fulfillment\",\n top_mode_by_shipments: \"me2\",\n },\n daily_trend: [\n {\n date: \"2026-05-03\",\n shipments: 1,\n delivered_shipments: 1,\n cancelled_shipments: 0,\n not_delivered_shipments: 0,\n shipping_cost_by_currency: {\n ARS: 21.22,\n },\n },\n ],\n coverage: {\n fetch_mode: \"full_calculations\",\n universe_fully_fetched: false,\n orders_returned: 2,\n shipments_requested: 2,\n shipments_inspected: 1,\n pages_requested: 3,\n pages_succeeded: 2,\n pages_failed: 1,\n failed_pages_count: 1,\n shipment_failures_count: 2,\n failed_pages: [\n {\n offset: 100,\n limit: 50,\n page_number: 3,\n message: \"rate limited\",\n status_code: 429,\n attempts: 3,\n retryable: true,\n },\n ],\n },\n },\n failures: [\n {\n order_id: \"2002\",\n shipment_id: \"9002\",\n stage: \"shipment\",\n message: \"shipment missing\",\n status_code: 404,\n attempts: 2,\n retryable: false,\n },\n {\n order_id: \"2002\",\n shipment_id: \"9002\",\n stage: \"costs\",\n message: \"cost missing\",\n status_code: 500,\n attempts: 3,\n retryable: true,\n },\n ],\n failed_pages: [\n {\n offset: 100,\n limit: 50,\n page_number: 3,\n message: \"rate limited\",\n status_code: 429,\n attempts: 3,\n retryable: true,\n },\n ],\n },\n });\n });\n\n it(\"formats thrown service errors with the stable error contract\", async () => {\n vi.mocked(searchMercadoLibreOrders).mockRejectedValue(new Error(\"boom\"));\n\n const result = await meliGetShippingSummaryHandler({\n profileId: \"meli-profile-1\",\n startDate: \"2026-05-01\",\n endDate: \"2026-05-31\",\n responseMode: \"calculations\",\n });\n\n expect(formatMercadoLibreError).toHaveBeenCalledWith(\n expect.any(Error),\n \"Failed to summarize MercadoLibre shipping\"\n );\n expect(result).toEqual({\n kind: \"error\",\n message: \"formatted:Failed to summarize MercadoLibre shipping:boom\",\n });\n });\n});\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -67,6 +67,7 @@ function buildOrder(overrides = {}) {
|
|
|
67
67
|
payment_type: "credit_card",
|
|
68
68
|
total_paid_amount: 100,
|
|
69
69
|
transaction_amount: 100,
|
|
70
|
+
shipping_cost: 5,
|
|
70
71
|
installments: 1,
|
|
71
72
|
available_actions: ["refund"]
|
|
72
73
|
}
|
|
@@ -359,8 +360,8 @@ describe("MercadoLibre monster tool handlers batch 7", () => {
|
|
|
359
360
|
);
|
|
360
361
|
expect(payload.shipments).toEqual(
|
|
361
362
|
expect.arrayContaining([
|
|
362
|
-
["2010", "ship-10", "cancelled", "cancelled", "fulfillment", "custom", "ARS", 0],
|
|
363
|
-
["2020", "ship-20", "not_delivered", "not_delivered", "", "me2", "ARS", 0]
|
|
363
|
+
["2010", "ship-10", "cancelled", "cancelled", "fulfillment", "custom", "ARS", 0, 5],
|
|
364
|
+
["2020", "ship-20", "not_delivered", "not_delivered", "", "me2", "ARS", 0, 5]
|
|
364
365
|
])
|
|
365
366
|
);
|
|
366
367
|
});
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../tests/meli/mercadolibre-tool-handlers-monster-batch7.test.ts"],
|
|
4
|
-
"sourcesContent": ["import { beforeEach, describe, expect, it, vi } from \"vitest\";\n\nimport { meliGetOrdersSummaryHandler } from \"../../src/tools/mercadolibre/get-orders-summary.js\";\nimport { meliGetShippingSummaryHandler } from \"../../src/tools/mercadolibre/get-shipping-summary.js\";\nimport { resolveMercadoLibreProfileOrSelection } from \"../../src/tools/mercadolibre/profile-resolution.js\";\nimport {\n buildMercadoLibrePaginationMetadata,\n normalizeMercadoLibrePaging,\n} from \"../../src/services/mercadolibre/mercadolibre-api.js\";\nimport {\n getMercadoLibreShipmentBatch,\n getMercadoLibreShipmentCostsBatch,\n searchMercadoLibreOrders,\n searchMercadoLibreOrdersBatch,\n} from \"../../src/services/mercadolibre/mercadolibre-orders.js\";\n\nvi.mock(\"mcp-use/server\", () => ({\n object: vi.fn((payload: unknown) => ({ kind: \"object\", payload })),\n error: vi.fn((message: string) => ({ kind: \"error\", message })),\n}));\n\nvi.mock(\"../../src/tools/mercadolibre/profile-resolution.js\", () => ({\n resolveMercadoLibreProfileOrSelection: vi.fn(),\n}));\n\nvi.mock(\"../../src/services/mercadolibre/mercadolibre-api.js\", () => ({\n formatMercadoLibreError: vi.fn(\n (err: unknown, fallback: string) =>\n `formatted:${fallback}:${err instanceof Error ? err.message : String(err)}`\n ),\n normalizeMercadoLibrePaging: vi.fn((paging: unknown) => paging),\n buildMercadoLibrePaginationMetadata: vi.fn((metadata: unknown) => {\n const params = metadata as {\n total: number;\n limit: number;\n offset: number;\n returned: number;\n };\n return {\n pagination_source: \"service\",\n total: params.total,\n limit: params.limit,\n offset: params.offset,\n returned: params.returned,\n has_more: params.offset + params.returned < params.total,\n continuation:\n params.offset + params.returned < params.total\n ? `Reenviar la misma tool con offset=${params.offset + params.limit} para continuar.`\n : \"No more pages for this query.\",\n };\n }),\n}));\n\nvi.mock(\"../../src/services/mercadolibre/mercadolibre-orders.js\", () => ({\n searchMercadoLibreOrders: vi.fn(),\n searchMercadoLibreOrdersBatch: vi.fn(),\n getMercadoLibreShipmentBatch: vi.fn(),\n getMercadoLibreShipmentCostsBatch: vi.fn(),\n}));\n\nfunction buildOrder(overrides: Record<string, unknown> = {}) {\n return {\n id: \"2001\",\n date_created: \"2026-05-03T15:00:00.000Z\",\n date_closed: \"2026-05-03T18:00:00.000Z\",\n last_updated: \"2026-05-03T19:00:00.000Z\",\n status: \"paid\",\n total_amount: 100,\n paid_amount: 100,\n currency_id: \"ARS\",\n fulfilled: true,\n tags: [\"delivered\", \"catalog\"],\n buyer: { id: 7001, nickname: \"buyer-one\" },\n seller: { id: 9001, nickname: \"meli-store\" },\n shipping: { id: \"7001\", status: \"delivered\" },\n payments: [\n {\n id: 5001,\n status: \"approved\",\n status_detail: \"accredited\",\n payment_method_id: \"visa\",\n payment_type: \"credit_card\",\n total_paid_amount: 100,\n transaction_amount: 100,\n installments: 1,\n available_actions: [\"refund\"],\n },\n ],\n coupon: { amount: 0 },\n context: { channel: \"marketplace\", site: \"MLA\", flows: [\"catalog\"] },\n feedback: {},\n order_request: {},\n order_items: [\n {\n quantity: 1,\n unit_price: 100,\n sale_fee: 10,\n listing_type_id: \"gold_special\",\n stock: { node_id: \"warehouse-1\" },\n item: {\n id: \"MLA-1\",\n title: \"Running Shoe\",\n seller_sku: \"SKU-1\",\n variation_attributes: [{ name: \"Color\", value_name: \"Red\" }],\n },\n },\n ],\n ...overrides,\n };\n}\n\nfunction buildPagedOrder(offset: number, overrides: Record<string, unknown> = {}) {\n return buildOrder({\n id: `${2000 + offset}`,\n buyer: { id: 7000 + offset, nickname: `buyer-${offset}` },\n shipping: { id: `ship-${offset}`, status: \"delivered\" },\n ...overrides,\n });\n}\n\ndescribe(\"MercadoLibre monster tool handlers batch 7\", () => {\n beforeEach(() => {\n vi.clearAllMocks();\n\n vi.mocked(resolveMercadoLibreProfileOrSelection).mockResolvedValue({\n ok: true,\n value: { profileId: \"meli-profile-1\" },\n });\n\n vi.mocked(normalizeMercadoLibrePaging).mockImplementation((paging) => paging as never);\n vi.mocked(buildMercadoLibrePaginationMetadata).mockImplementation(\n ((metadata: unknown) => {\n const params = metadata as {\n total: number;\n limit: number;\n offset: number;\n returned: number;\n };\n return {\n pagination_source: \"service\",\n total: params.total,\n limit: params.limit,\n offset: params.offset,\n returned: params.returned,\n has_more: params.offset + params.returned < params.total,\n continuation:\n params.offset + params.returned < params.total\n ? `Reenviar la misma tool con offset=${params.offset + params.limit} para continuar.`\n : \"No more pages for this query.\",\n };\n }) as never\n );\n\n vi.mocked(searchMercadoLibreOrdersBatch).mockResolvedValue({\n successful: [],\n failed: [],\n } as never);\n vi.mocked(getMercadoLibreShipmentBatch).mockResolvedValue({\n successful: [],\n failed: [],\n } as never);\n vi.mocked(getMercadoLibreShipmentCostsBatch).mockResolvedValue({\n successful: [],\n failed: [],\n } as never);\n });\n\n it(\"keeps orders_chunk reviewable across the 15-page cap and exposes the clean continuation offset\", async () => {\n const offsets = Array.from({ length: 14 }, (_, index) => (index + 1) * 10);\n\n vi.mocked(searchMercadoLibreOrders).mockResolvedValue({\n paging: { total: 160, limit: 10, offset: 0 },\n results: [buildPagedOrder(0)],\n } as never);\n vi.mocked(searchMercadoLibreOrdersBatch).mockResolvedValue({\n successful: offsets.map((offset) => ({\n id: String(offset),\n document: { results: [buildPagedOrder(offset)] },\n })),\n failed: [],\n } as never);\n\n const result = await meliGetOrdersSummaryHandler({\n profileId: \"meli-profile-1\",\n startDate: \"2026-05-01\",\n endDate: \"2026-05-31\",\n responseMode: \"orders_chunk\",\n limit: 10,\n offset: 0,\n });\n\n expect(searchMercadoLibreOrdersBatch).toHaveBeenCalledWith(\n \"meli-profile-1\",\n {\n seller: \"\",\n from: \"2026-05-01\",\n to: \"2026-05-31\",\n status: undefined,\n q: undefined,\n sort: undefined,\n limit: 10,\n },\n offsets,\n {\n maxConcurrency: 15,\n maxRetries: 2,\n }\n );\n expect(result).toEqual({\n kind: \"object\",\n payload: expect.objectContaining({\n metadata: expect.objectContaining({\n total: 160,\n limit: 10,\n offset: 0,\n returned: 15,\n has_more: true,\n next_offset: 150,\n fetch_mode: \"orders_chunk\",\n pages_per_call_limit: 15,\n pages_requested: 15,\n pages_succeeded: 15,\n pages_failed: 0,\n continuation:\n 'Para continuar trayendo ordenes, volver a invocar meli_get_orders_summary con los mismos filtros, responseMode=\"orders_chunk\", offset=150 y limit=10. Repetir hasta has_more=false.',\n }),\n }),\n });\n expect((result as unknown as { payload: { orders: unknown[] } }).payload.orders).toHaveLength(15);\n });\n\n it(\"keeps sku economics deterministic across multiple currencies for the same seller sku\", async () => {\n vi.mocked(searchMercadoLibreOrders).mockResolvedValue({\n paging: { total: 2, limit: 50, offset: 0 },\n results: [\n buildOrder({\n id: \"ars-order\",\n currency_id: \"ARS\",\n total_amount: 100,\n paid_amount: 100,\n order_items: [\n {\n quantity: 1,\n unit_price: 100,\n sale_fee: 10,\n listing_type_id: \"gold_special\",\n stock: { node_id: \"warehouse-1\" },\n item: {\n id: \"MLA-ARS\",\n title: \"Running Shoe ARS\",\n seller_sku: \"SKU-MULTI\",\n variation_attributes: [],\n },\n },\n ],\n }),\n buildOrder({\n id: \"usd-order\",\n currency_id: \"USD\",\n total_amount: 20,\n paid_amount: 20,\n buyer: { id: 8002, nickname: \"buyer-usd\" },\n shipping: { id: \"ship-usd\", status: \"delivered\" },\n order_items: [\n {\n quantity: 1,\n unit_price: 20,\n sale_fee: 2,\n listing_type_id: \"gold_special\",\n stock: { node_id: \"warehouse-2\" },\n item: {\n id: \"MLA-USD\",\n title: \"Running Shoe USD\",\n seller_sku: \"SKU-MULTI\",\n variation_attributes: [],\n },\n },\n ],\n }),\n ],\n } as never);\n\n const result = await meliGetOrdersSummaryHandler({\n profileId: \"meli-profile-1\",\n startDate: \"2026-05-01\",\n endDate: \"2026-05-31\",\n responseMode: \"calculations\",\n });\n\n const payload = (result as unknown as { payload: Record<string, any> }).payload;\n expect(payload.calculations.sku_unit_economics).toEqual([\n expect.objectContaining({\n seller_sku: \"SKU-MULTI\",\n orders: 2,\n units: 2,\n revenue_by_currency: { ARS: 100, USD: 20 },\n sale_fee_by_currency: { ARS: 10, USD: 2 },\n avg_unit_price_by_currency: { ARS: 50, USD: 10 },\n fee_rate_by_currency: { ARS: 0.1, USD: 0.1 },\n }),\n ]);\n expect(Object.keys(payload.calculations.sku_unit_economics[0].fee_rate_by_currency)).toEqual([\n \"ARS\",\n \"USD\",\n ]);\n });\n\n it(\"keeps shipping chunk continuation local while counting zero-cost cancelled and not-delivered shipments\", async () => {\n const offsets = Array.from({ length: 14 }, (_, index) => (index + 1) * 10);\n const allOrders = [\n buildPagedOrder(0, { shipping: { id: \"ship-0\" }, date_created: \"2026-05-03T15:00:00.000Z\" }),\n ...offsets.map((offset) =>\n buildPagedOrder(offset, {\n shipping: { id: `ship-${offset}` },\n date_created: \"2026-05-03T15:00:00.000Z\",\n })\n ),\n ];\n\n vi.mocked(searchMercadoLibreOrders).mockResolvedValue({\n paging: { total: 160, limit: 10, offset: 0 },\n results: [allOrders[0]],\n } as never);\n vi.mocked(searchMercadoLibreOrdersBatch).mockResolvedValue({\n successful: offsets.map((offset, index) => ({\n id: String(offset),\n document: { results: [allOrders[index + 1]] },\n })),\n failed: [],\n } as never);\n vi.mocked(getMercadoLibreShipmentBatch).mockResolvedValue({\n successful: allOrders.map((order) => {\n const shipmentId = String((order.shipping as { id: string }).id);\n const status =\n shipmentId === \"ship-10\"\n ? \"cancelled\"\n : shipmentId === \"ship-20\"\n ? \"not_delivered\"\n : \"delivered\";\n return {\n id: shipmentId,\n document: {\n status,\n substatus: status,\n logistic_type: shipmentId === \"ship-20\" ? \"\" : \"fulfillment\",\n mode: shipmentId === \"ship-10\" ? \"custom\" : \"me2\",\n },\n };\n }),\n failed: [],\n } as never);\n vi.mocked(getMercadoLibreShipmentCostsBatch).mockResolvedValue({\n successful: allOrders.map((order) => {\n const shipmentId = String((order.shipping as { id: string }).id);\n return {\n id: shipmentId,\n document:\n shipmentId === \"ship-10\" || shipmentId === \"ship-20\"\n ? { receiver: { cost: 0 } }\n : { receiver: { cost: 10 } },\n };\n }),\n failed: [],\n } as never);\n\n const result = await meliGetShippingSummaryHandler({\n profileId: \"meli-profile-1\",\n startDate: \"2026-05-01\",\n endDate: \"2026-05-31\",\n responseMode: \"shipments_chunk\",\n limit: 10,\n offset: 0,\n });\n\n expect(searchMercadoLibreOrdersBatch).toHaveBeenCalledWith(\n \"meli-profile-1\",\n {\n seller: \"\",\n from: \"2026-05-01\",\n to: \"2026-05-31\",\n status: undefined,\n limit: 10,\n },\n offsets,\n {\n maxConcurrency: 15,\n maxRetries: 2,\n }\n );\n\n const payload = (result as unknown as { payload: Record<string, any> }).payload;\n expect(payload.metadata).toEqual(\n expect.objectContaining({\n total: 160,\n limit: 10,\n offset: 0,\n returned: 15,\n has_more: true,\n next_offset: 150,\n fetch_mode: \"shipments_chunk\",\n pages_per_call_limit: 15,\n pages_requested: 15,\n pages_succeeded: 15,\n pages_failed: 0,\n shipment_failures: 0,\n continuation:\n 'Para continuar trayendo shipments, volver a invocar meli_get_shipping_summary con los mismos filtros, responseMode=\"shipments_chunk\", offset=150 y limit=10. Repetir hasta has_more=false.',\n })\n );\n expect(payload.shipments).toEqual(\n expect.arrayContaining([\n [\"2010\", \"ship-10\", \"cancelled\", \"cancelled\", \"fulfillment\", \"custom\", \"ARS\", 0],\n [\"2020\", \"ship-20\", \"not_delivered\", \"not_delivered\", \"\", \"me2\", \"ARS\", 0],\n ])\n );\n });\n});\n"],
|
|
5
|
-
"mappings": "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
|
|
4
|
+
"sourcesContent": ["import { beforeEach, describe, expect, it, vi } from \"vitest\";\n\nimport { meliGetOrdersSummaryHandler } from \"../../src/tools/mercadolibre/get-orders-summary.js\";\nimport { meliGetShippingSummaryHandler } from \"../../src/tools/mercadolibre/get-shipping-summary.js\";\nimport { resolveMercadoLibreProfileOrSelection } from \"../../src/tools/mercadolibre/profile-resolution.js\";\nimport {\n buildMercadoLibrePaginationMetadata,\n normalizeMercadoLibrePaging,\n} from \"../../src/services/mercadolibre/mercadolibre-api.js\";\nimport {\n getMercadoLibreShipmentBatch,\n getMercadoLibreShipmentCostsBatch,\n searchMercadoLibreOrders,\n searchMercadoLibreOrdersBatch,\n} from \"../../src/services/mercadolibre/mercadolibre-orders.js\";\n\nvi.mock(\"mcp-use/server\", () => ({\n object: vi.fn((payload: unknown) => ({ kind: \"object\", payload })),\n error: vi.fn((message: string) => ({ kind: \"error\", message })),\n}));\n\nvi.mock(\"../../src/tools/mercadolibre/profile-resolution.js\", () => ({\n resolveMercadoLibreProfileOrSelection: vi.fn(),\n}));\n\nvi.mock(\"../../src/services/mercadolibre/mercadolibre-api.js\", () => ({\n formatMercadoLibreError: vi.fn(\n (err: unknown, fallback: string) =>\n `formatted:${fallback}:${err instanceof Error ? err.message : String(err)}`\n ),\n normalizeMercadoLibrePaging: vi.fn((paging: unknown) => paging),\n buildMercadoLibrePaginationMetadata: vi.fn((metadata: unknown) => {\n const params = metadata as {\n total: number;\n limit: number;\n offset: number;\n returned: number;\n };\n return {\n pagination_source: \"service\",\n total: params.total,\n limit: params.limit,\n offset: params.offset,\n returned: params.returned,\n has_more: params.offset + params.returned < params.total,\n continuation:\n params.offset + params.returned < params.total\n ? `Reenviar la misma tool con offset=${params.offset + params.limit} para continuar.`\n : \"No more pages for this query.\",\n };\n }),\n}));\n\nvi.mock(\"../../src/services/mercadolibre/mercadolibre-orders.js\", () => ({\n searchMercadoLibreOrders: vi.fn(),\n searchMercadoLibreOrdersBatch: vi.fn(),\n getMercadoLibreShipmentBatch: vi.fn(),\n getMercadoLibreShipmentCostsBatch: vi.fn(),\n}));\n\nfunction buildOrder(overrides: Record<string, unknown> = {}) {\n return {\n id: \"2001\",\n date_created: \"2026-05-03T15:00:00.000Z\",\n date_closed: \"2026-05-03T18:00:00.000Z\",\n last_updated: \"2026-05-03T19:00:00.000Z\",\n status: \"paid\",\n total_amount: 100,\n paid_amount: 100,\n currency_id: \"ARS\",\n fulfilled: true,\n tags: [\"delivered\", \"catalog\"],\n buyer: { id: 7001, nickname: \"buyer-one\" },\n seller: { id: 9001, nickname: \"meli-store\" },\n shipping: { id: \"7001\", status: \"delivered\" },\n payments: [\n {\n id: 5001,\n status: \"approved\",\n status_detail: \"accredited\",\n payment_method_id: \"visa\",\n payment_type: \"credit_card\",\n total_paid_amount: 100,\n transaction_amount: 100,\n shipping_cost: 5,\n installments: 1,\n available_actions: [\"refund\"],\n },\n ],\n coupon: { amount: 0 },\n context: { channel: \"marketplace\", site: \"MLA\", flows: [\"catalog\"] },\n feedback: {},\n order_request: {},\n order_items: [\n {\n quantity: 1,\n unit_price: 100,\n sale_fee: 10,\n listing_type_id: \"gold_special\",\n stock: { node_id: \"warehouse-1\" },\n item: {\n id: \"MLA-1\",\n title: \"Running Shoe\",\n seller_sku: \"SKU-1\",\n variation_attributes: [{ name: \"Color\", value_name: \"Red\" }],\n },\n },\n ],\n ...overrides,\n };\n}\n\nfunction buildPagedOrder(offset: number, overrides: Record<string, unknown> = {}) {\n return buildOrder({\n id: `${2000 + offset}`,\n buyer: { id: 7000 + offset, nickname: `buyer-${offset}` },\n shipping: { id: `ship-${offset}`, status: \"delivered\" },\n ...overrides,\n });\n}\n\ndescribe(\"MercadoLibre monster tool handlers batch 7\", () => {\n beforeEach(() => {\n vi.clearAllMocks();\n\n vi.mocked(resolveMercadoLibreProfileOrSelection).mockResolvedValue({\n ok: true,\n value: { profileId: \"meli-profile-1\" },\n });\n\n vi.mocked(normalizeMercadoLibrePaging).mockImplementation((paging) => paging as never);\n vi.mocked(buildMercadoLibrePaginationMetadata).mockImplementation(\n ((metadata: unknown) => {\n const params = metadata as {\n total: number;\n limit: number;\n offset: number;\n returned: number;\n };\n return {\n pagination_source: \"service\",\n total: params.total,\n limit: params.limit,\n offset: params.offset,\n returned: params.returned,\n has_more: params.offset + params.returned < params.total,\n continuation:\n params.offset + params.returned < params.total\n ? `Reenviar la misma tool con offset=${params.offset + params.limit} para continuar.`\n : \"No more pages for this query.\",\n };\n }) as never\n );\n\n vi.mocked(searchMercadoLibreOrdersBatch).mockResolvedValue({\n successful: [],\n failed: [],\n } as never);\n vi.mocked(getMercadoLibreShipmentBatch).mockResolvedValue({\n successful: [],\n failed: [],\n } as never);\n vi.mocked(getMercadoLibreShipmentCostsBatch).mockResolvedValue({\n successful: [],\n failed: [],\n } as never);\n });\n\n it(\"keeps orders_chunk reviewable across the 15-page cap and exposes the clean continuation offset\", async () => {\n const offsets = Array.from({ length: 14 }, (_, index) => (index + 1) * 10);\n\n vi.mocked(searchMercadoLibreOrders).mockResolvedValue({\n paging: { total: 160, limit: 10, offset: 0 },\n results: [buildPagedOrder(0)],\n } as never);\n vi.mocked(searchMercadoLibreOrdersBatch).mockResolvedValue({\n successful: offsets.map((offset) => ({\n id: String(offset),\n document: { results: [buildPagedOrder(offset)] },\n })),\n failed: [],\n } as never);\n\n const result = await meliGetOrdersSummaryHandler({\n profileId: \"meli-profile-1\",\n startDate: \"2026-05-01\",\n endDate: \"2026-05-31\",\n responseMode: \"orders_chunk\",\n limit: 10,\n offset: 0,\n });\n\n expect(searchMercadoLibreOrdersBatch).toHaveBeenCalledWith(\n \"meli-profile-1\",\n {\n seller: \"\",\n from: \"2026-05-01\",\n to: \"2026-05-31\",\n status: undefined,\n q: undefined,\n sort: undefined,\n limit: 10,\n },\n offsets,\n {\n maxConcurrency: 15,\n maxRetries: 2,\n }\n );\n expect(result).toEqual({\n kind: \"object\",\n payload: expect.objectContaining({\n metadata: expect.objectContaining({\n total: 160,\n limit: 10,\n offset: 0,\n returned: 15,\n has_more: true,\n next_offset: 150,\n fetch_mode: \"orders_chunk\",\n pages_per_call_limit: 15,\n pages_requested: 15,\n pages_succeeded: 15,\n pages_failed: 0,\n continuation:\n 'Para continuar trayendo ordenes, volver a invocar meli_get_orders_summary con los mismos filtros, responseMode=\"orders_chunk\", offset=150 y limit=10. Repetir hasta has_more=false.',\n }),\n }),\n });\n expect((result as unknown as { payload: { orders: unknown[] } }).payload.orders).toHaveLength(15);\n });\n\n it(\"keeps sku economics deterministic across multiple currencies for the same seller sku\", async () => {\n vi.mocked(searchMercadoLibreOrders).mockResolvedValue({\n paging: { total: 2, limit: 50, offset: 0 },\n results: [\n buildOrder({\n id: \"ars-order\",\n currency_id: \"ARS\",\n total_amount: 100,\n paid_amount: 100,\n order_items: [\n {\n quantity: 1,\n unit_price: 100,\n sale_fee: 10,\n listing_type_id: \"gold_special\",\n stock: { node_id: \"warehouse-1\" },\n item: {\n id: \"MLA-ARS\",\n title: \"Running Shoe ARS\",\n seller_sku: \"SKU-MULTI\",\n variation_attributes: [],\n },\n },\n ],\n }),\n buildOrder({\n id: \"usd-order\",\n currency_id: \"USD\",\n total_amount: 20,\n paid_amount: 20,\n buyer: { id: 8002, nickname: \"buyer-usd\" },\n shipping: { id: \"ship-usd\", status: \"delivered\" },\n order_items: [\n {\n quantity: 1,\n unit_price: 20,\n sale_fee: 2,\n listing_type_id: \"gold_special\",\n stock: { node_id: \"warehouse-2\" },\n item: {\n id: \"MLA-USD\",\n title: \"Running Shoe USD\",\n seller_sku: \"SKU-MULTI\",\n variation_attributes: [],\n },\n },\n ],\n }),\n ],\n } as never);\n\n const result = await meliGetOrdersSummaryHandler({\n profileId: \"meli-profile-1\",\n startDate: \"2026-05-01\",\n endDate: \"2026-05-31\",\n responseMode: \"calculations\",\n });\n\n const payload = (result as unknown as { payload: Record<string, any> }).payload;\n expect(payload.calculations.sku_unit_economics).toEqual([\n expect.objectContaining({\n seller_sku: \"SKU-MULTI\",\n orders: 2,\n units: 2,\n revenue_by_currency: { ARS: 100, USD: 20 },\n sale_fee_by_currency: { ARS: 10, USD: 2 },\n avg_unit_price_by_currency: { ARS: 50, USD: 10 },\n fee_rate_by_currency: { ARS: 0.1, USD: 0.1 },\n }),\n ]);\n expect(Object.keys(payload.calculations.sku_unit_economics[0].fee_rate_by_currency)).toEqual([\n \"ARS\",\n \"USD\",\n ]);\n });\n\n it(\"keeps shipping chunk continuation local while counting zero-cost cancelled and not-delivered shipments\", async () => {\n const offsets = Array.from({ length: 14 }, (_, index) => (index + 1) * 10);\n const allOrders = [\n buildPagedOrder(0, { shipping: { id: \"ship-0\" }, date_created: \"2026-05-03T15:00:00.000Z\" }),\n ...offsets.map((offset) =>\n buildPagedOrder(offset, {\n shipping: { id: `ship-${offset}` },\n date_created: \"2026-05-03T15:00:00.000Z\",\n })\n ),\n ];\n\n vi.mocked(searchMercadoLibreOrders).mockResolvedValue({\n paging: { total: 160, limit: 10, offset: 0 },\n results: [allOrders[0]],\n } as never);\n vi.mocked(searchMercadoLibreOrdersBatch).mockResolvedValue({\n successful: offsets.map((offset, index) => ({\n id: String(offset),\n document: { results: [allOrders[index + 1]] },\n })),\n failed: [],\n } as never);\n vi.mocked(getMercadoLibreShipmentBatch).mockResolvedValue({\n successful: allOrders.map((order) => {\n const shipmentId = String((order.shipping as { id: string }).id);\n const status =\n shipmentId === \"ship-10\"\n ? \"cancelled\"\n : shipmentId === \"ship-20\"\n ? \"not_delivered\"\n : \"delivered\";\n return {\n id: shipmentId,\n document: {\n status,\n substatus: status,\n logistic_type: shipmentId === \"ship-20\" ? \"\" : \"fulfillment\",\n mode: shipmentId === \"ship-10\" ? \"custom\" : \"me2\",\n },\n };\n }),\n failed: [],\n } as never);\n vi.mocked(getMercadoLibreShipmentCostsBatch).mockResolvedValue({\n successful: allOrders.map((order) => {\n const shipmentId = String((order.shipping as { id: string }).id);\n return {\n id: shipmentId,\n document:\n shipmentId === \"ship-10\" || shipmentId === \"ship-20\"\n ? { receiver: { cost: 0 } }\n : { receiver: { cost: 10 } },\n };\n }),\n failed: [],\n } as never);\n\n const result = await meliGetShippingSummaryHandler({\n profileId: \"meli-profile-1\",\n startDate: \"2026-05-01\",\n endDate: \"2026-05-31\",\n responseMode: \"shipments_chunk\",\n limit: 10,\n offset: 0,\n });\n\n expect(searchMercadoLibreOrdersBatch).toHaveBeenCalledWith(\n \"meli-profile-1\",\n {\n seller: \"\",\n from: \"2026-05-01\",\n to: \"2026-05-31\",\n status: undefined,\n limit: 10,\n },\n offsets,\n {\n maxConcurrency: 15,\n maxRetries: 2,\n }\n );\n\n const payload = (result as unknown as { payload: Record<string, any> }).payload;\n expect(payload.metadata).toEqual(\n expect.objectContaining({\n total: 160,\n limit: 10,\n offset: 0,\n returned: 15,\n has_more: true,\n next_offset: 150,\n fetch_mode: \"shipments_chunk\",\n pages_per_call_limit: 15,\n pages_requested: 15,\n pages_succeeded: 15,\n pages_failed: 0,\n shipment_failures: 0,\n continuation:\n 'Para continuar trayendo shipments, volver a invocar meli_get_shipping_summary con los mismos filtros, responseMode=\"shipments_chunk\", offset=150 y limit=10. Repetir hasta has_more=false.',\n })\n );\n expect(payload.shipments).toEqual(\n expect.arrayContaining([\n [\"2010\", \"ship-10\", \"cancelled\", \"cancelled\", \"fulfillment\", \"custom\", \"ARS\", 0, 5],\n [\"2020\", \"ship-20\", \"not_delivered\", \"not_delivered\", \"\", \"me2\", \"ARS\", 0, 5],\n ])\n );\n });\n});\n"],
|
|
5
|
+
"mappings": "AAAA,SAAS,YAAY,UAAU,QAAQ,IAAI,UAAU;AAErD,SAAS,mCAAmC;AAC5C,SAAS,qCAAqC;AAC9C,SAAS,6CAA6C;AACtD;AAAA,EACE;AAAA,EACA;AAAA,OACK;AACP;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAEP,GAAG,KAAK,kBAAkB,OAAO;AAAA,EAC/B,QAAQ,GAAG,GAAG,CAAC,aAAsB,EAAE,MAAM,UAAU,QAAQ,EAAE;AAAA,EACjE,OAAO,GAAG,GAAG,CAAC,aAAqB,EAAE,MAAM,SAAS,QAAQ,EAAE;AAChE,EAAE;AAEF,GAAG,KAAK,sDAAsD,OAAO;AAAA,EACnE,uCAAuC,GAAG,GAAG;AAC/C,EAAE;AAEF,GAAG,KAAK,uDAAuD,OAAO;AAAA,EACpE,yBAAyB,GAAG;AAAA,IAC1B,CAAC,KAAc,aACb,aAAa,QAAQ,IAAI,eAAe,QAAQ,IAAI,UAAU,OAAO,GAAG,CAAC;AAAA,EAC7E;AAAA,EACA,6BAA6B,GAAG,GAAG,CAAC,WAAoB,MAAM;AAAA,EAC9D,qCAAqC,GAAG,GAAG,CAAC,aAAsB;AAChE,UAAM,SAAS;AAMf,WAAO;AAAA,MACL,mBAAmB;AAAA,MACnB,OAAO,OAAO;AAAA,MACd,OAAO,OAAO;AAAA,MACd,QAAQ,OAAO;AAAA,MACf,UAAU,OAAO;AAAA,MACjB,UAAU,OAAO,SAAS,OAAO,WAAW,OAAO;AAAA,MACnD,cACE,OAAO,SAAS,OAAO,WAAW,OAAO,QACrC,qCAAqC,OAAO,SAAS,OAAO,KAAK,qBACjE;AAAA,IACR;AAAA,EACF,CAAC;AACH,EAAE;AAEF,GAAG,KAAK,0DAA0D,OAAO;AAAA,EACvE,0BAA0B,GAAG,GAAG;AAAA,EAChC,+BAA+B,GAAG,GAAG;AAAA,EACrC,8BAA8B,GAAG,GAAG;AAAA,EACpC,mCAAmC,GAAG,GAAG;AAC3C,EAAE;AAEF,SAAS,WAAW,YAAqC,CAAC,GAAG;AAC3D,SAAO;AAAA,IACL,IAAI;AAAA,IACJ,cAAc;AAAA,IACd,aAAa;AAAA,IACb,cAAc;AAAA,IACd,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,aAAa;AAAA,IACb,aAAa;AAAA,IACb,WAAW;AAAA,IACX,MAAM,CAAC,aAAa,SAAS;AAAA,IAC7B,OAAO,EAAE,IAAI,MAAM,UAAU,YAAY;AAAA,IACzC,QAAQ,EAAE,IAAI,MAAM,UAAU,aAAa;AAAA,IAC3C,UAAU,EAAE,IAAI,QAAQ,QAAQ,YAAY;AAAA,IAC5C,UAAU;AAAA,MACR;AAAA,QACE,IAAI;AAAA,QACJ,QAAQ;AAAA,QACR,eAAe;AAAA,QACf,mBAAmB;AAAA,QACnB,cAAc;AAAA,QACd,mBAAmB;AAAA,QACnB,oBAAoB;AAAA,QACpB,eAAe;AAAA,QACf,cAAc;AAAA,QACd,mBAAmB,CAAC,QAAQ;AAAA,MAC9B;AAAA,IACF;AAAA,IACA,QAAQ,EAAE,QAAQ,EAAE;AAAA,IACpB,SAAS,EAAE,SAAS,eAAe,MAAM,OAAO,OAAO,CAAC,SAAS,EAAE;AAAA,IACnE,UAAU,CAAC;AAAA,IACX,eAAe,CAAC;AAAA,IAChB,aAAa;AAAA,MACX;AAAA,QACE,UAAU;AAAA,QACV,YAAY;AAAA,QACZ,UAAU;AAAA,QACV,iBAAiB;AAAA,QACjB,OAAO,EAAE,SAAS,cAAc;AAAA,QAChC,MAAM;AAAA,UACJ,IAAI;AAAA,UACJ,OAAO;AAAA,UACP,YAAY;AAAA,UACZ,sBAAsB,CAAC,EAAE,MAAM,SAAS,YAAY,MAAM,CAAC;AAAA,QAC7D;AAAA,MACF;AAAA,IACF;AAAA,IACA,GAAG;AAAA,EACL;AACF;AAEA,SAAS,gBAAgB,QAAgB,YAAqC,CAAC,GAAG;AAChF,SAAO,WAAW;AAAA,IAChB,IAAI,GAAG,MAAO,MAAM;AAAA,IACpB,OAAO,EAAE,IAAI,MAAO,QAAQ,UAAU,SAAS,MAAM,GAAG;AAAA,IACxD,UAAU,EAAE,IAAI,QAAQ,MAAM,IAAI,QAAQ,YAAY;AAAA,IACtD,GAAG;AAAA,EACL,CAAC;AACH;AAEA,SAAS,8CAA8C,MAAM;AAC3D,aAAW,MAAM;AACf,OAAG,cAAc;AAEjB,OAAG,OAAO,qCAAqC,EAAE,kBAAkB;AAAA,MACjE,IAAI;AAAA,MACJ,OAAO,EAAE,WAAW,iBAAiB;AAAA,IACvC,CAAC;AAED,OAAG,OAAO,2BAA2B,EAAE,mBAAmB,CAAC,WAAW,MAAe;AACrF,OAAG,OAAO,mCAAmC,EAAE;AAAA,OAC5C,CAAC,aAAsB;AACtB,cAAM,SAAS;AAMf,eAAO;AAAA,UACL,mBAAmB;AAAA,UACnB,OAAO,OAAO;AAAA,UACd,OAAO,OAAO;AAAA,UACd,QAAQ,OAAO;AAAA,UACf,UAAU,OAAO;AAAA,UACjB,UAAU,OAAO,SAAS,OAAO,WAAW,OAAO;AAAA,UACnD,cACE,OAAO,SAAS,OAAO,WAAW,OAAO,QACrC,qCAAqC,OAAO,SAAS,OAAO,KAAK,qBACjE;AAAA,QACR;AAAA,MACF;AAAA,IACF;AAEA,OAAG,OAAO,6BAA6B,EAAE,kBAAkB;AAAA,MACzD,YAAY,CAAC;AAAA,MACb,QAAQ,CAAC;AAAA,IACX,CAAU;AACV,OAAG,OAAO,4BAA4B,EAAE,kBAAkB;AAAA,MACxD,YAAY,CAAC;AAAA,MACb,QAAQ,CAAC;AAAA,IACX,CAAU;AACV,OAAG,OAAO,iCAAiC,EAAE,kBAAkB;AAAA,MAC7D,YAAY,CAAC;AAAA,MACb,QAAQ,CAAC;AAAA,IACX,CAAU;AAAA,EACZ,CAAC;AAED,KAAG,kGAAkG,YAAY;AAC/G,UAAM,UAAU,MAAM,KAAK,EAAE,QAAQ,GAAG,GAAG,CAAC,GAAG,WAAW,QAAQ,KAAK,EAAE;AAEzE,OAAG,OAAO,wBAAwB,EAAE,kBAAkB;AAAA,MACpD,QAAQ,EAAE,OAAO,KAAK,OAAO,IAAI,QAAQ,EAAE;AAAA,MAC3C,SAAS,CAAC,gBAAgB,CAAC,CAAC;AAAA,IAC9B,CAAU;AACV,OAAG,OAAO,6BAA6B,EAAE,kBAAkB;AAAA,MACzD,YAAY,QAAQ,IAAI,CAAC,YAAY;AAAA,QACnC,IAAI,OAAO,MAAM;AAAA,QACjB,UAAU,EAAE,SAAS,CAAC,gBAAgB,MAAM,CAAC,EAAE;AAAA,MACjD,EAAE;AAAA,MACF,QAAQ,CAAC;AAAA,IACX,CAAU;AAEV,UAAM,SAAS,MAAM,4BAA4B;AAAA,MAC/C,WAAW;AAAA,MACX,WAAW;AAAA,MACX,SAAS;AAAA,MACT,cAAc;AAAA,MACd,OAAO;AAAA,MACP,QAAQ;AAAA,IACV,CAAC;AAED,WAAO,6BAA6B,EAAE;AAAA,MACpC;AAAA,MACA;AAAA,QACE,QAAQ;AAAA,QACR,MAAM;AAAA,QACN,IAAI;AAAA,QACJ,QAAQ;AAAA,QACR,GAAG;AAAA,QACH,MAAM;AAAA,QACN,OAAO;AAAA,MACT;AAAA,MACA;AAAA,MACA;AAAA,QACE,gBAAgB;AAAA,QAChB,YAAY;AAAA,MACd;AAAA,IACF;AACA,WAAO,MAAM,EAAE,QAAQ;AAAA,MACrB,MAAM;AAAA,MACN,SAAS,OAAO,iBAAiB;AAAA,QAC/B,UAAU,OAAO,iBAAiB;AAAA,UAChC,OAAO;AAAA,UACP,OAAO;AAAA,UACP,QAAQ;AAAA,UACR,UAAU;AAAA,UACV,UAAU;AAAA,UACV,aAAa;AAAA,UACb,YAAY;AAAA,UACZ,sBAAsB;AAAA,UACtB,iBAAiB;AAAA,UACjB,iBAAiB;AAAA,UACjB,cAAc;AAAA,UACd,cACE;AAAA,QACJ,CAAC;AAAA,MACH,CAAC;AAAA,IACH,CAAC;AACD,WAAQ,OAAyD,QAAQ,MAAM,EAAE,aAAa,EAAE;AAAA,EAClG,CAAC;AAED,KAAG,wFAAwF,YAAY;AACrG,OAAG,OAAO,wBAAwB,EAAE,kBAAkB;AAAA,MACpD,QAAQ,EAAE,OAAO,GAAG,OAAO,IAAI,QAAQ,EAAE;AAAA,MACzC,SAAS;AAAA,QACP,WAAW;AAAA,UACT,IAAI;AAAA,UACJ,aAAa;AAAA,UACb,cAAc;AAAA,UACd,aAAa;AAAA,UACb,aAAa;AAAA,YACX;AAAA,cACE,UAAU;AAAA,cACV,YAAY;AAAA,cACZ,UAAU;AAAA,cACV,iBAAiB;AAAA,cACjB,OAAO,EAAE,SAAS,cAAc;AAAA,cAChC,MAAM;AAAA,gBACJ,IAAI;AAAA,gBACJ,OAAO;AAAA,gBACP,YAAY;AAAA,gBACZ,sBAAsB,CAAC;AAAA,cACzB;AAAA,YACF;AAAA,UACF;AAAA,QACF,CAAC;AAAA,QACD,WAAW;AAAA,UACT,IAAI;AAAA,UACJ,aAAa;AAAA,UACb,cAAc;AAAA,UACd,aAAa;AAAA,UACb,OAAO,EAAE,IAAI,MAAM,UAAU,YAAY;AAAA,UACzC,UAAU,EAAE,IAAI,YAAY,QAAQ,YAAY;AAAA,UAChD,aAAa;AAAA,YACX;AAAA,cACE,UAAU;AAAA,cACV,YAAY;AAAA,cACZ,UAAU;AAAA,cACV,iBAAiB;AAAA,cACjB,OAAO,EAAE,SAAS,cAAc;AAAA,cAChC,MAAM;AAAA,gBACJ,IAAI;AAAA,gBACJ,OAAO;AAAA,gBACP,YAAY;AAAA,gBACZ,sBAAsB,CAAC;AAAA,cACzB;AAAA,YACF;AAAA,UACF;AAAA,QACF,CAAC;AAAA,MACH;AAAA,IACF,CAAU;AAEV,UAAM,SAAS,MAAM,4BAA4B;AAAA,MAC/C,WAAW;AAAA,MACX,WAAW;AAAA,MACX,SAAS;AAAA,MACT,cAAc;AAAA,IAChB,CAAC;AAED,UAAM,UAAW,OAAuD;AACxE,WAAO,QAAQ,aAAa,kBAAkB,EAAE,QAAQ;AAAA,MACtD,OAAO,iBAAiB;AAAA,QACtB,YAAY;AAAA,QACZ,QAAQ;AAAA,QACR,OAAO;AAAA,QACP,qBAAqB,EAAE,KAAK,KAAK,KAAK,GAAG;AAAA,QACzC,sBAAsB,EAAE,KAAK,IAAI,KAAK,EAAE;AAAA,QACxC,4BAA4B,EAAE,KAAK,IAAI,KAAK,GAAG;AAAA,QAC/C,sBAAsB,EAAE,KAAK,KAAK,KAAK,IAAI;AAAA,MAC7C,CAAC;AAAA,IACH,CAAC;AACD,WAAO,OAAO,KAAK,QAAQ,aAAa,mBAAmB,CAAC,EAAE,oBAAoB,CAAC,EAAE,QAAQ;AAAA,MAC3F;AAAA,MACA;AAAA,IACF,CAAC;AAAA,EACH,CAAC;AAED,KAAG,0GAA0G,YAAY;AACvH,UAAM,UAAU,MAAM,KAAK,EAAE,QAAQ,GAAG,GAAG,CAAC,GAAG,WAAW,QAAQ,KAAK,EAAE;AACzE,UAAM,YAAY;AAAA,MAChB,gBAAgB,GAAG,EAAE,UAAU,EAAE,IAAI,SAAS,GAAG,cAAc,2BAA2B,CAAC;AAAA,MAC3F,GAAG,QAAQ;AAAA,QAAI,CAAC,WACd,gBAAgB,QAAQ;AAAA,UACtB,UAAU,EAAE,IAAI,QAAQ,MAAM,GAAG;AAAA,UACjC,cAAc;AAAA,QAChB,CAAC;AAAA,MACH;AAAA,IACF;AAEA,OAAG,OAAO,wBAAwB,EAAE,kBAAkB;AAAA,MACpD,QAAQ,EAAE,OAAO,KAAK,OAAO,IAAI,QAAQ,EAAE;AAAA,MAC3C,SAAS,CAAC,UAAU,CAAC,CAAC;AAAA,IACxB,CAAU;AACV,OAAG,OAAO,6BAA6B,EAAE,kBAAkB;AAAA,MACzD,YAAY,QAAQ,IAAI,CAAC,QAAQ,WAAW;AAAA,QAC1C,IAAI,OAAO,MAAM;AAAA,QACjB,UAAU,EAAE,SAAS,CAAC,UAAU,QAAQ,CAAC,CAAC,EAAE;AAAA,MAC9C,EAAE;AAAA,MACF,QAAQ,CAAC;AAAA,IACX,CAAU;AACV,OAAG,OAAO,4BAA4B,EAAE,kBAAkB;AAAA,MACxD,YAAY,UAAU,IAAI,CAAC,UAAU;AACnC,cAAM,aAAa,OAAQ,MAAM,SAA4B,EAAE;AAC/D,cAAM,SACJ,eAAe,YACX,cACA,eAAe,YACb,kBACA;AACR,eAAO;AAAA,UACL,IAAI;AAAA,UACJ,UAAU;AAAA,YACR;AAAA,YACA,WAAW;AAAA,YACX,eAAe,eAAe,YAAY,KAAK;AAAA,YAC/C,MAAM,eAAe,YAAY,WAAW;AAAA,UAC9C;AAAA,QACF;AAAA,MACF,CAAC;AAAA,MACD,QAAQ,CAAC;AAAA,IACX,CAAU;AACV,OAAG,OAAO,iCAAiC,EAAE,kBAAkB;AAAA,MAC7D,YAAY,UAAU,IAAI,CAAC,UAAU;AACnC,cAAM,aAAa,OAAQ,MAAM,SAA4B,EAAE;AAC/D,eAAO;AAAA,UACL,IAAI;AAAA,UACJ,UACE,eAAe,aAAa,eAAe,YACvC,EAAE,UAAU,EAAE,MAAM,EAAE,EAAE,IACxB,EAAE,UAAU,EAAE,MAAM,GAAG,EAAE;AAAA,QACjC;AAAA,MACF,CAAC;AAAA,MACD,QAAQ,CAAC;AAAA,IACX,CAAU;AAEV,UAAM,SAAS,MAAM,8BAA8B;AAAA,MACjD,WAAW;AAAA,MACX,WAAW;AAAA,MACX,SAAS;AAAA,MACT,cAAc;AAAA,MACd,OAAO;AAAA,MACP,QAAQ;AAAA,IACV,CAAC;AAED,WAAO,6BAA6B,EAAE;AAAA,MACpC;AAAA,MACA;AAAA,QACE,QAAQ;AAAA,QACR,MAAM;AAAA,QACN,IAAI;AAAA,QACJ,QAAQ;AAAA,QACR,OAAO;AAAA,MACT;AAAA,MACA;AAAA,MACA;AAAA,QACE,gBAAgB;AAAA,QAChB,YAAY;AAAA,MACd;AAAA,IACF;AAEA,UAAM,UAAW,OAAuD;AACxE,WAAO,QAAQ,QAAQ,EAAE;AAAA,MACvB,OAAO,iBAAiB;AAAA,QACtB,OAAO;AAAA,QACP,OAAO;AAAA,QACP,QAAQ;AAAA,QACR,UAAU;AAAA,QACV,UAAU;AAAA,QACV,aAAa;AAAA,QACb,YAAY;AAAA,QACZ,sBAAsB;AAAA,QACtB,iBAAiB;AAAA,QACjB,iBAAiB;AAAA,QACjB,cAAc;AAAA,QACd,mBAAmB;AAAA,QACnB,cACE;AAAA,MACJ,CAAC;AAAA,IACH;AACA,WAAO,QAAQ,SAAS,EAAE;AAAA,MACxB,OAAO,gBAAgB;AAAA,QACrB,CAAC,QAAQ,WAAW,aAAa,aAAa,eAAe,UAAU,OAAO,GAAG,CAAC;AAAA,QAClF,CAAC,QAAQ,WAAW,iBAAiB,iBAAiB,IAAI,OAAO,OAAO,GAAG,CAAC;AAAA,MAC9E,CAAC;AAAA,IACH;AAAA,EACF,CAAC;AACH,CAAC;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
package/dist/vitest.config.js
CHANGED
|
@@ -6,7 +6,9 @@ var vitest_config_default = defineConfig({
|
|
|
6
6
|
setupFiles: ["./tests/setup.ts"],
|
|
7
7
|
clearMocks: true,
|
|
8
8
|
restoreMocks: true,
|
|
9
|
-
mockReset: true
|
|
9
|
+
mockReset: true,
|
|
10
|
+
allowOnly: false
|
|
11
|
+
// block .only in focused tests (forbidOnly equivalent in vitest 4.x)
|
|
10
12
|
}
|
|
11
13
|
});
|
|
12
14
|
export {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../vitest.config.ts"],
|
|
4
|
-
"sourcesContent": ["import { defineConfig } from \"vitest/config\";\n\nexport default defineConfig({\n\ttest: {\n\t\tenvironment: \"node\",\n\t\tinclude: [\"tests/**/*.test.ts\", \"src/**/__tests__/**/*.test.ts\"],\n\t\tsetupFiles: [\"./tests/setup.ts\"],\n\t\tclearMocks: true,\n\t\trestoreMocks: true,\n\t\tmockReset: true,\n\t},\n});\n"],
|
|
5
|
-
"mappings": "AAAA,SAAS,oBAAoB;AAE7B,IAAO,wBAAQ,aAAa;AAAA,EAC3B,MAAM;AAAA,IACL,aAAa;AAAA,IACb,SAAS,CAAC,sBAAsB,+BAA+B;AAAA,IAC/D,YAAY,CAAC,kBAAkB;AAAA,IAC/B,YAAY;AAAA,IACZ,cAAc;AAAA,IACd,WAAW;AAAA,EACZ;AACD,CAAC;",
|
|
4
|
+
"sourcesContent": ["import { defineConfig } from \"vitest/config\";\n\nexport default defineConfig({\n\ttest: {\n\t\tenvironment: \"node\",\n\t\tinclude: [\"tests/**/*.test.ts\", \"src/**/__tests__/**/*.test.ts\"],\n\t\tsetupFiles: [\"./tests/setup.ts\"],\n\t\tclearMocks: true,\n\t\trestoreMocks: true,\n\t\tmockReset: true,\n\t\tallowOnly: false, // block .only in focused tests (forbidOnly equivalent in vitest 4.x)\n\t},\n});\n"],
|
|
5
|
+
"mappings": "AAAA,SAAS,oBAAoB;AAE7B,IAAO,wBAAQ,aAAa;AAAA,EAC3B,MAAM;AAAA,IACL,aAAa;AAAA,IACb,SAAS,CAAC,sBAAsB,+BAA+B;AAAA,IAC/D,YAAY,CAAC,kBAAkB;AAAA,IAC/B,YAAY;AAAA,IACZ,cAAc;AAAA,IACd,WAAW;AAAA,IACX,WAAW;AAAA;AAAA,EACZ;AACD,CAAC;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|