← back to CelebritySignatures

test/printify-pod.test.mjs

34 lines

import test from 'node:test';
import assert from 'node:assert/strict';
import { buildPayload } from '../scripts/submit-pod-draft-printify.mjs';

const template = { garments: [{ id: 'classic-tee', printify: {
  blueprintId: 9, printProviderId: 5,
  printPosition: { placeholder: 'front', scale: 0.25, x: 0.32, y: 0.3 },
  variants: { 'white/2XL': 17887 },
} }] };
const draft = { orderId: 5001, garment: 'classic-tee', color: 'white', size: '2XL',
  signature_name: 'Thomas Jefferson', design_image_url: 'https://example.com/signature.png',
  recipient_email: 'proof@example.com', recipient: { name: 'Test Buyer', address1: '1 Main St',
    city: 'Los Angeles', state_code: 'CA', country_code: 'US', zip: '90001' } };

test('builds a dynamic Printify left-chest order payload', () => {
  const payload = buildPayload(template, draft);
  assert.equal(payload.line_items[0].blueprint_id, 9);
  assert.equal(payload.line_items[0].print_provider_id, 5);
  assert.equal(payload.line_items[0].variant_id, 17887);
  assert.deepEqual(payload.line_items[0].print_areas.front, [{
    src: draft.design_image_url, scale: 0.25, x: 0.32, y: 0.3, angle: 0,
  }]);
  assert.equal(payload.send_shipping_notification, false);
});

test('fails loud on unmapped variants', () => {
  assert.throws(() => buildPayload(template, { ...draft, size: 'XL' }), /not mapped/);
});

test('fails loud without a design or complete shipping address', () => {
  assert.throws(() => buildPayload(template, { ...draft, design_image_url: null }), /no design_image_url/);
  assert.throws(() => buildPayload(template, { ...draft, recipient: { ...draft.recipient, zip: '' } }), /missing shipping fields zip/);
});