61 lines
2.3 KiB
TypeScript
61 lines
2.3 KiB
TypeScript
import { detectSkuOrBarcodeName } from '@/lib/sku-barcode-detector'
|
||
|
||
describe('detectSkuOrBarcodeName(SKU 图文件名判别)', () => {
|
||
it.each([
|
||
// 条码:SKU 编码 + N数字V数字 段(生产数据真实形态)
|
||
['DNZ038521N1280V01', 'barcode'],
|
||
['CY001306N35V01', 'barcode'],
|
||
['BJ017603N1241V01', 'barcode'],
|
||
['cy001301N35', 'barcode'], // 小写品类码也能识别
|
||
['GBSFY-DNZ038415N1261V01', 'barcode'], // 带店铺前缀
|
||
])('%s → %s', (input, expected) => {
|
||
expect(detectSkuOrBarcodeName(input)?.type).toBe(expected)
|
||
// value 保留原始大小写
|
||
expect(detectSkuOrBarcodeName(input)?.value).toBe(input)
|
||
})
|
||
|
||
it.each([
|
||
// SKU 编号:品类码 + 纯数字
|
||
['DNZ038521', 'skuCode'],
|
||
['AD033601', 'skuCode'],
|
||
['GBSFY-AD0360', 'skuCode'], // 带店铺前缀
|
||
['MKHDNZ0409260600987', 'skuCode'], // MKH=模块化前缀,无连字符直接拼品类码(测试人员真实用例)
|
||
['GBSFYAD0360', 'skuCode'], // 店铺前缀无连字符形态
|
||
])('%s → %s', (input, expected) => {
|
||
expect(detectSkuOrBarcodeName(input)?.type).toBe(expected)
|
||
})
|
||
|
||
it.each([
|
||
['ZH-SZT018001-AD033501N1256V01'], // 上传人员确认:N/V 仍属于组合 SKU 编码
|
||
['ZH-SZT018001-AD033501'],
|
||
['ZH-SZT018001-AD033501-BJ017603N1241V01'],
|
||
['zh-szt018001-ad033501n1256v01'],
|
||
['MKHDNZ0409260601010+GBGJ-SJ038016N1410V01'],
|
||
['mkhdnz0409260601010+gbgj-sj038016n1410v01'],
|
||
['DNZ038521+AD033601+BJ017603N1241V01'],
|
||
])('%s → 组合 SKU 整串保留', (input) => {
|
||
expect(detectSkuOrBarcodeName(input)).toEqual({ type: 'skuCode', value: input })
|
||
})
|
||
|
||
it.each([
|
||
// 命名不规范:一律不自动填
|
||
['1'],
|
||
['10'],
|
||
['02-1'],
|
||
['MKH-DNZ038528N1280V01-1-GBGJ-DNZ038415N1261V01-5'], // 复合串
|
||
['GBPM-BJ019201N1280V01场景'], // 含中文
|
||
['ZH-AD033501N1256V01'], // 组合 SKU 至少包含两个产品段
|
||
['ZH--SZT018001-AD033501'],
|
||
['ZH-SZT018001-AD033501-'],
|
||
['ZH-SZT018001-组合'],
|
||
['MKHDNZ0409260601010+'],
|
||
['+GBGJ-SJ038016N1410V01'],
|
||
['MKHDNZ0409260601010++GBGJ-SJ038016N1410V01'],
|
||
['MKHDNZ0409260601010+随便起的名字'],
|
||
['随便起的名字'],
|
||
[''],
|
||
])('%s → 不填(null)', (input) => {
|
||
expect(detectSkuOrBarcodeName(input)).toBeNull()
|
||
})
|
||
})
|