diff --git a/frontend/src/__tests__/pr27Features.test.js b/frontend/src/__tests__/pr27Features.test.js index 7d8ded3..b810949 100644 --- a/frontend/src/__tests__/pr27Features.test.js +++ b/frontend/src/__tests__/pr27Features.test.js @@ -542,3 +542,69 @@ describe('oil card branding — PR33', () => { expect(oilPriceUnit('植物空胶囊')).toBe('颗') }) }) + +// --------------------------------------------------------------------------- +// PR34: Product edit UI — unit-based form switching +// --------------------------------------------------------------------------- +describe('product edit UI logic — PR34', () => { + it('drop unit shows standard volume selector', () => { + const unit = 'drop' + expect(unit === 'drop').toBe(true) + }) + + it('non-drop unit shows amount + unit selector', () => { + for (const u of ['ml', 'g', 'capsule']) { + expect(u !== 'drop').toBe(true) + } + }) + + it('edit form initializes correct unit from meta', () => { + const meta = { unit: 'g', dropCount: 80 } + const editUnit = meta.unit || 'drop' + const editProductAmount = editUnit !== 'drop' ? meta.dropCount : null + const editProductUnit = editUnit !== 'drop' ? editUnit : 'ml' + expect(editUnit).toBe('g') + expect(editProductAmount).toBe(80) + expect(editProductUnit).toBe('g') + }) + + it('edit form defaults to drop for oils', () => { + const meta = { unit: 'drop', dropCount: 280 } + const editUnit = meta.unit || 'drop' + expect(editUnit).toBe('drop') + }) + + it('edit form defaults to drop when unit is undefined', () => { + const meta = { dropCount: 280 } + const editUnit = meta.unit || 'drop' + expect(editUnit).toBe('drop') + }) + + it('save uses product amount and unit for non-drop', () => { + const editUnit = 'ml' + const editProductAmount = 200 + const editProductUnit = 'ml' + const dropCount = 280 // from standard volume selector + const finalDropCount = editUnit !== 'drop' ? editProductAmount : dropCount + const finalUnit = editUnit !== 'drop' ? editProductUnit : null + expect(finalDropCount).toBe(200) + expect(finalUnit).toBe('ml') + }) + + it('save uses standard drop count for oils', () => { + const editUnit = 'drop' + const editProductAmount = null + const dropCount = 280 + const finalDropCount = editUnit !== 'drop' ? editProductAmount : dropCount + const finalUnit = editUnit !== 'drop' ? 'ml' : null + expect(finalDropCount).toBe(280) + expect(finalUnit).toBeNull() + }) + + it('label adapts: 精油名称 for oils, 产品名称 for products', () => { + const labelForDrop = 'drop' === 'drop' ? '精油名称' : '产品名称' + const labelForMl = 'ml' === 'drop' ? '精油名称' : '产品名称' + expect(labelForDrop).toBe('精油名称') + expect(labelForMl).toBe('产品名称') + }) +})