import type { MockResponse } from 'node-mocks-http'; import { BasicHandlersWithAclConfig } from '../configs/BasicHandlersWithAclConfig'; import { AclTestHelper } from '../util/TestHelpers'; import { call } from '../util/Util'; describe('A server with authorization', (): void => { const config = new BasicHandlersWithAclConfig(); const handler = config.getHttpHandler(); const { store } = config; const aclHelper = new AclTestHelper(store, 'http://test.com/'); it('can create new entries.', async(): Promise => { await aclHelper.setSimpleAcl({ read: true, write: true, append: true }, 'agent'); // POST let requestUrl = new URL('http://test.com/'); let response: MockResponse = await call( handler, requestUrl, 'POST', { 'content-type': 'text/turtle', 'transfer-encoding': 'chunked' }, [ ' .' ], ); expect(response.statusCode).toBe(201); // PUT requestUrl = new URL('http://test.com/foo/bar'); response = await call( handler, requestUrl, 'PUT', { 'content-type': 'text/turtle', 'transfer-encoding': 'chunked' }, [ ' .' ], ); expect(response.statusCode).toBe(205); }); it('can not create new entries if not allowed.', async(): Promise => { await aclHelper.setSimpleAcl({ read: true, write: true, append: true }, 'authenticated'); // POST let requestUrl = new URL('http://test.com/'); let response: MockResponse = await call( handler, requestUrl, 'POST', { 'content-type': 'text/turtle', 'transfer-encoding': 'chunked' }, [ ' .' ], ); expect(response.statusCode).toBe(401); // PUT requestUrl = new URL('http://test.com/foo/bar'); response = await call( handler, requestUrl, 'PUT', { 'content-type': 'text/turtle', 'transfer-encoding': 'chunked' }, [ ' .' ], ); expect(response.statusCode).toBe(401); }); });