← 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`);