64 lines
2.3 KiB
JavaScript
64 lines
2.3 KiB
JavaScript
import assert from 'node:assert/strict';
|
|
import { test } from 'node:test';
|
|
import {
|
|
mapOzonProduct,
|
|
parseOzonInfoItems,
|
|
parseOzonListPage,
|
|
} from '../src/online-product-mapper.ts';
|
|
|
|
test('列表游标与商品标识按平台响应读取,缺失标识时拒绝继续同步', () => {
|
|
const page = parseOzonListPage({
|
|
result: {
|
|
items: [{ product_id: 123, offer_id: 'offer-1' }],
|
|
last_id: 'next-page',
|
|
},
|
|
});
|
|
assert.deepEqual(page, {
|
|
items: [{ product_id: '123', offer_id: 'offer-1' }],
|
|
lastId: 'next-page',
|
|
});
|
|
assert.throws(
|
|
() => parseOzonListPage({ result: { items: [{ product_id: 123 }] } }),
|
|
/缺少商品标识/,
|
|
);
|
|
assert.throws(() => parseOzonInfoItems({ result: {} }), /响应格式异常/);
|
|
});
|
|
|
|
test('可见性未知、库存零和审核错误保留各自语义', () => {
|
|
const product = mapOzonProduct(
|
|
{
|
|
id: 123,
|
|
offer_id: 'offer-1',
|
|
name: '商品',
|
|
price: '999.00',
|
|
old_price: '1110.00',
|
|
stocks: { present: 0 },
|
|
status: {
|
|
moderate_status: 'declined',
|
|
validation_state: 'failed',
|
|
decline_reasons: [{ message: '图片不符合要求' }],
|
|
},
|
|
images: [{ file_name: 'https://example.com/product.jpg' }],
|
|
sources: [{ sku: 456 }],
|
|
},
|
|
{ product_id: '123', offer_id: 'offer-1' },
|
|
);
|
|
assert.equal(product.visible, null);
|
|
assert.deepEqual(product.stock_summary, { total: 0, has_data: true });
|
|
assert.equal(product.moderation_status, 'declined');
|
|
assert.equal(product.remote_sku, '456');
|
|
assert.equal(product.image_summary.url, 'https://example.com/product.jpg');
|
|
assert.equal(product.error_payload[0].message, '图片不符合要求');
|
|
assert.equal(product.selling_price, '999.00');
|
|
});
|
|
|
|
test('不存在库存数据和非 HTTPS 图片不能伪装成有效平台数据', () => {
|
|
const product = mapOzonProduct(
|
|
{ id: 123, price: 'abc', primary_image: 'http://example.com/a.jpg' },
|
|
{ product_id: '123', offer_id: 'offer-1' },
|
|
);
|
|
assert.deepEqual(product.stock_summary, { total: 0, has_data: false });
|
|
assert.equal(product.image_summary.url, null);
|
|
assert.equal(product.selling_price, null);
|
|
});
|