UNPKG

@dossierhq/integration-test

Version:

Integration test to ensure that different Dossier database adapters work as expected.

113 lines 5.22 kB
/// <reference types="./AdminEntityArchiveEntitySubSuite.d.ts" /> import { copyEntity, EntityStatus, ErrorType, EventType } from '@dossierhq/core'; import { assertErrorResult, assertOkResult, assertResultValue } from '../Asserts.js'; import { assertChangelogEventsConnection } from '../shared-entity/EventsTestUtils.js'; import { SUBJECT_ONLY_CREATE, TITLE_ONLY_CREATE } from '../shared-entity/Fixtures.js'; export const ArchiveEntitySubSuite = [ archiveEntity_minimal, archiveEntity_archivedEntity, archiveEntity_archiveEntityEvent, archiveEntity_errorInvalidReference, archiveEntity_errorWrongAuthKey, archiveEntity_errorPublishedEntity, archiveEntity_errorReadonlySession, ]; async function archiveEntity_minimal({ clientProvider }) { const client = clientProvider.dossierClient(); const createResult = await client.createEntity(TITLE_ONLY_CREATE); const { entity } = createResult.valueOrThrow(); const archiveResult = await client.archiveEntity({ id: entity.id }); const { updatedAt } = archiveResult.valueOrThrow(); assertResultValue(archiveResult, { id: entity.id, effect: 'archived', status: EntityStatus.archived, updatedAt, }); const expectedEntity = copyEntity(entity, { info: { status: EntityStatus.archived, updatedAt }, }); const getResult = await client.getEntity({ id: entity.id }); assertResultValue(getResult, expectedEntity); } async function archiveEntity_archivedEntity({ clientProvider }) { const client = clientProvider.dossierClient(); const createResult = await client.createEntity(TITLE_ONLY_CREATE); const { entity } = createResult.valueOrThrow(); const firstArchiveResult = await client.archiveEntity({ id: entity.id }); const { updatedAt } = firstArchiveResult.valueOrThrow(); const secondArchiveResult = await client.archiveEntity({ id: entity.id }); assertResultValue(secondArchiveResult, { id: entity.id, effect: 'none', status: EntityStatus.archived, updatedAt, }); const expectedEntity = copyEntity(entity, { info: { status: EntityStatus.archived, updatedAt }, }); const getResult = await client.getEntity({ id: entity.id }); assertResultValue(getResult, expectedEntity); } async function archiveEntity_archiveEntityEvent({ clientProvider }) { const client = clientProvider.dossierClient(); const createResult = await client.createEntity(TITLE_ONLY_CREATE); assertOkResult(createResult); const { entity: { id, info: { createdAt, name }, }, } = createResult.value; const archiveResult = await client.archiveEntity({ id }); const { updatedAt } = archiveResult.valueOrThrow(); assertResultValue(archiveResult, { id, effect: 'archived', status: EntityStatus.archived, updatedAt, }); const connectionResult = await client.getChangelogEvents({ entity: { id } }); assertChangelogEventsConnection(connectionResult, [ { type: EventType.createEntity, createdAt, createdBy: '', entities: [{ id, name, version: 1, type: 'TitleOnly' }], unauthorizedEntityCount: 0, }, { type: EventType.archiveEntity, createdAt: updatedAt, createdBy: '', entities: [{ id, name, version: 1, type: 'TitleOnly' }], unauthorizedEntityCount: 0, }, ]); } async function archiveEntity_errorInvalidReference({ clientProvider }) { const result = await clientProvider.dossierClient().archiveEntity({ id: '5b14e69f-6612-4ddb-bb42-7be273104486', }); assertErrorResult(result, ErrorType.NotFound, 'No such entity'); } async function archiveEntity_errorWrongAuthKey({ clientProvider }) { const createResult = await clientProvider.dossierClient().createEntity(SUBJECT_ONLY_CREATE); const { entity: { id }, } = createResult.valueOrThrow(); const archiveResult = await clientProvider.dossierClient('secondary').archiveEntity({ id }); assertErrorResult(archiveResult, ErrorType.NotAuthorized, 'Wrong authKey provided'); } async function archiveEntity_errorPublishedEntity({ clientProvider }) { const client = clientProvider.dossierClient(); const createResult = await client.createEntity(TITLE_ONLY_CREATE, { publish: true, }); assertOkResult(createResult); const { entity: { id }, } = createResult.value; const archiveResult = await client.archiveEntity({ id }); assertErrorResult(archiveResult, ErrorType.BadRequest, 'Entity is published'); } async function archiveEntity_errorReadonlySession({ clientProvider }) { const normalClient = clientProvider.dossierClient('main', 'write'); const readonlyClient = clientProvider.dossierClient('main', 'readonly'); const createResult = await normalClient.createEntity(TITLE_ONLY_CREATE); const { entity: { id }, } = createResult.valueOrThrow(); const archiveResult = await readonlyClient.archiveEntity({ id }); assertErrorResult(archiveResult, ErrorType.BadRequest, 'Readonly session used to archive entity'); } //# sourceMappingURL=AdminEntityArchiveEntitySubSuite.js.map