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 {
protected readonly logger = getLoggerFor(this);
public async canHandle({ request }: BodyParserArgs): Promise<void> {
const contentType = request.headers['content-type'];
if (contentType !== APPLICATION_SPARQL_UPDATE) {
public async canHandle({ metadata }: BodyParserArgs): Promise<void> {
if (metadata.contentType !== APPLICATION_SPARQL_UPDATE) {
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._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
response = await performRequest(handler, requestUrl, 'GET', { accept: 'text/turtle' }, []);
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> => {
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);
input.request.headers = { 'content-type': 'application/sparql-update' };
input.metadata.contentType = 'application/sparql-update';
await expect(bodyParser.canHandle(input)).resolves.toBeUndefined();
});