| 1234567891011121314151617181920212223242526272829303132333435363738 |
- import assert from 'node:assert/strict';
- import { readFile } from 'node:fs/promises';
- import test from 'node:test';
- import { jdVocScorePayloadSchema } from '../src/modules/listing-ai/schemas.js';
- const fixture = JSON.parse(await readFile(new URL('./fixtures/jd-voc-score-result.json', import.meta.url), 'utf8')) as Record<string, unknown>;
- test('jd-voc payload accepts the versioned six-dimension fixture', () => {
- const result = jdVocScorePayloadSchema.safeParse(fixture);
- assert.equal(result.success, true, result.success ? '' : result.error.message);
- if (result.success) assert.equal(result.data.dimensions.length, 6);
- });
- test('jd-voc payload rejects legacy rubric versions and unknown statuses', () => {
- const wrongVersion = { ...fixture, rubricVersion: 'JD-VOC v0.5-evidence-calibrated' };
- const wrongStatus = {
- ...fixture,
- dimensions: (fixture.dimensions as Array<Record<string, unknown>>).map((item, index) => index === 0 ? { ...item, status: 'unknown' } : item),
- };
- assert.equal(jdVocScorePayloadSchema.safeParse(wrongVersion).success, false);
- assert.equal(jdVocScorePayloadSchema.safeParse(wrongStatus).success, false);
- });
- test('jd-voc payload rejects null dimensions encoded as zero and out-of-range scores', () => {
- const dimensions = fixture.dimensions as Array<Record<string, unknown>>;
- const nullAsScored = { ...fixture, dimensions: dimensions.map((item, index) => index === 3 ? { ...item, score: null, status: 'scored' } : item) };
- const overMax = { ...fixture, dimensions: dimensions.map((item, index) => index === 0 ? { ...item, score: 26 } : item) };
- const badHash = { ...fixture, sourceHash: 'not-a-source-hash' };
- assert.equal(jdVocScorePayloadSchema.safeParse(nullAsScored).success, false);
- assert.equal(jdVocScorePayloadSchema.safeParse(overMax).success, false);
- assert.equal(jdVocScorePayloadSchema.safeParse(badHash).success, false);
- });
- test('jd-voc payload remains strict about the six unique dimension keys', () => {
- const dimensions = fixture.dimensions as Array<Record<string, unknown>>;
- const duplicate = { ...fixture, dimensions: dimensions.map((item, index) => index === 5 ? { ...item, key: 'search' } : item) };
- assert.equal(jdVocScorePayloadSchema.safeParse(duplicate).success, false);
- });
|