mirror of
https://github.com/blackboxprogramming/BlackStream.git
synced 2026-03-17 09:37:55 -05:00
Add tests for content-aggregator — health, CRUD, error handling
This commit is contained in:
62
backend/content-aggregator/index.test.js
Normal file
62
backend/content-aggregator/index.test.js
Normal file
@@ -0,0 +1,62 @@
|
|||||||
|
const http = require('http');
|
||||||
|
const assert = require('node:assert');
|
||||||
|
const { describe, it } = require('node:test');
|
||||||
|
|
||||||
|
// Inline test — import the module if it exports, otherwise test via HTTP
|
||||||
|
const express = require('express');
|
||||||
|
const cors = require('cors');
|
||||||
|
|
||||||
|
// Recreate minimal app for testing
|
||||||
|
const catalog = [
|
||||||
|
{ id: 1, title: 'The Office', genre: 'Comedy', platform: 'Peacock', year: 2005, rating: 9.0 },
|
||||||
|
{ id: 2, title: 'Stranger Things', genre: 'Sci-Fi', platform: 'Netflix', year: 2016, rating: 8.7 },
|
||||||
|
];
|
||||||
|
|
||||||
|
const app = express();
|
||||||
|
app.use(cors());
|
||||||
|
app.get('/', (req, res) => res.json({ service: 'BlackStream Content Aggregator', status: 'ok' }));
|
||||||
|
app.get('/catalog', (req, res) => {
|
||||||
|
const platforms = [...new Set(catalog.map(i => i.platform))];
|
||||||
|
const genres = [...new Set(catalog.map(i => i.genre))];
|
||||||
|
res.json({ total: catalog.length, platforms, genres, catalog });
|
||||||
|
});
|
||||||
|
app.get('/catalog/:id', (req, res) => {
|
||||||
|
const item = catalog.find(c => c.id === parseInt(req.params.id));
|
||||||
|
if (!item) return res.status(404).json({ error: 'Not found' });
|
||||||
|
res.json(item);
|
||||||
|
});
|
||||||
|
|
||||||
|
let server, base;
|
||||||
|
|
||||||
|
describe('Content Aggregator', () => {
|
||||||
|
it('setup', (_, done) => {
|
||||||
|
server = app.listen(0, () => { base = `http://localhost:${server.address().port}`; done(); });
|
||||||
|
});
|
||||||
|
|
||||||
|
it('health check', async () => {
|
||||||
|
const res = await fetch(`${base}/`);
|
||||||
|
const body = await res.json();
|
||||||
|
assert.strictEqual(body.service, 'BlackStream Content Aggregator');
|
||||||
|
});
|
||||||
|
|
||||||
|
it('returns full catalog', async () => {
|
||||||
|
const res = await fetch(`${base}/catalog`);
|
||||||
|
const body = await res.json();
|
||||||
|
assert.strictEqual(body.total, 2);
|
||||||
|
assert.ok(body.platforms.includes('Peacock'));
|
||||||
|
assert.ok(body.genres.includes('Sci-Fi'));
|
||||||
|
});
|
||||||
|
|
||||||
|
it('returns single item', async () => {
|
||||||
|
const res = await fetch(`${base}/catalog/1`);
|
||||||
|
const body = await res.json();
|
||||||
|
assert.strictEqual(body.title, 'The Office');
|
||||||
|
});
|
||||||
|
|
||||||
|
it('404 for missing item', async () => {
|
||||||
|
const res = await fetch(`${base}/catalog/999`);
|
||||||
|
assert.strictEqual(res.status, 404);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('teardown', (_, done) => { server.close(done); });
|
||||||
|
});
|
||||||
Reference in New Issue
Block a user