← back to Harlequin Pilot Publish
03-verify.mjs
52 lines
// FRESH verify each of the 23: Single Roll @ retail AND Sample @ $4.25.
import fs from 'node:fs';
import { getProductVariants } from './lib.mjs';
const pilot = JSON.parse(fs.readFileSync(new URL('./data/pilot-23.json', import.meta.url)));
const located = JSON.parse(fs.readFileSync(new URL('./data/located.json', import.meta.url)));
const byDw = Object.fromEntries(located.map(l => [l.dw_sku, l]));
const rows = [];
let pass = 0, fail = 0;
for (const p of pilot) {
const loc = byDw[p.dw_sku];
const prod = await getProductVariants(loc.productGid);
const vs = prod.variants.edges.map(e => e.node);
const roll = vs.find(v => (v.title || '').toLowerCase() === 'single roll' || (v.sku || '').toUpperCase() === p.dw_sku.toUpperCase());
const sample = vs.find(v => (v.sku || '').toUpperCase() === (p.dw_sku + '-SAMPLE').toUpperCase());
const wantRetail = Number(p.retail).toFixed(2);
const rollOk = !!roll && Number(roll.price).toFixed(2) === wantRetail;
const sampleOk = !!sample && Number(sample.price).toFixed(2) === '4.25';
const verdict = rollOk && sampleOk ? 'PASS' : 'FAIL';
if (verdict === 'PASS') pass++; else fail++;
rows.push({
dw_sku: p.dw_sku, handle: loc.handle,
roll_id: roll?.id?.split('/').pop() || null, roll_price: roll?.price || null, roll_ok: rollOk,
sample_id: sample?.id?.split('/').pop() || null, sample_price: sample?.price || null, sample_ok: sampleOk,
verdict,
});
await new Promise(r => setTimeout(r, 250));
}
fs.writeFileSync(new URL('./data/verify.json', import.meta.url), JSON.stringify(rows, null, 2));
// Print table
console.log('DW SKU'.padEnd(12), 'ROLL id'.padEnd(16), 'ROLL$'.padEnd(9), 'OK', ' SAMPLE id'.padEnd(16), 'SMP$'.padEnd(6), 'OK', ' VERDICT');
for (const r of rows) {
console.log(
r.dw_sku.padEnd(12),
String(r.roll_id).padEnd(16),
String(r.roll_price).padEnd(9),
(r.roll_ok ? 'Y' : 'N'),
String(r.sample_id).padEnd(16),
String(r.sample_price).padEnd(6),
(r.sample_ok ? 'Y' : 'N'),
r.verdict,
);
}
console.log(`\nPASS ${pass}/23 FAIL ${fail}/23`);