← back to All Designerwallcoverings

test/vendor-pairs.test.js

41 lines

'use strict';

const test = require('node:test');
const assert = require('node:assert/strict');
const { hostSlugify, buildVendorPairSeeds, summarizePairs } = require('../lib/vendor-pairs');
const { mergeSeeds } = require('../scripts/crawl-microsites');

test('hostname slug keeps words readable and stable', () => {
  assert.equal(hostSlugify('Farrow & Ball'), 'farrow-and-ball');
  assert.equal(hostSlugify('Coordonn\u00e9 Europe'), 'coordonne-europe');
});

test('hostname slug always leaves room for the internal suffix', () => {
  const slug = hostSlugify('Lincrusta Embossed Paintable Dados Walls Frieze Borders');
  assert.ok(`${slug}-internal`.length <= 63);
  assert.equal(slug.length, 54);
});

test('every unified vendor expands to public and internal records', () => {
  const rows = buildVendorPairSeeds([{ name: 'Astek', active_count: 12, images: ['hero.jpg'], created_at: '2026-01-02T03:04:00Z' }]);
  assert.deepEqual(rows.map((r) => r.slug), ['astek', 'astek-internal']);
  assert.deepEqual(rows.map((r) => r.variant), ['public', 'internal']);
  assert.ok(rows.every((r) => r.source === 'dw_unified' && r.pairSlug === 'astek'));
  assert.ok(rows.every((r) => r.created_at === '2026-01-02T03:04:00Z'));
});

test('pair coverage only counts a vendor complete when both variants are up', () => {
  assert.deepEqual(summarizePairs([
    { pairSlug: 'astek', variant: 'public', up: true },
    { pairSlug: 'astek', variant: 'internal', up: true },
    { pairSlug: 'arte', variant: 'public', up: true },
    { pairSlug: 'arte', variant: 'internal', up: false },
  ]), { vendors: 2, complete: 1, public_up: 2, internal_up: 1 });
});

test('seed merging never collapses the internal twin onto the public vendor', () => {
  const paired = buildVendorPairSeeds([{ name: 'Astek' }]);
  const merged = mergeSeeds(paired, [{ slug: 'astek', vendor: 'Astek', type: 'vendor' }], [], []);
  assert.deepEqual(merged.filter((r) => r.pairSlug === 'astek').map((r) => r.slug).sort(), ['astek', 'astek-internal']);
});