From ba42861699d9c7e6d787c099e0f9ab5eabdfbe7f Mon Sep 17 00:00:00 2001 From: Ruben Verborgh Date: Mon, 11 Jan 2021 22:01:54 +0100 Subject: [PATCH] feat: Use ldp: prefix in container representations. --- src/storage/DataAccessorBasedStore.ts | 16 ++++++++++++---- test/integration/LdpHandlerWithoutAuth.test.ts | 11 +++++++++++ 2 files changed, 23 insertions(+), 4 deletions(-) diff --git a/src/storage/DataAccessorBasedStore.ts b/src/storage/DataAccessorBasedStore.ts index 7618faee8..e6bc6954b 100644 --- a/src/storage/DataAccessorBasedStore.ts +++ b/src/storage/DataAccessorBasedStore.ts @@ -22,7 +22,7 @@ import { } from '../util/PathUtil'; import { parseQuads } from '../util/QuadUtil'; import { generateResourceQuads } from '../util/ResourceUtil'; -import { CONTENT_TYPE, HTTP, LDP, PIM, RDF } from '../util/Vocabularies'; +import { CONTENT_TYPE, HTTP, LDP, PIM, RDF, VANN } from '../util/Vocabularies'; import type { DataAccessor } from './accessors/DataAccessor'; import type { ResourceStore } from './ResourceStore'; @@ -63,10 +63,18 @@ export class DataAccessorBasedStore implements ResourceStore { // In the future we want to use getNormalizedMetadata and redirect in case the identifier differs const metadata = await this.accessor.getMetadata(identifier); + let representation: Representation; - return this.isExistingContainer(metadata) ? - new BasicRepresentation(metadata.quads(), metadata, INTERNAL_QUADS) : - new BasicRepresentation(await this.accessor.getData(identifier), metadata); + if (this.isExistingContainer(metadata)) { + // Generate a container representation from the metadata + const data = metadata.quads(); + metadata.addQuad(LDP.terms.namespace, VANN.terms.preferredNamespacePrefix, 'ldp'); + representation = new BasicRepresentation(data, metadata, INTERNAL_QUADS); + } else { + // Retrieve a document representation from the accessor + representation = new BasicRepresentation(await this.accessor.getData(identifier), metadata); + } + return representation; } public async addResource(container: ResourceIdentifier, representation: Representation): Promise { diff --git a/test/integration/LdpHandlerWithoutAuth.test.ts b/test/integration/LdpHandlerWithoutAuth.test.ts index f9168ad20..b46564894 100644 --- a/test/integration/LdpHandlerWithoutAuth.test.ts +++ b/test/integration/LdpHandlerWithoutAuth.test.ts @@ -57,6 +57,17 @@ describe.each(stores)('An LDP handler without auth using %s', (name, { storeUrn, await teardown(); }); + it('can read a folder listing.', async(): + Promise => { + const response = await resourceHelper.getResource(`${BASE}/`); + expect(response.statusCode).toBe(200); + expect(response.getHeaders()).toHaveProperty('content-type', 'text/turtle'); + + const data = response._getData().toString(); + expect(data).toContain(`<${BASE}/> a ldp:Container`); + expect(response.getHeaders().link).toContain(`<${LDP.Container}>; rel="type"`); + }); + it('can add a file to the store, read it and delete it.', async(): Promise => { // POST