From 22962192ffff5eac028ef3604e1cd989331cbff0 Mon Sep 17 00:00:00 2001 From: Joachim Van Herwegen Date: Wed, 23 Sep 2020 17:03:42 +0200 Subject: [PATCH] fix: Fix test issues The root container wasn't being created for file based tests. Containers should be POSTed as RDF bodies. Containment triples of child containers had no trailing slash. --- src/storage/ExtensionBasedMapper.ts | 11 ++++++++--- src/storage/FileResourceStore.ts | 2 +- .../AuthenticatedFileResourceStore.test.ts | 1 + test/integration/FileResourceStore.test.ts | 10 ++++++---- test/util/TestHelpers.ts | 2 +- 5 files changed, 17 insertions(+), 9 deletions(-) diff --git a/src/storage/ExtensionBasedMapper.ts b/src/storage/ExtensionBasedMapper.ts index 07fcaa7a0e..a57d6e17c2 100644 --- a/src/storage/ExtensionBasedMapper.ts +++ b/src/storage/ExtensionBasedMapper.ts @@ -6,7 +6,12 @@ import { APPLICATION_OCTET_STREAM, TEXT_TURTLE } from '../util/ContentTypes'; import { ConflictHttpError } from '../util/errors/ConflictHttpError'; import { NotFoundHttpError } from '../util/errors/NotFoundHttpError'; import { UnsupportedHttpError } from '../util/errors/UnsupportedHttpError'; -import { decodeUriPathComponents, encodeUriPathComponents, trimTrailingSlashes } from '../util/Util'; +import { + decodeUriPathComponents, + encodeUriPathComponents, + ensureTrailingSlash, + trimTrailingSlashes, +} from '../util/Util'; import type { FileIdentifierMapper, ResourceLink } from './FileIdentifierMapper'; const { join: joinPath, normalize: normalizePath } = posix; @@ -137,7 +142,7 @@ export class ExtensionBasedMapper implements FileIdentifierMapper { let relative = filePath.slice(this.rootFilepath.length); if (isContainer) { return { - identifier: { path: this.baseRequestURI + encodeUriPathComponents(relative) }, + identifier: { path: ensureTrailingSlash(this.baseRequestURI + encodeUriPathComponents(relative)) }, filePath, }; } @@ -150,7 +155,7 @@ export class ExtensionBasedMapper implements FileIdentifierMapper { } return { - identifier: { path: this.baseRequestURI + encodeUriPathComponents(relative) }, + identifier: { path: trimTrailingSlashes(this.baseRequestURI + encodeUriPathComponents(relative)) }, filePath, contentType, }; diff --git a/src/storage/FileResourceStore.ts b/src/storage/FileResourceStore.ts index ec6fb6ba19..cba2a9ab98 100644 --- a/src/storage/FileResourceStore.ts +++ b/src/storage/FileResourceStore.ts @@ -195,7 +195,7 @@ export class FileResourceStore implements ResourceStore { const files = await fsPromises.readdir(path); const match = files.find((file): any => !file.startsWith('.metadata')); if (typeof match === 'string') { - throw new ConflictHttpError('Container is not empty.'); + throw new ConflictHttpError('Can only delete empty containers.'); } // Only delete the metadata file as auxiliary resource because this is the only file created by this store. diff --git a/test/integration/AuthenticatedFileResourceStore.test.ts b/test/integration/AuthenticatedFileResourceStore.test.ts index d1584d67f9..ae008acd8e 100644 --- a/test/integration/AuthenticatedFileResourceStore.test.ts +++ b/test/integration/AuthenticatedFileResourceStore.test.ts @@ -17,6 +17,7 @@ describe('A server using a AuthenticatedFileResourceStore', (): void => { beforeAll(async(): Promise => { rootFilePath = getRootFilePath('AuthenticatedFileResourceStore'); + mkdirSync(rootFilePath, { recursive: true }); config = new AuthenticatedFileResourceStoreConfig(BASE, rootFilePath); handler = config.getHttpHandler(); ({ store } = config); diff --git a/test/integration/FileResourceStore.test.ts b/test/integration/FileResourceStore.test.ts index 8d7256ce55..2c75e76913 100644 --- a/test/integration/FileResourceStore.test.ts +++ b/test/integration/FileResourceStore.test.ts @@ -1,3 +1,4 @@ +import { mkdirSync } from 'fs'; import * as rimraf from 'rimraf'; import type { HttpHandler } from '../../src/server/HttpHandler'; import { FileResourceStoreConfig } from '../configs/FileResourceStoreConfig'; @@ -13,6 +14,7 @@ describe('A server using a FileResourceStore', (): void => { beforeAll(async(): Promise => { rootFilePath = getRootFilePath('FileResourceStore'); + mkdirSync(rootFilePath, { recursive: true }); config = new FileResourceStoreConfig(BASE, rootFilePath); handler = config.getHttpHandler(); fileHelper = new FileTestHelper(handler, new URL(BASE)); @@ -109,7 +111,7 @@ describe('A server using a FileResourceStore', (): void => { // Try DELETE folder response = await fileHelper.simpleCall(new URL(folderId), 'DELETE', {}); expect(response.statusCode).toBe(409); - expect(response._getData()).toContain('ConflictHttpError: Container is not empty.'); + expect(response._getData()).toContain('ConflictHttpError: Can only delete empty containers.'); // DELETE await fileHelper.deleteFile('http://test.com/testfolder1/testfile0.txt'); @@ -130,7 +132,7 @@ describe('A server using a FileResourceStore', (): void => { // Try DELETE folder response = await fileHelper.simpleCall(new URL(folderId), 'DELETE', {}); expect(response.statusCode).toBe(409); - expect(response._getData()).toContain('ConflictHttpError: Container is not empty.'); + expect(response._getData()).toContain('ConflictHttpError: Can only delete empty containers.'); // DELETE await fileHelper.deleteFolder(subFolderId); @@ -145,7 +147,7 @@ describe('A server using a FileResourceStore', (): void => { const folderId = response._getHeaders().location; // Create subfolder - response = await fileHelper.createFolder('testfolder3/subfolder0'); + response = await fileHelper.createFolder('testfolder3/subfolder0/'); const subFolderId = response._getHeaders().location; // Create file @@ -155,7 +157,7 @@ describe('A server using a FileResourceStore', (): void => { response = await fileHelper.getFolder(folderId); expect(response.statusCode).toBe(200); expect(response._getHeaders().location).toBe(folderId); - expect(response._getBuffer().toString()).toContain(' .'); + expect(response._getBuffer().toString()).toContain(' .'); expect(response._getBuffer().toString()).toContain(' .'); // DELETE diff --git a/test/util/TestHelpers.ts b/test/util/TestHelpers.ts index 1cf93d978f..c2d913b6e7 100644 --- a/test/util/TestHelpers.ts +++ b/test/util/TestHelpers.ts @@ -173,7 +173,7 @@ export class FileTestHelper { { slug, link: '; rel="type"', - 'content-type': 'text/plain', + 'content-type': 'text/turtle', 'transfer-encoding': 'chunked', }, );