mirror of
https://github.com/CommunitySolidServer/CommunitySolidServer.git
synced 2024-10-03 14:55:10 +00:00
feat: Create a RoutingResourceStore that takes routing rules
This commit is contained in:
32
test/unit/storage/routing/RegexRouterRule.test.ts
Normal file
32
test/unit/storage/routing/RegexRouterRule.test.ts
Normal file
@@ -0,0 +1,32 @@
|
||||
import type { ResourceStore } from '../../../../src/storage/ResourceStore';
|
||||
import { RegexRouterRule } from '../../../../src/storage/routing/RegexRouterRule';
|
||||
import { UnsupportedHttpError } from '../../../../src/util/errors/UnsupportedHttpError';
|
||||
|
||||
describe('A RegexRouterRule', (): void => {
|
||||
const base = 'http://test.com/';
|
||||
const store: ResourceStore = 'resourceStore' as any;
|
||||
|
||||
it('rejects identifiers not containing the base.', async(): Promise<void> => {
|
||||
const router = new RegexRouterRule(base, {});
|
||||
await expect(router.canHandle({ identifier: { path: 'http://notTest.com/apple' }}))
|
||||
.rejects.toThrow(new UnsupportedHttpError(`Identifiers need to start with http://test.com`));
|
||||
});
|
||||
|
||||
it('rejects identifiers not matching any regex.', async(): Promise<void> => {
|
||||
const router = new RegexRouterRule(base, { pear: store });
|
||||
await expect(router.canHandle({ identifier: { path: `${base}apple/` }}))
|
||||
.rejects.toThrow(new UnsupportedHttpError(`No stored regexes match http://test.com/apple/`));
|
||||
});
|
||||
|
||||
it('accepts identifiers matching any regex.', async(): Promise<void> => {
|
||||
const router = new RegexRouterRule(base, { '^/apple': store });
|
||||
await expect(router.canHandle({ identifier: { path: `${base}apple/` }}))
|
||||
.resolves.toBeUndefined();
|
||||
});
|
||||
|
||||
it('returns the corresponding store.', async(): Promise<void> => {
|
||||
const store2: ResourceStore = 'resourceStore2' as any;
|
||||
const router = new RegexRouterRule(base, { '^/apple': store2, '/pear/': store });
|
||||
await expect(router.handle({ identifier: { path: `${base}apple/` }})).resolves.toBe(store2);
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user