feat: add public inventory catalog boundary
This commit is contained in:
@@ -15,6 +15,7 @@ import {
|
||||
users,
|
||||
} from '../../src/infrastructure/database/schema.js';
|
||||
import { createInventoryImageRepository } from '../../src/modules/inventory/repositories/inventory-image-repository.js';
|
||||
import { createInventoryItemRepository } from '../../src/modules/inventory/repositories/inventory-item-repository.js';
|
||||
import { createListingRepository } from '../../src/modules/listings/repositories/listing-repository.js';
|
||||
|
||||
const connectionString = process.env.TEST_DATABASE_URL;
|
||||
@@ -29,6 +30,7 @@ if (!new URL(connectionString).pathname.endsWith('_test')) {
|
||||
|
||||
const database = createDatabase(connectionString);
|
||||
const listingRepository = createListingRepository(database.db);
|
||||
const inventoryItemRepository = createInventoryItemRepository(database.db);
|
||||
const inventoryImageRepository = createInventoryImageRepository(database.db);
|
||||
|
||||
async function createInventoryFixture() {
|
||||
@@ -168,6 +170,29 @@ test('searches public listings with pagination and hides sold items by default',
|
||||
assert.equal(included.items[0].status, 'CLOSED');
|
||||
});
|
||||
|
||||
test('searches public inventory with product and listing fields', async () => {
|
||||
const { category, condition, inventoryItem, product } = await createInventoryFixture();
|
||||
|
||||
await listingRepository.create({
|
||||
inventoryItemId: inventoryItem.id,
|
||||
productName: product.name,
|
||||
categoryId: category.id,
|
||||
conditionId: condition.id,
|
||||
askingPriceMinor: 2499,
|
||||
status: 'AVAILABLE',
|
||||
});
|
||||
|
||||
const visible = await inventoryItemRepository.searchPublic({ page: 1, limit: 10 });
|
||||
|
||||
assert.equal(visible.total, 1);
|
||||
assert.equal(visible.items[0].productSlug, product.slug);
|
||||
assert.equal(visible.items[0].askingPriceMinor, 2499);
|
||||
assert.equal((await inventoryItemRepository.findPublicById(inventoryItem.id)).id, inventoryItem.id);
|
||||
|
||||
await database.db.update(inventoryItems).set({ status: 'SOLD' }).where(sql`id = ${inventoryItem.id}`);
|
||||
assert.equal(await inventoryItemRepository.findPublicById(inventoryItem.id), null);
|
||||
});
|
||||
|
||||
test('persists image metadata only for the owning seller and counts item images', async () => {
|
||||
const { seller, inventoryItem } = await createInventoryFixture();
|
||||
const image = await inventoryImageRepository.createForSeller({
|
||||
|
||||
Reference in New Issue
Block a user