mirror of
https://github.com/mauriceboe/TREK.git
synced 2026-10-23 23:46:35 +00:00
60 lines
2.0 KiB
TypeScript
60 lines
2.0 KiB
TypeScript
import { buildApp } from '../../src/bootstrap';
|
|
import type { INestApplication } from '@nestjs/common';
|
|
|
|
import request from 'supertest';
|
|
import { describe, it, expect, beforeAll, afterAll } from 'vitest';
|
|
|
|
/**
|
|
* A book is bigger than a form post (#1973).
|
|
*
|
|
* The API's body ceiling is a hundred kilobytes, which is right for an
|
|
* interface of forms and ids and wrong for a photo book. A Studio document is
|
|
* sent WHOLE on every autosave, on purpose, and a fortnight's journey passes a
|
|
* hundred kilobytes before anybody asks for road geometry: an Iceland book with
|
|
* roads measured 101KB against a 100KB limit.
|
|
*
|
|
* What that produced was not an error anybody could act on. The save failed
|
|
* with a 413, the editor said "not saved", and nothing anywhere said why —
|
|
* which is the same shape of bug as the mood mark that could not be stored, and
|
|
* it deserves the same kind of guard.
|
|
*/
|
|
|
|
describe('the size of a book', () => {
|
|
let app: INestApplication;
|
|
|
|
beforeAll(async () => {
|
|
app = await buildApp();
|
|
await app.init();
|
|
});
|
|
|
|
afterAll(async () => {
|
|
await app?.close();
|
|
});
|
|
|
|
/** A body far past the ordinary ceiling, shaped like a save. */
|
|
const bigBody = () => ({
|
|
title: 'A long journey',
|
|
baseVersion: 1,
|
|
document: { version: 1, title: 'A long journey', spreads: [], filler: 'x'.repeat(400_000) },
|
|
});
|
|
|
|
it('takes a document larger than the API-wide limit rather than refusing it', async () => {
|
|
const res = await request(app.getHttpServer()).put('/api/journeys/1/book').send(bigBody());
|
|
|
|
/*
|
|
* Unauthenticated, so 401 is the expected answer and the point of the test
|
|
* is what it is NOT: a 413 means the body never reached the router, which
|
|
* is exactly the failure being guarded against.
|
|
*/
|
|
expect(res.status).not.toBe(413);
|
|
});
|
|
|
|
it('keeps the tighter limit on every other route', async () => {
|
|
const res = await request(app.getHttpServer())
|
|
.post('/api/journeys')
|
|
.send({ title: 'x'.repeat(400_000) });
|
|
|
|
expect(res.status).toBe(413);
|
|
});
|
|
});
|