import assert from 'node:assert/strict'; import { test } from 'node:test'; import { canCreateDesc, missingCreateDesc, missingCreateDescLabels, } from './createDescGate'; const full = { contentLlmEnabled: true, title: 'Figured Walnut Live Edge Slab', shortDescription: 'Figured Walnut Live Edge Slab, 9ft …', speciesId: 11, woodCategoryIds: [21], primaryCatId: 21, edgeTermId: '321', figureTermIds: [328], gradeTermId: 342, moistureTermId: '326', }; test('Create desc gate: full set passes; does not require description', () => { assert.equal(canCreateDesc(full), true); assert.deepEqual(missingCreateDesc(full), []); }); test('Create desc gate: empty price still passes when other fields full', () => { // Price is publish-only; Create desc must not gate on it. assert.equal(canCreateDesc(full), true); assert.deepEqual(missingCreateDesc(full), []); }); test('Create desc gate: lists each missing field; no description or price key', () => { const miss = missingCreateDesc({ ...full, contentLlmEnabled: false, title: '', shortDescription: ' ', speciesId: null, woodCategoryIds: [], primaryCatId: '', edgeTermId: '', figureTermIds: [], gradeTermId: '', moistureTermId: '', }); assert.deepEqual(miss, [ 'content_llm', 'title', 'short_description', 'species', 'wood_categories', 'primary', 'edge', 'figure', 'grade', 'moisture', ]); assert.equal(miss.includes('description'), false); assert.equal(miss.includes('price'), false); const labels = missingCreateDescLabels({ ...full, figureTermIds: [], }); assert.ok(labels.includes('≥1 figure')); assert.equal(labels.includes('price'), false); }); test('Create desc gate: recomputes on field change (reactive-ready)', () => { assert.equal(canCreateDesc({ ...full, figureTermIds: [] }), false); assert.equal(canCreateDesc({ ...full, figureTermIds: [1] }), true); assert.equal(canCreateDesc({ ...full, moistureTermId: '' }), false); assert.equal(canCreateDesc({ ...full, moistureTermId: 326 }), true); });