import assert from 'node:assert/strict'; import test from 'node:test'; import { buildApp } from '../../src/app/build-app.js'; import { createAdminExportService } from '../../src/modules/exports/services/admin-export-service.js'; test('downloads seller-scoped inventory JSON for an authenticated admin', async (testContext) => { const app = buildApp({ authenticateAdmin: async () => ({ sellerId: 'seller-1' }), adminExportService: createAdminExportService({ inventoryItemService: { async listBySellerId(sellerId) { assert.equal(sellerId, 'seller-1'); return [{ id: 'item-1', productId: 'product-1', conditionId: 'condition-1', status: 'ACTIVE', notes: 'Private note', }]; }, }, }), }); testContext.after(() => app.close()); const response = await app.inject({ method: 'GET', url: '/api/v1/admin/exports/inventory.json', }); assert.equal(response.statusCode, 200); assert.equal(response.headers['content-type'], 'application/json; charset=utf-8'); assert.equal(response.headers['content-disposition'], 'attachment; filename="inventory.json"'); assert.deepEqual(JSON.parse(response.body), [{ id: 'item-1', productId: 'product-1', conditionId: 'condition-1', status: 'ACTIVE', notes: 'Private note', }]); }); test('requires authentication for inventory JSON exports', async (testContext) => { const app = buildApp({ adminExportService: createAdminExportService({ inventoryItemService: { async listBySellerId() { return []; } }, }), }); testContext.after(() => app.close()); const response = await app.inject({ method: 'GET', url: '/api/v1/admin/exports/inventory.json', }); assert.equal(response.statusCode, 401); assert.equal(response.json().error.code, 'UNAUTHORIZED'); }); test('downloads seller-scoped inventory CSV for an authenticated admin', async (testContext) => { const app = buildApp({ authenticateAdmin: async () => ({ sellerId: 'seller-1' }), adminExportService: { async inventoryCsv({ sellerId }) { assert.equal(sellerId, 'seller-1'); return 'id,status\r\n"item-1","ACTIVE"'; }, }, }); testContext.after(() => app.close()); const response = await app.inject({ method: 'GET', url: '/api/v1/admin/exports/inventory.csv', }); assert.equal(response.statusCode, 200); assert.equal(response.headers['content-type'], 'text/csv; charset=utf-8'); assert.equal(response.headers['content-disposition'], 'attachment; filename="inventory.csv"'); assert.equal(response.body, 'id,status\r\n"item-1","ACTIVE"'); });