Files
pokemon-inventory/apps/web/tests/catalog-service.test.js
T
2026-09-09 23:48:34 -04:00

71 lines
2.5 KiB
JavaScript

import assert from 'node:assert/strict';
import test from 'node:test';
import { getPublicListing } from '../src/services/catalog-service.js';
test('fetches a public listing detail through the API service', async () => {
const originalFetch = globalThis.fetch;
globalThis.fetch = async (url) => {
assert.equal(url, '/api/v1/public/listings/listing-1');
return { ok: true, async json() { return { data: { id: 'listing-1' } }; } };
};
try {
assert.deepEqual(await getPublicListing('listing-1'), { id: 'listing-1' });
} finally {
globalThis.fetch = originalFetch;
}
});
test('encodes catalog search pagination in the API request', async () => {
const originalFetch = globalThis.fetch;
globalThis.fetch = async (url) => {
assert.equal(url, '/api/v1/public/search?query=card+set&page=3&limit=20');
return { ok: true, async json() { return { data: { items: [], pagination: {} } }; } };
};
try {
const { searchCatalog } = await import('../src/services/catalog-service.js');
await searchCatalog({ query: 'card set', page: 3 });
} finally {
globalThis.fetch = originalFetch;
}
});
test('fetches a public product using its stable slug URL', async () => {
const originalFetch = globalThis.fetch;
globalThis.fetch = async (url) => {
assert.equal(url, '/api/v1/public/products/pikachu-plush');
return { ok: true, async json() { return { data: { slug: 'pikachu-plush' } }; } };
};
try {
const { getPublicProduct } = await import('../src/services/catalog-service.js');
assert.deepEqual(await getPublicProduct('pikachu-plush'), { slug: 'pikachu-plush' });
} finally {
globalThis.fetch = originalFetch;
}
});
test('archives selected admin inventory items through the bulk API', async () => {
const originalFetch = globalThis.fetch;
globalThis.fetch = async (url, options) => {
assert.equal(url, '/api/v1/admin/bulk');
assert.equal(options.method, 'POST');
assert.equal(options.headers['x-csrf-token'], 'csrf-token');
assert.deepEqual(JSON.parse(options.body), {
action: 'ARCHIVE',
inventoryItemIds: ['item-1'],
});
return { ok: true, async json() { return { data: [{ id: 'item-1', status: 'ARCHIVED' }] }; } };
};
try {
const { archiveAdminInventory } = await import('../src/services/admin-catalog-service.js');
assert.deepEqual(await archiveAdminInventory(['item-1'], 'csrf-token'), [
{ id: 'item-1', status: 'ARCHIVED' },
]);
} finally {
globalThis.fetch = originalFetch;
}
});