Files
inkreach-official-website/apps/admin/src/utils/origin-name.spec.ts
T

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 });
});
});