import assert from "node:assert/strict"; import test from "node:test"; import { buildApp } from "../../src/app/build-app.js"; const saleResult = { sale: { id: "sale-1", sellerId: "seller-1", saleDate: "2026-09-09", soldPriceMinor: 2499, currency: "USD", platformFeesMinor: 0, paymentProcessingFeesMinor: 0, shippingCostMinor: 0, taxesMinor: 0, otherFeesMinor: 0, }, saleItem: { id: "sale-item-1", inventoryItemId: "inventory-1", soldPriceMinor: 2499, costBasisMinor: 1200, }, inventoryItem: { id: "inventory-1", status: "SOLD" }, }; function createTestApp({ authenticateAdmin, authorizeUnsafeRequest } = {}) { return buildApp({ authenticateAdmin, authorizeUnsafeRequest, saleService: { async create(input) { assert.equal(input.sellerId, "seller-1"); return saleResult; }, }, }); } test("creates a sale for the authenticated seller with CSRF protection", async (testContext) => { let csrfChecks = 0; const app = createTestApp({ authenticateAdmin: async () => ({ sellerId: "seller-1" }), authorizeUnsafeRequest: async () => { csrfChecks += 1; }, }); testContext.after(() => app.close()); const response = await app.inject({ method: "POST", url: "/api/v1/admin/sales", headers: { "x-csrf-token": "csrf-token" }, payload: { inventoryItemId: "d2f67d74-9647-48d5-b3a4-74d3b16ea9f8", costBasisMinor: 1200, saleDate: "2026-09-09", soldPriceMinor: 2499, }, }); assert.equal(response.statusCode, 201); assert.equal(response.json().data.inventoryItem.status, "SOLD"); assert.equal(csrfChecks, 1); }); test("rejects invalid sale requests and unauthenticated requests", async (testContext) => { const app = createTestApp({ authenticateAdmin: async () => ({ sellerId: "seller-1" }), }); testContext.after(() => app.close()); const invalidResponse = await app.inject({ method: "POST", url: "/api/v1/admin/sales", payload: { inventoryItemId: "not-a-uuid", costBasisMinor: -1, saleDate: "tomorrow", soldPriceMinor: 0, }, }); assert.equal(invalidResponse.statusCode, 400); assert.equal(invalidResponse.json().error.code, "VALIDATION_ERROR"); const unauthenticatedApp = createTestApp(); testContext.after(() => unauthenticatedApp.close()); const unauthenticatedResponse = await unauthenticatedApp.inject({ method: "POST", url: "/api/v1/admin/sales", payload: {}, }); assert.equal(unauthenticatedResponse.statusCode, 401); assert.equal(unauthenticatedResponse.json().error.code, "UNAUTHORIZED"); }); test("voids a sale with CSRF protection and actor identity", async (testContext) => { let voidInput; const app = buildApp({ authenticateAdmin: async () => ({ userId: "user-1", sellerId: "seller-1" }), authorizeUnsafeRequest: async () => {}, saleService: { async void(input) { voidInput = input; return saleResult; }, }, }); testContext.after(() => app.close()); const response = await app.inject({ method: "POST", url: "/api/v1/admin/sales/sale-1/void", headers: { "x-csrf-token": "csrf-token" }, payload: { reason: "Duplicate entry" }, }); assert.equal(response.statusCode, 200); assert.equal(voidInput.actorUserId, "user-1"); assert.equal(response.json().data.inventoryItem.status, "SOLD"); });