mirror of
https://github.com/CommunitySolidServer/CommunitySolidServer.git
synced 2024-10-03 14:55:10 +00:00

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.
88 lines
3.4 KiB
TypeScript
88 lines
3.4 KiB
TypeScript
import { copyFileSync, mkdirSync } from 'fs';
|
|
import { join } from 'path';
|
|
import * as rimraf from 'rimraf';
|
|
import type { HttpHandler, ResourceStore } from '../../index';
|
|
import { ensureTrailingSlash } from '../../src/util/Util';
|
|
import { AuthenticatedFileResourceStoreConfig } from '../configs/AuthenticatedFileResourceStoreConfig';
|
|
import { BASE, getRootFilePath } from '../configs/Util';
|
|
import { AclTestHelper, FileTestHelper } from '../util/TestHelpers';
|
|
|
|
describe('A server using a AuthenticatedFileResourceStore', (): void => {
|
|
let config: AuthenticatedFileResourceStoreConfig;
|
|
let handler: HttpHandler;
|
|
let store: ResourceStore;
|
|
let aclHelper: AclTestHelper;
|
|
let fileHelper: FileTestHelper;
|
|
let rootFilePath: string;
|
|
|
|
beforeAll(async(): Promise<void> => {
|
|
rootFilePath = getRootFilePath('AuthenticatedFileResourceStore');
|
|
mkdirSync(rootFilePath, { recursive: true });
|
|
config = new AuthenticatedFileResourceStoreConfig(BASE, rootFilePath);
|
|
handler = config.getHttpHandler();
|
|
({ store } = config);
|
|
aclHelper = new AclTestHelper(store, ensureTrailingSlash(BASE));
|
|
fileHelper = new FileTestHelper(handler, new URL(ensureTrailingSlash(BASE)));
|
|
|
|
// Make sure the root directory exists
|
|
mkdirSync(rootFilePath, { recursive: true });
|
|
copyFileSync(join(__dirname, '../assets/permanent.txt'), `${rootFilePath}/permanent.txt`);
|
|
});
|
|
|
|
afterAll(async(): Promise<void> => {
|
|
rimraf.sync(rootFilePath, { glob: false });
|
|
});
|
|
|
|
describe('with acl', (): void => {
|
|
it('can add a file to the store, read it and delete it if allowed.', async(): Promise<
|
|
void
|
|
> => {
|
|
// Set acl
|
|
await aclHelper.setSimpleAcl({ read: true, write: true, append: true }, 'agent');
|
|
|
|
// Create file
|
|
let response = await fileHelper.createFile('../assets/testfile2.txt', 'testfile2.txt');
|
|
const id = response._getHeaders().location;
|
|
|
|
// Get file
|
|
response = await fileHelper.getFile(id);
|
|
expect(response.statusCode).toBe(200);
|
|
expect(response._getHeaders().location).toBe(id);
|
|
expect(response._getBuffer().toString()).toContain('TESTFILE2');
|
|
|
|
// DELETE file
|
|
await fileHelper.deleteFile(id);
|
|
await fileHelper.shouldNotExist(id);
|
|
});
|
|
|
|
it('can not add a file to the store if not allowed.', async():
|
|
Promise<void> => {
|
|
// Set acl
|
|
await aclHelper.setSimpleAcl({ read: true, write: true, append: true }, 'authenticated');
|
|
|
|
// Try to create file
|
|
const response = await fileHelper.createFile('../assets/testfile2.txt', 'testfile2.txt', true);
|
|
expect(response.statusCode).toBe(401);
|
|
});
|
|
|
|
it('can not add/delete, but only read files if allowed.', async():
|
|
Promise<void> => {
|
|
// Set acl
|
|
await aclHelper.setSimpleAcl({ read: true, write: false, append: false }, 'agent');
|
|
|
|
// Try to create file
|
|
let response = await fileHelper.createFile('../assets/testfile2.txt', 'testfile2.txt', true);
|
|
expect(response.statusCode).toBe(401);
|
|
|
|
// GET permanent file
|
|
response = await fileHelper.getFile('http://test.com/permanent.txt');
|
|
expect(response._getHeaders().location).toBe('http://test.com/permanent.txt');
|
|
expect(response._getBuffer().toString()).toContain('TEST');
|
|
|
|
// Try to delete permanent file
|
|
response = await fileHelper.deleteFile('http://test.com/permanent.txt', true);
|
|
expect(response.statusCode).toBe(401);
|
|
});
|
|
});
|
|
});
|