fix: SPARQL PATCH Content Type

This commit is contained in:
Matthieu Bosquet 2021-02-26 13:34:27 +00:00 committed by Joachim Van Herwegen
parent 5c6822d468
commit 2a34a430fa
3 changed files with 19 additions and 5 deletions

View File

@ -16,9 +16,8 @@ import type { SparqlUpdatePatch } from './SparqlUpdatePatch';
export class SparqlUpdateBodyParser extends BodyParser { export class SparqlUpdateBodyParser extends BodyParser {
protected readonly logger = getLoggerFor(this); protected readonly logger = getLoggerFor(this);
public async canHandle({ request }: BodyParserArgs): Promise<void> { public async canHandle({ metadata }: BodyParserArgs): Promise<void> {
const contentType = request.headers['content-type']; if (metadata.contentType !== APPLICATION_SPARQL_UPDATE) {
if (contentType !== APPLICATION_SPARQL_UPDATE) {
throw new UnsupportedMediaTypeHttpError('This parser only supports SPARQL UPDATE data.'); throw new UnsupportedMediaTypeHttpError('This parser only supports SPARQL UPDATE data.');
} }
} }

View File

@ -107,6 +107,21 @@ describe('An integrated AuthenticatedLdpHandler', (): void => {
expect(response.statusCode).toBe(205); expect(response.statusCode).toBe(205);
expect(response._getData()).toHaveLength(0); expect(response._getData()).toHaveLength(0);
// PATCH using a content-type header with charset
requestUrl = new URL(id);
response = await performRequest(
handler,
requestUrl,
'PATCH',
{ 'content-type': ' application/sparql-update ; charset=UTF-8', 'transfer-encoding': 'chunked' },
[ 'DELETE { <s1> <http://test.com/p1> <http://test.com/o1> }',
'INSERT {<s3> <http://test.com/p3> <http://test.com/o3>}',
'WHERE {}',
],
);
expect(response.statusCode).toBe(205);
expect(response._getData()).toHaveLength(0);
// GET // GET
response = await performRequest(handler, requestUrl, 'GET', { accept: 'text/turtle' }, []); response = await performRequest(handler, requestUrl, 'GET', { accept: 'text/turtle' }, []);
expect(response.statusCode).toBe(200); expect(response.statusCode).toBe(200);

View File

@ -21,9 +21,9 @@ describe('A SparqlUpdateBodyParser', (): void => {
it('only accepts application/sparql-update content.', async(): Promise<void> => { it('only accepts application/sparql-update content.', async(): Promise<void> => {
await expect(bodyParser.canHandle(input)).rejects.toThrow(UnsupportedMediaTypeHttpError); await expect(bodyParser.canHandle(input)).rejects.toThrow(UnsupportedMediaTypeHttpError);
input.request.headers = { 'content-type': 'text/plain' }; input.metadata.contentType = 'text/plain';
await expect(bodyParser.canHandle(input)).rejects.toThrow(UnsupportedMediaTypeHttpError); await expect(bodyParser.canHandle(input)).rejects.toThrow(UnsupportedMediaTypeHttpError);
input.request.headers = { 'content-type': 'application/sparql-update' }; input.metadata.contentType = 'application/sparql-update';
await expect(bodyParser.canHandle(input)).resolves.toBeUndefined(); await expect(bodyParser.canHandle(input)).resolves.toBeUndefined();
}); });