Files
site-builder/craft/src/utils/site-limits.test.ts
T
shadowdaoandClaude Sonnet 5.5 9d425afa29 feat(editor): adopt backend final-fix contract (client_id, warnings, limits, head parity)
client_id per editor load (memory only), already_saved, save warnings via notices,
upload_max_bytes enforced client-side with the server error text on 413,
project_max_bytes warning, headCode in the Preview font scan, pinned backend heads.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-07 13:49:53 -07:00

37 lines
1.8 KiB
TypeScript

import { describe, test, expect, beforeEach } from 'vitest';
import { setSiteLimits, getSiteLimits, uploadSizeError, uploadFailureText, formatMegabytes } from './site-limits';
describe('site limits (server-advertised, in memory)', () => {
beforeEach(() => setSiteLimits(undefined));
test('unknown limits (older backend) never refuse a file', () => {
expect(getSiteLimits()).toEqual({ uploadMaxBytes: undefined, projectMaxBytes: undefined });
expect(uploadSizeError({ size: 10 ** 12, name: 'a.mp4' })).toBeNull();
});
test('adopts limits.upload_max_bytes / project_max_bytes from load', () => {
setSiteLimits({ upload_max_bytes: 67108864, project_max_bytes: 20971520 });
expect(getSiteLimits()).toEqual({ uploadMaxBytes: 67108864, projectMaxBytes: 20971520 });
});
test('ignores malformed values', () => {
setSiteLimits({ upload_max_bytes: '64', project_max_bytes: -1 });
expect(getSiteLimits()).toEqual({ uploadMaxBytes: undefined, projectMaxBytes: undefined });
});
test('a file over the limit is refused with a readable message; at the limit is allowed', () => {
setSiteLimits({ upload_max_bytes: 64 * 1048576 });
expect(uploadSizeError({ size: 64 * 1048576, name: 'ok.png' })).toBeNull();
const msg = uploadSizeError({ size: 64 * 1048576 + 1, name: 'big.mp4' });
expect(msg).toContain('big.mp4');
expect(msg).toContain('64 MB');
});
test('uploadFailureText prefers the server error text over the status', () => {
expect(uploadFailureText({ success: false, error: 'That file is too large. The site builder accepts files up to 64 MB.' }, 413))
.toBe('That file is too large. The site builder accepts files up to 64 MB.');
expect(uploadFailureText(null, 413)).toBe('Upload failed: 413');
expect(formatMegabytes(1572864)).toBe('1.5 MB');
});
});