import assert from 'node:assert/strict'; import { readFileSync } from 'node:fs'; import { dirname, join } from 'node:path'; import { fileURLToPath } from 'node:url'; import { test } from 'node:test'; const dir = dirname(fileURLToPath(import.meta.url)); const publishSrc = readFileSync(join(dir, 'Publish.svelte'), 'utf8'); const previewSrc = readFileSync(join(dir, 'PublishPreview.svelte'), 'utf8'); const modelSrc = readFileSync(join(dir, 'publishPreviewModel.ts'), 'utf8'); test('Publish uses dedicated PublishPreview before Woo POST', () => { assert.match(publishSrc, /import PublishPreview from '\.\/PublishPreview\.svelte'/); assert.match(publishSrc, /buildPublishPreviewModel/); assert.match(publishSrc, /data-testid="publish-preview"|PublishPreview/); // Idle confirm still posts only via doPublish / publish-btn assert.match(publishSrc, /data-testid="publish-btn"/); assert.match(publishSrc, /data-testid="back-review"/); assert.match(publishSrc, /publishSlab\(slabId\)/); }); test('PublishPreview layout: thumbs → head → facts → short → long', () => { assert.match(previewSrc, /data-testid="publish-preview"/); assert.match(previewSrc, /data-testid="preview-thumbs"/); assert.match(previewSrc, /data-testid="preview-head"/); assert.match(previewSrc, /data-testid="preview-sku"/); assert.match(previewSrc, /data-testid="preview-title"/); assert.match(previewSrc, /data-testid="preview-price"/); assert.match(previewSrc, /data-testid="preview-facts"/); assert.match(previewSrc, /data-testid="preview-short"/); assert.match(previewSrc, /data-testid="preview-long"/); // Plain-text long description (pre-wrap), not HTML render assert.match(previewSrc, /white-space:\s*pre-wrap/); assert.match(previewSrc, /
 {
  assert.match(modelSrc, /species_id/);
  assert.match(modelSrc, /wood_category_ids/);
  assert.match(modelSrc, /edge_type_term_id/);
  assert.match(modelSrc, /figure_term_ids/);
  assert.match(modelSrc, /grade_term_id/);
  assert.match(modelSrc, /moisture_term_id/);
  assert.match(modelSrc, /feat_tag_ids/);
  assert.match(modelSrc, /width_min_in/);
  assert.match(modelSrc, /bdft/);
  assert.match(modelSrc, /decodeName/);
  // No invented brand/voice fields
  assert.equal(modelSrc.includes('brand_voice'), false);
});