test: 智能识别与英文名搜索的单测 + e2e
Some checks failed
PR Preview / teardown-preview (pull_request) Has been skipped
Test / unit-test (push) Successful in 6s
Test / build-check (push) Successful in 6s
PR Preview / test (pull_request) Successful in 6s
PR Preview / deploy-preview (pull_request) Successful in 16s
Test / e2e-test (push) Failing after 6m2s
Some checks failed
PR Preview / teardown-preview (pull_request) Has been skipped
Test / unit-test (push) Successful in 6s
Test / build-check (push) Successful in 6s
PR Preview / test (pull_request) Successful in 6s
PR Preview / deploy-preview (pull_request) Successful in 16s
Test / e2e-test (push) Failing after 6m2s
- 将粘贴解析抽到 useOilProductPaste composable - 8 条 vitest 覆盖价格/规格/中英文名/类型判断 - 2 条 cypress 覆盖 UI 填充(产品 100ml、精油 15ml) - 补英文名搜索 e2e;旧 search 用例 placeholder 选择器宽松化 Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
73
frontend/src/__tests__/oilProductPaste.test.js
Normal file
73
frontend/src/__tests__/oilProductPaste.test.js
Normal file
@@ -0,0 +1,73 @@
|
||||
import { describe, it, expect } from 'vitest'
|
||||
import { parseOilProductPaste } from '../composables/useOilProductPaste'
|
||||
|
||||
describe('parseOilProductPaste', () => {
|
||||
it('returns empty shape for empty input', () => {
|
||||
const r = parseOilProductPaste('')
|
||||
expect(r.cn).toBe('')
|
||||
expect(r.en).toBe('')
|
||||
expect(r.memberPrice).toBeNull()
|
||||
expect(r.retailPrice).toBeNull()
|
||||
})
|
||||
|
||||
it('parses the 花样年华 sample as product with 100ml', () => {
|
||||
const sample = `优惠顾客价:¥310PT:41
|
||||
|
||||
零售价:¥465
|
||||
|
||||
点数:37 规格:100毫升
|
||||
|
||||
花样年华焕颜精华水 Salubelle Rejuvenating Essence`
|
||||
const r = parseOilProductPaste(sample)
|
||||
expect(r.type).toBe('product')
|
||||
expect(r.memberPrice).toBe(310)
|
||||
expect(r.retailPrice).toBe(465)
|
||||
expect(r.productAmount).toBe(100)
|
||||
expect(r.productUnit).toBe('ml')
|
||||
expect(r.cn).toBe('花样年华焕颜精华水')
|
||||
expect(r.en).toBe('Salubelle Rejuvenating Essence')
|
||||
})
|
||||
|
||||
it('detects essential oil when volume is standard ml', () => {
|
||||
const sample = `会员价:¥200\n零售价:¥267\n规格:15毫升\n薰衣草 Lavender`
|
||||
const r = parseOilProductPaste(sample)
|
||||
expect(r.type).toBe('oil')
|
||||
expect(r.volume).toBe('15')
|
||||
expect(r.cn).toBe('薰衣草')
|
||||
expect(r.en).toBe('Lavender')
|
||||
})
|
||||
|
||||
it('handles half-width colon and dollar variant', () => {
|
||||
const r = parseOilProductPaste('优惠顾客价: ¥99\n零售价: ¥150\n规格: 5ml\n柠檬 Lemon')
|
||||
expect(r.memberPrice).toBe(99)
|
||||
expect(r.retailPrice).toBe(150)
|
||||
expect(r.type).toBe('oil')
|
||||
expect(r.volume).toBe('5')
|
||||
})
|
||||
|
||||
it('parses capsule spec as product', () => {
|
||||
const r = parseOilProductPaste('优惠顾客价:¥200\n规格:60粒\n深海鱼油 Omega')
|
||||
expect(r.type).toBe('product')
|
||||
expect(r.productAmount).toBe(60)
|
||||
expect(r.productUnit).toBe('capsule')
|
||||
})
|
||||
|
||||
it('parses gram spec as product', () => {
|
||||
const r = parseOilProductPaste('优惠顾客价:¥80\n规格:120克\n洁面乳 Face Wash')
|
||||
expect(r.productUnit).toBe('g')
|
||||
expect(r.productAmount).toBe(120)
|
||||
})
|
||||
|
||||
it('non-standard ml volume falls to product', () => {
|
||||
const r = parseOilProductPaste('优惠顾客价:¥310\n规格:100毫升\n精华 Essence')
|
||||
expect(r.type).toBe('product')
|
||||
expect(r.productAmount).toBe(100)
|
||||
expect(r.productUnit).toBe('ml')
|
||||
})
|
||||
|
||||
it('name without english part keeps cn only', () => {
|
||||
const r = parseOilProductPaste('优惠顾客价:¥50\n规格:5毫升\n某国产品')
|
||||
expect(r.cn).toBe('某国产品')
|
||||
expect(r.en).toBe('')
|
||||
})
|
||||
})
|
||||
Reference in New Issue
Block a user