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

* feat: change return types in ResourceStore.ts * feat: change return types in BaseResourceStore.ts * feat: change return types in LockingResourceStore.ts * feat: change return types in RoutingResourceStore.ts * feat: change return types in MonitoringStore.ts * feat: change return types in PassthroughStore.ts * feat: change return types in ReadOnlyStore.ts * feat: change return types in PatchHandler.ts * feat: change return types in PatchingStore.ts * feat: change return types in RepresentationPatchHandler.ts * feat: create createResourceIdentifier() function for convenience * feat: adapt PostOperationHandler.ts to new typing * feat: change return types in RepresentationConvertingStore.ts * feat: adapt DataAccessorBasedStore.ts implementation to new typings * feat: adapt UnsecureWebSocketsProtocol.ts to new typing * chore: add temporary comments * fix: return correct Location header on POST request with slug * fix: npm run lint command needs more packages * fix: linting errors * chore: revert ed9952b * test: adapt PostOperationHandler tests * test: adapt UnsecureWebSocketsProtocol tests * test: adapt DataAccessorBasedStore tests * fix: linting errors * feat: emit specific created, deleted, updated events in MonitoringStore * test: adapt RepresentationPatchHandler tests * fix: revert UnsecureWebSocketsProtocol changes * feat: emit extra parameter on changed * test: adapt MonitoringStore tests * fix: linting errors * test: add test to MonitorStore.test for coverage * fix: linting error * chore: update doc in ResourceStore.ts * test: improve MonitoringStore tests * chore: update RELEASE_NOTES.md * chore: add extra info about the MonitoringStore to documentation/resource-store.md * chore: Update RELEASE_NOTES.md Co-authored-by: Anton Wiklund <ixuz07@gmail.com> * chore: Update documentation/resource-store.md Co-authored-by: Anton Wiklund <ixuz07@gmail.com> * chore: very small changes * chore: simplify metadata creation * fix: DataAccessorBasedStore improvement and bugfix * chore: improve resource-store.md * chore: adapt MonitoringStore event names, update docs and apply code suggestion * chore: use ResourceStoreResponse type * fix: typo * chore: rename ResourceStoreResponse type to ChangeMap * chore: adapt .gitignore to name change Co-authored-by: Anton Wiklund <ixuz07@gmail.com>
71 lines
3.1 KiB
TypeScript
71 lines
3.1 KiB
TypeScript
import { BasicRepresentation } from '../../../../src/http/representation/BasicRepresentation';
|
|
import type { Patch } from '../../../../src/http/representation/Patch';
|
|
import { RepresentationMetadata } from '../../../../src/http/representation/RepresentationMetadata';
|
|
import type { PatchHandlerInput } from '../../../../src/storage/patch/PatchHandler';
|
|
import type { RepresentationPatcher } from '../../../../src/storage/patch/RepresentationPatcher';
|
|
import { RepresentationPatchHandler } from '../../../../src/storage/patch/RepresentationPatchHandler';
|
|
import type { ResourceStore } from '../../../../src/storage/ResourceStore';
|
|
import { BadRequestHttpError } from '../../../../src/util/errors/BadRequestHttpError';
|
|
import { NotFoundHttpError } from '../../../../src/util/errors/NotFoundHttpError';
|
|
|
|
describe('A RepresentationPatchHandler', (): void => {
|
|
const identifier = { path: 'http://test.com/foo' };
|
|
const representation = new BasicRepresentation('', 'text/turtle');
|
|
const patch: Patch = new BasicRepresentation('', 'application/sparql-update');
|
|
const patchResult = new BasicRepresentation('', 'application/trig');
|
|
let input: PatchHandlerInput;
|
|
let source: jest.Mocked<ResourceStore>;
|
|
let patcher: jest.Mocked<RepresentationPatcher>;
|
|
let handler: RepresentationPatchHandler;
|
|
|
|
beforeEach(async(): Promise<void> => {
|
|
source = {
|
|
getRepresentation: jest.fn().mockResolvedValue(representation),
|
|
setRepresentation: jest.fn().mockResolvedValue({
|
|
[identifier.path]: new RepresentationMetadata(identifier),
|
|
}),
|
|
} as any;
|
|
|
|
input = { source, identifier, patch };
|
|
|
|
patcher = {
|
|
handleSafe: jest.fn().mockResolvedValue(patchResult),
|
|
} as any;
|
|
|
|
handler = new RepresentationPatchHandler(patcher);
|
|
});
|
|
|
|
it('calls the patcher with the representation from the store.', async(): Promise<void> => {
|
|
await expect(handler.handle(input)).resolves.toEqual({
|
|
[identifier.path]: new RepresentationMetadata(identifier),
|
|
});
|
|
|
|
expect(patcher.handleSafe).toHaveBeenCalledTimes(1);
|
|
expect(patcher.handleSafe).toHaveBeenLastCalledWith({ identifier, patch, representation });
|
|
|
|
expect(source.setRepresentation).toHaveBeenCalledTimes(1);
|
|
expect(source.setRepresentation).toHaveBeenLastCalledWith(identifier, patchResult);
|
|
});
|
|
|
|
it('calls the patcher with no representation if there is none.', async(): Promise<void> => {
|
|
source.getRepresentation.mockRejectedValueOnce(new NotFoundHttpError());
|
|
|
|
await expect(handler.handle(input)).resolves.toEqual({
|
|
[identifier.path]: new RepresentationMetadata(identifier),
|
|
});
|
|
|
|
expect(patcher.handleSafe).toHaveBeenCalledTimes(1);
|
|
expect(patcher.handleSafe).toHaveBeenLastCalledWith({ identifier, patch });
|
|
|
|
expect(source.setRepresentation).toHaveBeenCalledTimes(1);
|
|
expect(source.setRepresentation).toHaveBeenLastCalledWith(identifier, patchResult);
|
|
});
|
|
|
|
it('errors if the store throws a non-404 error.', async(): Promise<void> => {
|
|
const error = new BadRequestHttpError();
|
|
source.getRepresentation.mockRejectedValueOnce(error);
|
|
|
|
await expect(handler.handle(input)).rejects.toThrow(error);
|
|
});
|
|
});
|