diff --git a/src/ldp/http/SimpleTargetExtractor.ts b/src/ldp/http/SimpleTargetExtractor.ts new file mode 100644 index 000000000..0b1def084 --- /dev/null +++ b/src/ldp/http/SimpleTargetExtractor.ts @@ -0,0 +1,15 @@ +import { HttpRequest } from '../../server/HttpRequest'; +import { ResourceIdentifier } from '../representation/ResourceIdentifier'; +import { TargetExtractor } from './TargetExtractor'; + +export class SimpleTargetExtractor extends TargetExtractor { + public async canHandle(input: HttpRequest): Promise { + if (!input.url) { + throw new Error('Missing URL.'); + } + } + + public async handle(input: HttpRequest): Promise { + return { path: input.url }; + } +} diff --git a/test/unit/ldp/http/SimpleTargetExtractor.test.ts b/test/unit/ldp/http/SimpleTargetExtractor.test.ts new file mode 100644 index 000000000..de9406277 --- /dev/null +++ b/test/unit/ldp/http/SimpleTargetExtractor.test.ts @@ -0,0 +1,17 @@ +import { SimpleTargetExtractor } from '../../../../src/ldp/http/SimpleTargetExtractor'; + +describe('A SimpleTargetExtractor', (): void => { + const extractor = new SimpleTargetExtractor(); + + it('can handle input with an URL.', async(): Promise => { + await expect(extractor.canHandle({ url: 'url' } as any)).resolves.toBeUndefined(); + }); + + it('rejects input without URL.', async(): Promise => { + await expect(extractor.canHandle({ } as any)).rejects.toThrow('Missing URL.'); + }); + + it('returns the input URL.', async(): Promise => { + await expect(extractor.handle({ url: 'url' } as any)).resolves.toEqual({ path: 'url' }); + }); +});