feat: reconcile application vertical slices

Backfill the completed acquisitions, sales, dashboard, pricing, search, public detail, worker, migration, contracts, validation, tests, and implementation-status changes into one verified application slice.
This commit is contained in:
2026-09-09 22:12:53 -04:00
parent b9ff7445a6
commit b8f089a5d9
78 changed files with 4561 additions and 2057 deletions
+76 -47
View File
@@ -1,29 +1,29 @@
import assert from 'node:assert/strict';
import test from 'node:test';
import assert from "node:assert/strict";
import test from "node:test";
import { createSaleService } from '../../src/modules/sales/services/sale-service.js';
import { createSaleService } from "../../src/modules/sales/services/sale-service.js";
function validInput(overrides = {}) {
return {
sellerId: 'seller-1',
inventoryItemId: 'inventory-1',
saleDate: '2026-09-09',
sellerId: "seller-1",
inventoryItemId: "inventory-1",
saleDate: "2026-09-09",
soldPriceMinor: 2499,
costBasisMinor: 1200,
...overrides,
};
}
test('creates a sale through the repository with validated money values', async () => {
test("creates a sale through the repository with validated money values", async () => {
let received;
const service = createSaleService({
saleRepository: {
async createForInventoryItem(input) {
received = input;
return {
status: 'CREATED',
status: "CREATED",
sale: {
id: 'sale-1',
id: "sale-1",
soldPriceMinor: 2499,
platformFeesMinor: 100,
paymentProcessingFeesMinor: 0,
@@ -38,9 +38,9 @@ test('creates a sale through the repository with validated money values', async
});
assert.deepEqual(await service.create(validInput()), {
status: 'CREATED',
status: "CREATED",
sale: {
id: 'sale-1',
id: "sale-1",
soldPriceMinor: 2499,
platformFeesMinor: 100,
paymentProcessingFeesMinor: 0,
@@ -52,85 +52,105 @@ test('creates a sale through the repository with validated money values', async
netProceedsMinor: 2399,
profitMinor: 1199,
});
assert.equal(received.sale.sellerId, 'seller-1');
assert.equal(received.sale.sellerId, "seller-1");
assert.equal(received.sale.soldPriceMinor, 2499);
assert.equal(received.costBasisMinor, 1200);
});
test('lists seller sales with derived net proceeds and profit', async () => {
test("lists seller sales with derived net proceeds and profit", async () => {
const service = createSaleService({
saleRepository: {
async listBySellerId(sellerId) {
assert.equal(sellerId, 'seller-1');
return [{
sale: { soldPriceMinor: 3000, shippingCostMinor: 200 },
saleItem: { costBasisMinor: 1500 },
inventoryItem: { id: 'inventory-1', status: 'SOLD' },
}];
assert.equal(sellerId, "seller-1");
return [
{
sale: { soldPriceMinor: 3000, shippingCostMinor: 200 },
saleItem: { costBasisMinor: 1500 },
inventoryItem: { id: "inventory-1", status: "SOLD" },
},
];
},
},
});
const [sale] = await service.list({ sellerId: 'seller-1' });
const [sale] = await service.list({ sellerId: "seller-1" });
assert.equal(sale.netProceedsMinor, 2800);
assert.equal(sale.profitMinor, 1300);
});
test('voids an owned sale with a required reason', async () => {
test("voids an owned sale with a required reason", async () => {
let received;
const service = createSaleService({
saleRepository: {
async voidForSeller(input) {
received = input;
return {
status: 'VOIDED',
sale: { id: 'sale-1', soldPriceMinor: 3000 },
status: "VOIDED",
sale: { id: "sale-1", soldPriceMinor: 3000 },
saleItem: { costBasisMinor: 1500 },
inventoryItem: { id: 'inventory-1', status: 'ACTIVE' },
inventoryItem: { id: "inventory-1", status: "ACTIVE" },
};
},
},
});
const result = await service.void({
saleId: 'sale-1',
sellerId: 'seller-1',
actorUserId: 'user-1',
reason: ' Duplicate sale ',
saleId: "sale-1",
sellerId: "seller-1",
actorUserId: "user-1",
reason: " Duplicate sale ",
});
assert.equal(received.reason, 'Duplicate sale');
assert.equal(result.inventoryItem.status, 'ACTIVE');
assert.equal(received.reason, "Duplicate sale");
assert.equal(result.inventoryItem.status, "ACTIVE");
await assert.rejects(
() => service.void({ saleId: 'sale-1', sellerId: 'seller-1', actorUserId: 'user-1', reason: 'x' }),
(error) => error.code === 'SALE_VOID_REASON_REQUIRED' && error.statusCode === 400,
() =>
service.void({
saleId: "sale-1",
sellerId: "seller-1",
actorUserId: "user-1",
reason: "x",
}),
(error) =>
error.code === "SALE_VOID_REASON_REQUIRED" && error.statusCode === 400,
);
});
test('creates one sale containing multiple inventory items', async () => {
test("creates one sale containing multiple inventory items", async () => {
let received;
const service = createSaleService({
saleRepository: {
async createForInventoryItems(input) {
received = input;
return {
status: 'CREATED',
sale: { id: 'sale-2', soldPriceMinor: 3000 },
status: "CREATED",
sale: { id: "sale-2", soldPriceMinor: 3000 },
saleItems: input.items,
saleItem: input.items[0],
inventoryItems: input.items.map(({ inventoryItemId }) => ({ id: inventoryItemId, status: 'SOLD' })),
inventoryItem: { id: input.items[0].inventoryItemId, status: 'SOLD' },
inventoryItems: input.items.map(({ inventoryItemId }) => ({
id: inventoryItemId,
status: "SOLD",
})),
inventoryItem: { id: input.items[0].inventoryItemId, status: "SOLD" },
};
},
},
});
const result = await service.create({
sellerId: 'seller-1',
saleDate: '2026-09-09',
sellerId: "seller-1",
saleDate: "2026-09-09",
items: [
{ inventoryItemId: 'inventory-1', soldPriceMinor: 1200, costBasisMinor: 500 },
{ inventoryItemId: 'inventory-2', soldPriceMinor: 1800, costBasisMinor: 700 },
{
inventoryItemId: "inventory-1",
soldPriceMinor: 1200,
costBasisMinor: 500,
},
{
inventoryItemId: "inventory-2",
soldPriceMinor: 1800,
costBasisMinor: 700,
},
],
});
@@ -139,18 +159,27 @@ test('creates one sale containing multiple inventory items', async () => {
assert.equal(result.profitMinor, 1800);
});
test('maps missing and already-sold inventory to application errors', async () => {
test("maps missing and already-sold inventory to application errors", async () => {
for (const result of [
{ status: 'NOT_FOUND', code: 'INVENTORY_NOT_FOUND', statusCode: 404 },
{ status: 'NOT_ACTIVE', code: 'INVENTORY_NOT_AVAILABLE_FOR_SALE', statusCode: 409 },
{ status: "NOT_FOUND", code: "INVENTORY_NOT_FOUND", statusCode: 404 },
{
status: "NOT_ACTIVE",
code: "INVENTORY_NOT_AVAILABLE_FOR_SALE",
statusCode: 409,
},
]) {
const service = createSaleService({
saleRepository: { async createForInventoryItem() { return result; } },
saleRepository: {
async createForInventoryItem() {
return result;
},
},
});
await assert.rejects(
() => service.create(validInput()),
(error) => error.code === result.code && error.statusCode === result.statusCode,
(error) =>
error.code === result.code && error.statusCode === result.statusCode,
);
}
});
});