step 9.3: done
This commit is contained in:
@@ -0,0 +1,53 @@
|
||||
const test = require('node:test');
|
||||
const assert = require('node:assert/strict');
|
||||
const { setup, teardown, cleanup } = require('../helpers');
|
||||
|
||||
test('GET /nonexistent → serves 404.html for HTML requests', async () => {
|
||||
const base = await setup();
|
||||
try {
|
||||
const res = await fetch(base + '/nonexistent-page', {
|
||||
headers: { Accept: 'text/html' },
|
||||
});
|
||||
assert.equal(res.status, 404);
|
||||
const html = await res.text();
|
||||
assert.ok(html.includes('404'), '404 page should contain "404"');
|
||||
assert.ok(html.includes('Page Not Found'), '404 page should have title');
|
||||
assert.ok(html.includes('Emberfall'), '404 page should be branded');
|
||||
} finally {
|
||||
await teardown();
|
||||
cleanup();
|
||||
}
|
||||
});
|
||||
|
||||
test('GET /nonexistent → JSON error for API requests', async () => {
|
||||
const base = await setup();
|
||||
try {
|
||||
const res = await fetch(base + '/api/nonexistent', {
|
||||
headers: { Accept: 'application/json' },
|
||||
});
|
||||
assert.equal(res.status, 404);
|
||||
const data = await res.json();
|
||||
assert.equal(data.ok, false);
|
||||
assert.equal(data.error.code, 'NOT_FOUND');
|
||||
assert.ok(typeof data.error.message === 'string');
|
||||
} finally {
|
||||
await teardown();
|
||||
cleanup();
|
||||
}
|
||||
});
|
||||
|
||||
test('GET /api/heroes/nonexistent → 404.html (public route, unknown hero)', async () => {
|
||||
const base = await setup();
|
||||
try {
|
||||
const res = await fetch(base + '/api/heroes/doesnotexist', {
|
||||
headers: { Accept: 'text/html' },
|
||||
});
|
||||
// Public route exists, so it returns JSON 404 (not the page 404)
|
||||
assert.equal(res.status, 404);
|
||||
const data = await res.json();
|
||||
assert.equal(data.ok, false);
|
||||
} finally {
|
||||
await teardown();
|
||||
cleanup();
|
||||
}
|
||||
});
|
||||
Reference in New Issue
Block a user