diff --git a/src/index.ts b/src/index.ts index 36d4f3c6e..c28cb1bd2 100644 --- a/src/index.ts +++ b/src/index.ts @@ -153,6 +153,7 @@ export * from './storage/routing/RouterRule'; // Storage export * from './storage/AtomicResourceStore'; +export * from './storage/BaseResourceStore'; export * from './storage/Conditions'; export * from './storage/DataAccessorBasedStore'; export * from './storage/LockingResourceStore'; diff --git a/src/storage/BaseResourceStore.ts b/src/storage/BaseResourceStore.ts new file mode 100644 index 000000000..35e9c1258 --- /dev/null +++ b/src/storage/BaseResourceStore.ts @@ -0,0 +1,36 @@ +import type { Patch } from '../ldp/http/Patch'; +import type { Representation } from '../ldp/representation/Representation'; +import type { RepresentationPreferences } from '../ldp/representation/RepresentationPreferences'; +import type { ResourceIdentifier } from '../ldp/representation/ResourceIdentifier'; +import { NotImplementedHttpError } from '../util/errors/NotImplementedHttpError'; +import type { Conditions } from './Conditions'; +import type { ResourceStore } from './ResourceStore'; + +/** + * Base implementation of ResourceStore for implementers of custom stores. + */ +/* eslint-disable @typescript-eslint/no-unused-vars */ +export class BaseResourceStore implements ResourceStore { + public async addResource(container: ResourceIdentifier, representation: Representation, + conditions?: Conditions): Promise { + throw new NotImplementedHttpError(); + } + + public async deleteResource(identifier: ResourceIdentifier, conditions?: Conditions): Promise { + throw new NotImplementedHttpError(); + } + + public async getRepresentation(identifier: ResourceIdentifier, preferences: RepresentationPreferences, + conditions?: Conditions): Promise { + throw new NotImplementedHttpError(); + } + + public async modifyResource(identifier: ResourceIdentifier, patch: Patch, conditions?: Conditions): Promise { + throw new NotImplementedHttpError(); + } + + public async setRepresentation(identifier: ResourceIdentifier, representation: Representation, + conditions?: Conditions): Promise { + throw new NotImplementedHttpError(); + } +} diff --git a/test/unit/storage/BaseResourceStore.test.ts b/test/unit/storage/BaseResourceStore.test.ts new file mode 100644 index 000000000..791e42e72 --- /dev/null +++ b/test/unit/storage/BaseResourceStore.test.ts @@ -0,0 +1,27 @@ +import { BaseResourceStore } from '../../../src/storage/BaseResourceStore'; +import { NotImplementedHttpError } from '../../../src/util/errors/NotImplementedHttpError'; + +const any: any = {}; + +describe('A BaseResourceStore', (): void => { + const store = new BaseResourceStore(); + it('errors on getRepresentation.', async(): Promise => { + await expect(store.getRepresentation(any, any)).rejects.toThrow(NotImplementedHttpError); + }); + + it('errors on addResource.', async(): Promise => { + await expect(store.addResource(any, any)).rejects.toThrow(NotImplementedHttpError); + }); + + it('errors on setRepresentation.', async(): Promise => { + await expect(store.setRepresentation(any, any)).rejects.toThrow(NotImplementedHttpError); + }); + + it('errors on deleteResource.', async(): Promise => { + await expect(store.deleteResource(any, any)).rejects.toThrow(NotImplementedHttpError); + }); + + it('errors on modifyResource.', async(): Promise => { + await expect(store.modifyResource(any, any)).rejects.toThrow(NotImplementedHttpError); + }); +});