← back to Sample Followup Sweep

test/george-transport.test.js

43 lines

'use strict';

const assert = require('node:assert/strict');
const { EventEmitter } = require('node:events');
const { compose } = require('../lib/compose');
const { georgeRequest, createGmailDraftArtifact } = require('../lib/george-transport');

const composed = compose({
  name: 'Test Vendor', account_number: '123', sample_email: 'samples@vendor.com',
  ship_to: { name: 'Designer Wallcoverings', line1: '15442 Ventura Blvd. #102', city_state_zip: 'Sherman Oaks, CA 91403', phone: '1-888-373-4564' },
}, [{ sku: 'DW-1', requested: '08/01/2026', mfr: 'ABC' }]);
const valid = { account: 'info', to: composed.to, subject: composed.subject, body: composed.html };
const invalid = { ...valid, body: valid.body.replace(/<a href="mailto:info@designerwallcoverings\.com\?subject=Unsubscribe[\s\S]*?<\/a>/, '<a href="https://invalid.example/unsubscribe">unsubscribe</a>') };

let requests = 0;
const requestImpl = (_options, callback) => {
  requests += 1;
  const req = new EventEmitter();
  req.write = () => {};
  req.end = () => {
    const response = new EventEmitter();
    response.statusCode = 200;
    callback(response);
    response.emit('data', Buffer.from('{"success":true}'));
    response.emit('end');
  };
  return req;
};

(async () => {
  for (const path of ['/api/send', '/api/drafts']) {
    await assert.rejects(Promise.resolve().then(() => georgeRequest({ path, payload: invalid, requestImpl })), { code: 'PRE_SEND_COMPLIANCE_BLOCKED' });
  }
  assert.equal(requests, 0, 'blocked payloads must make zero requests');
  assert.throws(() => createGmailDraftArtifact(invalid), { code: 'PRE_SEND_COMPLIANCE_BLOCKED' });
  assert.equal(createGmailDraftArtifact(valid), valid);

  const result = await georgeRequest({ path: '/api/drafts', payload: valid, requestImpl });
  assert.equal(result.statusCode, 200);
  assert.equal(requests, 1, 'compliant payload should reach the injected transport once');
  console.log('george transport fail-closed boundary: PASS');
})().catch((error) => { console.error(error); process.exitCode = 1; });