jd-search.adapter.test.ts 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. import assert from 'node:assert/strict';
  2. import test from 'node:test';
  3. import { adaptJdSearchResponse } from '../src/modules/domestic-voc/adapters/jd-search.adapter.js';
  4. test('JD search adapter maps market signals without treating them as operating-period sales', () => {
  5. const products = adaptJdSearchResponse({
  6. code: 200,
  7. data: {
  8. code: 200,
  9. data: {
  10. products: [{
  11. id: '10001',
  12. title: '示例品牌 商用设备',
  13. imageUrl: 'jfs/example.jpg',
  14. price: '1299.00',
  15. sales: '多人购买',
  16. monthSales: '30日售出多件',
  17. shopId: 'shop-1',
  18. shopName: '示例店铺',
  19. venderId: 'seller-1',
  20. onShelvesTime: 1_700_000_000_000,
  21. }],
  22. },
  23. },
  24. }, {
  25. brand: '示例品牌',
  26. category: '商用设备',
  27. keyword: '示例品牌 商用设备',
  28. collectedAt: '2026-07-29T00:00:00.000Z',
  29. });
  30. assert.equal(products.length, 1);
  31. assert.equal(products[0]?.productKey, 'jd:10001');
  32. assert.equal(products[0]?.role, 'competitor');
  33. assert.equal(products[0]?.source, 'fmode_gateway');
  34. assert.equal(products[0]?.summary.averageUnitPrice, 1299);
  35. assert.equal(products[0]?.summary.soldUnits, 0);
  36. assert.equal(products[0]?.market?.monthSalesText, '30日售出多件');
  37. assert.equal(products[0]?.market?.shopName, '示例店铺');
  38. assert.match(products[0]?.detail?.imageUrl ?? '', /^https:\/\/img30\.360buyimg\.com\/sku\//);
  39. });