diff --git a/alfa-client/libs/bescheid-shared/src/lib/+state/bescheid.facade.spec.ts b/alfa-client/libs/bescheid-shared/src/lib/+state/bescheid.facade.spec.ts index b07673efb637d2565358c33723a9953ee187923b..1804540773a7b68dac8314afa73faf800b50a8e0 100644 --- a/alfa-client/libs/bescheid-shared/src/lib/+state/bescheid.facade.spec.ts +++ b/alfa-client/libs/bescheid-shared/src/lib/+state/bescheid.facade.spec.ts @@ -37,19 +37,65 @@ describe('BescheidFacade', () => { }); describe('createBescheid', () => { - it('should dispatch "createCommand"', () => { - const vorgangWithEingang: VorgangWithEingangResource = createVorgangWithEingangResource(); - const createCommand: CreateCommand = createCreateCommand(CommandOrder.CREATE_BESCHEID); - - facade.createBescheid(vorgangWithEingang, createCommand); - - expect(store.dispatch).toHaveBeenCalledWith( - CommandActions.createCommand({ - resource: vorgangWithEingang, - linkRel: VorgangWithEingangLinkRel.CREATE_BESCHEID, - command: createCommand, - }), - ); + const vorgangWithEingang: VorgangWithEingangResource = createVorgangWithEingangResource(); + const createCommand: CreateCommand = createCreateCommand(CommandOrder.CREATE_BESCHEID); + + describe('with both Links', () => { + it('should dispatch "createCommand" to CREATE_BESCHEID', () => { + const vorgang: VorgangWithEingangResource = createVorgangWithEingangResource([ + VorgangWithEingangLinkRel.CREATE_BESCHEID, + VorgangWithEingangLinkRel.CREATE_BESCHEID_DRAFT, + ]); + facade.createBescheid(vorgang, createCommand); + + expect(store.dispatch).toHaveBeenCalledWith( + CommandActions.createCommand({ + resource: vorgang, + linkRel: VorgangWithEingangLinkRel.CREATE_BESCHEID, + command: createCommand, + }), + ); + }); + }); + + describe('with CREATE_BESCHEID_DRAFT link', () => { + it('should dispatch "createCommand" to CREATE_BESCHEID_DRAFT', () => { + const vorgang: VorgangWithEingangResource = createVorgangWithEingangResource([ + VorgangWithEingangLinkRel.CREATE_BESCHEID_DRAFT, + ]); + facade.createBescheid(vorgang, createCommand); + + expect(store.dispatch).toHaveBeenCalledWith( + CommandActions.createCommand({ + resource: vorgang, + linkRel: VorgangWithEingangLinkRel.CREATE_BESCHEID_DRAFT, + command: createCommand, + }), + ); + }); + }); + + describe('with CREATE_BESCHEID link', () => { + it('should dispatch "createCommand" to CREATE_BESCHEID', () => { + const vorgang: VorgangWithEingangResource = createVorgangWithEingangResource([ + VorgangWithEingangLinkRel.CREATE_BESCHEID, + ]); + + facade.createBescheid(vorgang, createCommand); + + expect(store.dispatch).toHaveBeenCalledWith( + CommandActions.createCommand({ + resource: vorgang, + linkRel: VorgangWithEingangLinkRel.CREATE_BESCHEID, + command: createCommand, + }), + ); + }); + }); + it('should emit error if link is missing()', () => { + const vorgang: VorgangWithEingangResource = createVorgangWithEingangResource(); + + expect(() => facade.createBescheid(vorgang, createCommand)).toThrowError(); }); }); }); diff --git a/alfa-client/libs/bescheid-shared/src/lib/+state/bescheid.facade.ts b/alfa-client/libs/bescheid-shared/src/lib/+state/bescheid.facade.ts index c71a5ec087fcf8c07fbb485040890d7dacc8541d..0f965a3dbf1296e4ab9c1b08eb9aefded1902da8 100644 --- a/alfa-client/libs/bescheid-shared/src/lib/+state/bescheid.facade.ts +++ b/alfa-client/libs/bescheid-shared/src/lib/+state/bescheid.facade.ts @@ -1,11 +1,13 @@ -import { Injectable } from '@angular/core'; import { CommandResource, CreateCommand } from '@alfa-client/command-shared'; import { StateResource } from '@alfa-client/tech-shared'; import { VorgangWithEingangLinkRel, VorgangWithEingangResource } from '@alfa-client/vorgang-shared'; +import { Injectable } from '@angular/core'; import { Store } from '@ngrx/store'; -import { Observable } from 'rxjs'; +import { Observable, throwError } from 'rxjs'; + import * as CommandActions from '../../../../command-shared/src/lib/+state/command.actions'; import * as BescheidSelectors from './bescheid.selectors'; +import { hasLink } from '@ngxp/rest'; @Injectable({ providedIn: 'root' }) export class BescheidFacade { @@ -18,6 +20,19 @@ export class BescheidFacade { public createBescheid( vorgangWithEingang: VorgangWithEingangResource, command: CreateCommand, + ): void { + if (hasLink(vorgangWithEingang, VorgangWithEingangLinkRel.CREATE_BESCHEID)) { + return this.createBescheidKiel(vorgangWithEingang, command); + } + if (hasLink(vorgangWithEingang, VorgangWithEingangLinkRel.CREATE_BESCHEID_DRAFT)) { + return this.createBescheidDraft(vorgangWithEingang, command); + } + throw new Error('missing Link: CREATE_BESCHEID or CREATE_BESCHEID_DRAFT expected'); + } + + public createBescheidKiel( + vorgangWithEingang: VorgangWithEingangResource, + command: CreateCommand, ): void { this.store.dispatch( CommandActions.createCommand({ @@ -27,4 +42,17 @@ export class BescheidFacade { }), ); } + + public createBescheidDraft( + vorgangWithEingang: VorgangWithEingangResource, + command: CreateCommand, + ): void { + this.store.dispatch( + CommandActions.createCommand({ + resource: vorgangWithEingang, + linkRel: VorgangWithEingangLinkRel.CREATE_BESCHEID_DRAFT, + command, + }), + ); + } }