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