mirror of
https://github.com/CommunitySolidServer/CommunitySolidServer.git
synced 2024-10-03 14:55:10 +00:00
Merge branch 'main' into versions/next-major
This commit is contained in:
@@ -0,0 +1,40 @@
|
||||
import { RangePreferenceParser } from '../../../../../src/http/input/preferences/RangePreferenceParser';
|
||||
import { BadRequestHttpError } from '../../../../../src/util/errors/BadRequestHttpError';
|
||||
|
||||
describe('A RangePreferenceParser', (): void => {
|
||||
const parser = new RangePreferenceParser();
|
||||
|
||||
it('parses range headers.', async(): Promise<void> => {
|
||||
await expect(parser.handle({ request: { headers: { range: 'bytes=5-10' }}} as any))
|
||||
.resolves.toEqual({ range: { unit: 'bytes', parts: [{ start: 5, end: 10 }]}});
|
||||
|
||||
await expect(parser.handle({ request: { headers: { range: 'bytes=5-' }}} as any))
|
||||
.resolves.toEqual({ range: { unit: 'bytes', parts: [{ start: 5 }]}});
|
||||
|
||||
await expect(parser.handle({ request: { headers: { range: 'bytes=-5' }}} as any))
|
||||
.resolves.toEqual({ range: { unit: 'bytes', parts: [{ start: -5 }]}});
|
||||
|
||||
await expect(parser.handle({ request: { headers: { range: 'bytes=5-10, 11-20, 21-99' }}} as any))
|
||||
.resolves.toEqual({ range: { unit: 'bytes',
|
||||
parts: [{ start: 5, end: 10 }, { start: 11, end: 20 }, { start: 21, end: 99 }]}});
|
||||
});
|
||||
|
||||
it('returns an empty object if there is no header.', async(): Promise<void> => {
|
||||
await expect(parser.handle({ request: { headers: {}}} as any)).resolves.toEqual({});
|
||||
});
|
||||
|
||||
it('rejects invalid range headers.', async(): Promise<void> => {
|
||||
await expect(parser.handle({ request: { headers: { range: '=5-10' }}} as any))
|
||||
.rejects.toThrow(BadRequestHttpError);
|
||||
await expect(parser.handle({ request: { headers: { range: 'bytes' }}} as any))
|
||||
.rejects.toThrow(BadRequestHttpError);
|
||||
await expect(parser.handle({ request: { headers: { range: 'bytes=' }}} as any))
|
||||
.rejects.toThrow(BadRequestHttpError);
|
||||
await expect(parser.handle({ request: { headers: { range: 'bytes=-' }}} as any))
|
||||
.rejects.toThrow(BadRequestHttpError);
|
||||
await expect(parser.handle({ request: { headers: { range: 'bytes=5' }}} as any))
|
||||
.rejects.toThrow(BadRequestHttpError);
|
||||
await expect(parser.handle({ request: { headers: { range: 'bytes=5-10, 99' }}} as any))
|
||||
.rejects.toThrow(BadRequestHttpError);
|
||||
});
|
||||
});
|
||||
@@ -0,0 +1,54 @@
|
||||
import { PreferenceParser } from '../../../../../src/http/input/preferences/PreferenceParser';
|
||||
import { UnionPreferenceParser } from '../../../../../src/http/input/preferences/UnionPreferenceParser';
|
||||
import { InternalServerError } from '../../../../../src/util/errors/InternalServerError';
|
||||
|
||||
describe('A UnionPreferenceParser', (): void => {
|
||||
let parsers: jest.Mocked<PreferenceParser>[];
|
||||
let parser: UnionPreferenceParser;
|
||||
|
||||
beforeEach(async(): Promise<void> => {
|
||||
parsers = [
|
||||
{
|
||||
canHandle: jest.fn(),
|
||||
handle: jest.fn().mockResolvedValue({}),
|
||||
} satisfies Partial<PreferenceParser> as any,
|
||||
{
|
||||
canHandle: jest.fn(),
|
||||
handle: jest.fn().mockResolvedValue({}),
|
||||
} satisfies Partial<PreferenceParser> as any,
|
||||
];
|
||||
|
||||
parser = new UnionPreferenceParser(parsers);
|
||||
});
|
||||
|
||||
it('combines the outputs.', async(): Promise<void> => {
|
||||
parsers[0].handle.mockResolvedValue({
|
||||
type: { 'text/turtle': 1 },
|
||||
range: { unit: 'bytes', parts: [{ start: 3, end: 5 }]},
|
||||
});
|
||||
parsers[1].handle.mockResolvedValue({
|
||||
type: { 'text/plain': 0.9 },
|
||||
language: { nl: 0.8 },
|
||||
});
|
||||
|
||||
await expect(parser.handle({} as any)).resolves.toEqual({
|
||||
type: { 'text/turtle': 1, 'text/plain': 0.9 },
|
||||
language: { nl: 0.8 },
|
||||
range: { unit: 'bytes', parts: [{ start: 3, end: 5 }]},
|
||||
});
|
||||
});
|
||||
|
||||
it('throws an error if multiple parsers return a range.', async(): Promise<void> => {
|
||||
parsers[0].handle.mockResolvedValue({
|
||||
type: { 'text/turtle': 1 },
|
||||
range: { unit: 'bytes', parts: [{ start: 3, end: 5 }]},
|
||||
});
|
||||
parsers[1].handle.mockResolvedValue({
|
||||
type: { 'text/plain': 0.9 },
|
||||
language: { nl: 0.8 },
|
||||
range: { unit: 'bytes', parts: [{ start: 3, end: 5 }]},
|
||||
});
|
||||
|
||||
await expect(parser.handle({} as any)).rejects.toThrow(InternalServerError);
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user