← 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']);
});