Files
SlabUploader/frontend/src/create/review/createDescGate.test.ts
T

75 lines
2.1 KiB
TypeScript

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