130 lines
4.8 KiB
TypeScript
130 lines
4.8 KiB
TypeScript
import { describe, expect, it } from 'vitest';
|
|
import {
|
|
cleanLinkName,
|
|
deriveLinkTagNames,
|
|
linkDims,
|
|
parseLinkName,
|
|
sameOriginGroup,
|
|
truncateToProcess,
|
|
} from './origin-name';
|
|
|
|
describe('truncateToProcess', () => {
|
|
it('keeps first 3 dash segments (drops warehouse)', () => {
|
|
expect(truncateToProcess('美国(包邮)180g纯棉T恤成人款-DG001-单面印花-美西洛杉矶一仓'))
|
|
.toBe('美国(包邮)180g纯棉T恤成人款-DG001-单面印花');
|
|
});
|
|
it('is identity for 3-segment names', () => {
|
|
expect(truncateToProcess('美国(不包邮)230g水洗炒雪花T恤-KRHM003-直喷双面'))
|
|
.toBe('美国(不包邮)230g水洗炒雪花T恤-KRHM003-直喷双面');
|
|
});
|
|
it('handles malformed names without country prefix', () => {
|
|
expect(truncateToProcess('(不包邮)230g水洗炒雪花T恤-FRTM001-双面印花'))
|
|
.toBe('(不包邮)230g水洗炒雪花T恤-FRTM001-双面印花');
|
|
});
|
|
it('returns empty for null/empty', () => {
|
|
expect(truncateToProcess(null)).toBe('');
|
|
expect(truncateToProcess('')).toBe('');
|
|
});
|
|
});
|
|
|
|
describe('sameOriginGroup', () => {
|
|
it('matches same product across warehouses', () => {
|
|
expect(sameOriginGroup(
|
|
'美国(包邮)180g纯棉T恤成人款-DG001-单面印花-美西洛杉矶一仓',
|
|
'美国(包邮)180g纯棉T恤成人款-DG001-单面印花-美中亚特兰大仓',
|
|
)).toBe(true);
|
|
});
|
|
it('does not match different SKU', () => {
|
|
expect(sameOriginGroup(
|
|
'美国(包邮)180g纯棉T恤成人款-DG001-单面印花',
|
|
'美国(包邮)180g纯棉T恤成人款-DG002-单面印花',
|
|
)).toBe(false);
|
|
});
|
|
it('does not match different country', () => {
|
|
expect(sameOriginGroup(
|
|
'美国(包邮)T恤-DG001-单面印花',
|
|
'德国(不包邮)T恤-DG001-单面印花',
|
|
)).toBe(false);
|
|
});
|
|
it('does not match empty names', () => {
|
|
expect(sameOriginGroup(null, 'x-y-z')).toBe(false);
|
|
expect(sameOriginGroup('', '')).toBe(false);
|
|
});
|
|
});
|
|
|
|
describe('parseLinkName / cleanLinkName', () => {
|
|
it('parses 国家(物流)品名-SKU-工艺 → 品名 + 型号', () => {
|
|
expect(parseLinkName('美国(包邮)180g纯棉T恤成人款-DG001-单面印花')).toEqual({
|
|
productName: '180g纯棉T恤成人款',
|
|
skuCode: 'DG001',
|
|
});
|
|
expect(cleanLinkName('美国(包邮)180g纯棉T恤成人款-DG001-单面印花')).toBe(
|
|
'180g纯棉T恤成人款 DG001',
|
|
);
|
|
});
|
|
|
|
it('handles half-width parens and warehouse suffix', () => {
|
|
expect(
|
|
cleanLinkName('美国(不包邮光板)180GT恤成人款-JSA002-不打印·美西洛杉矶二仓'),
|
|
).toBe('180GT恤成人款 JSA002');
|
|
});
|
|
|
|
it('returns null / raw fallback for manual names without the country(remark) structure', () => {
|
|
expect(parseLinkName('180g纯棉T恤成人款')).toBeNull();
|
|
expect(cleanLinkName('180g纯棉T恤成人款')).toBe('180g纯棉T恤成人款');
|
|
expect(cleanLinkName(null)).toBe('');
|
|
});
|
|
|
|
it('returns null when product name after parens is empty', () => {
|
|
expect(parseLinkName('美国(包邮)-DG001-单面印花')).toBeNull();
|
|
});
|
|
});
|
|
|
|
describe('deriveLinkTagNames', () => {
|
|
it('单面印花 + 包邮 + 无工艺关键字 → 单面印花/烫画/包邮', () => {
|
|
expect(deriveLinkTagNames('美国(包邮)180g纯棉T恤成人款-DG001-单面印花')).toEqual([
|
|
'单面印花',
|
|
'烫画',
|
|
'包邮',
|
|
]);
|
|
});
|
|
|
|
it('不打印 + 光板 + 不包邮 → 归并为单个不打印(光板即不打印)', () => {
|
|
expect(
|
|
deriveLinkTagNames('美国(不包邮光板)180GT恤成人款-JSA002-不打印·美西洛杉矶二仓'),
|
|
).toEqual(['不打印', '不包邮']);
|
|
});
|
|
|
|
it('双面印花 + 不包邮,且不误命中包邮', () => {
|
|
expect(deriveLinkTagNames('美国(不包邮)T恤-DG001-双面印花·美东新泽西仓')).toEqual([
|
|
'双面印花',
|
|
'烫画',
|
|
'不包邮',
|
|
]);
|
|
});
|
|
|
|
it('空名称返回空数组', () => {
|
|
expect(deriveLinkTagNames(null)).toEqual([]);
|
|
});
|
|
});
|
|
|
|
describe('linkDims', () => {
|
|
it('解析物流备注/工艺/印花数量', () => {
|
|
expect(linkDims('美国(包邮)180g纯棉T恤成人款-DG001-单面印花')).toEqual({
|
|
logistics: '包邮',
|
|
crafts: ['烫画'],
|
|
printCount: '单面印花',
|
|
});
|
|
expect(linkDims('美国(不包邮光板)180GT恤成人款-JSA002-不打印·美西洛杉矶二仓')).toEqual({
|
|
logistics: '不包邮光板',
|
|
crafts: ['不打印'],
|
|
printCount: null,
|
|
});
|
|
});
|
|
|
|
it('无括号结构时物流为 null,手工名称工艺默认烫画', () => {
|
|
expect(linkDims('纯棉T恤')).toEqual({ logistics: null, crafts: ['烫画'], printCount: null });
|
|
expect(linkDims(null)).toEqual({ logistics: null, crafts: [], printCount: null });
|
|
});
|
|
});
|