import assert from 'node:assert/strict'; import test from 'node:test'; import { createImageDerivativeProcessor } from '../../src/infrastructure/images/image-derivative-processor.js'; test('renders and stores thumbnail, medium, and large derivatives in order', async () => { const renderedWidths = []; const stored = []; const processor = createImageDerivativeProcessor({ imageStorage: { async put(value) { stored.push(value); }, }, async renderer({ data, maxWidth }) { renderedWidths.push(maxWidth); return Buffer.concat([data, Buffer.from(`-${maxWidth}`)]); }, }); const results = await processor.process({ sourceKey: 'inventory/item/front.jpg', data: Buffer.from('source'), }); assert.deepEqual(renderedWidths, [320, 1280, 2400]); assert.deepEqual(results.map(({ name, key }) => ({ name, key })), [ { name: 'thumbnail', key: 'inventory/item/front-thumbnail.webp' }, { name: 'medium', key: 'inventory/item/front-medium.webp' }, { name: 'large', key: 'inventory/item/front-large.webp' }, ]); assert.equal(stored.length, 3); assert.equal(stored[1].data.toString(), 'source-1280'); }); test('requires a renderer implementation', () => { assert.throws( () => createImageDerivativeProcessor({ imageStorage: {} }), /renderer is required/, ); });