diff --git a/alfa-client/libs/bescheid-shared/src/lib/bescheid.service.spec.ts b/alfa-client/libs/bescheid-shared/src/lib/bescheid.service.spec.ts index 1f1c1ed0920eb49a8cdb98aeeb39a38e827582c6..3113ffb78ef2f532a99726a91adaeae3475f00e8 100644 --- a/alfa-client/libs/bescheid-shared/src/lib/bescheid.service.spec.ts +++ b/alfa-client/libs/bescheid-shared/src/lib/bescheid.service.spec.ts @@ -17,13 +17,11 @@ import { import { ResourceRepository } from '../../../tech-shared/src/lib/resource/resource.repository'; import { CommandOrder, CommandService, CreateCommand } from '@alfa-client/command-shared'; import faker from '@faker-js/faker'; -import { createBescheidStateResource } from '../test/bescheid'; +import { createBescheidResource } from '../test/bescheid'; import { createCommandStateResource } from '../../../command-shared/test/command'; -import { CommandLinkRel } from '../../../command-shared/src/lib/command.linkrel'; -import { cold } from 'jest-marbles'; import { singleCold } from '../../../tech-shared/src/lib/resource/marbles'; import { BescheidResource } from './bescheid.model'; -import { createBescheidResource } from '../test/bescheid'; +import { cold } from 'jest-marbles'; describe('BescheidService', () => { let service: BescheidService; @@ -105,40 +103,75 @@ describe('BescheidService', () => { }); }); - describe('bescheiderstellungUeberspringen', () => { - let vorgang: VorgangWithEingangResource; - let getBescheidDraft: jest.Mock; + describe('bescheidLoeschenUndErstellungUeberspringen', () => { + let vorgangWithEingangResource: VorgangWithEingangResource; + let bescheidResource: BescheidResource; + let bescheidErstellungUeberspringen: jest.Mock; let deleteBescheid: jest.Mock; beforeEach(() => { - vorgang = createVorgangWithEingangResource(); - getBescheidDraft = service.getBescheidDraft = jest.fn(); + vorgangWithEingangResource = createVorgangWithEingangResource(); + bescheidResource = createBescheidResource(); + bescheidErstellungUeberspringen = service.bescheidErstellungUeberspringen = jest.fn(); deleteBescheid = service.deleteBescheid = jest.fn(); + bescheidErstellungUeberspringen.mockReturnValue(of(createCommandStateResource())); + deleteBescheid.mockReturnValue(of(createCommandStateResource())); }); - it('should get bescheid draft', (done) => { - getBescheidDraft.mockReturnValue(of(createBescheidStateResource())); - commandService.createCommand.mockReturnValue(of(createCommandStateResource())); - deleteBescheid.mockReturnValue(of(createCommandStateResource())); + it('should Bescheiderstellung überspringen', (done) => { + const command$ = service.bescheidLoeschenUndErstellungUeberspringen( + vorgangWithEingangResource, + bescheidResource, + ); - const command$ = service.bescheiderstellungUeberspringen(vorgang); + command$.subscribe(() => { + expect(bescheidErstellungUeberspringen).toHaveBeenCalledWith(vorgangWithEingangResource); + done(); + }); + }); + + it('should Bescheid löschen', (done) => { + const command$ = service.bescheidLoeschenUndErstellungUeberspringen( + vorgangWithEingangResource, + bescheidResource, + ); command$.subscribe(() => { - expect(getBescheidDraft).toHaveBeenCalled(); + expect(deleteBescheid).toHaveBeenCalledWith( + bescheidResource.id, + vorgangWithEingangResource, + ); done(); }); }); - it('should vorgang abschliessen', (done) => { - getBescheidDraft.mockReturnValue(of(createBescheidStateResource())); + it('should emit delete bescheid command', () => { + const deleteBescheidCommand = createCommandStateResource(); + deleteBescheid.mockReturnValue(of(deleteBescheidCommand)); + + const command$ = service.bescheidLoeschenUndErstellungUeberspringen( + vorgangWithEingangResource, + bescheidResource, + ); + + expect(command$).toBeObservable(cold('(a|)', { a: deleteBescheidCommand })); + }); + }); + + describe('bescheidErstellungUeberspringen', () => { + let vorgangWithEingangResource: VorgangWithEingangResource; + + beforeEach(() => { + vorgangWithEingangResource = createVorgangWithEingangResource(); commandService.createCommand.mockReturnValue(of(createCommandStateResource())); - deleteBescheid.mockReturnValue(of(createCommandStateResource())); + }); - const command$ = service.bescheiderstellungUeberspringen(vorgang); + it('should create command', (done) => { + const command$ = service.bescheidErstellungUeberspringen(vorgangWithEingangResource); command$.subscribe(() => { expect(commandService.createCommand).toHaveBeenCalledWith( - vorgang, + vorgangWithEingangResource, VorgangWithEingangLinkRel.UEBERSPRINGEN_UND_ABSCHLIESSEN, { order: CommandOrder.VORGANG_ABSCHLIESSEN, @@ -149,28 +182,13 @@ describe('BescheidService', () => { }); }); - it('should delete bescheid', (done) => { - getBescheidDraft.mockReturnValue(of(createBescheidStateResource())); - commandService.createCommand.mockReturnValue(of(createCommandStateResource())); - deleteBescheid.mockReturnValue(of(createCommandStateResource())); - - const command$ = service.bescheiderstellungUeberspringen(vorgang); - - command$.subscribe(() => { - expect(deleteBescheid).toHaveBeenCalled(); - done(); - }); - }); - it('should return command', () => { - const deleteBescheidCommand = createCommandStateResource([CommandLinkRel.EFFECTED_RESOURCE]); - getBescheidDraft.mockReturnValue(of(createBescheidStateResource())); - commandService.createCommand.mockReturnValue(of(createCommandStateResource())); - deleteBescheid.mockReturnValue(of(deleteBescheidCommand)); + const command = createCommandStateResource(); + commandService.createCommand.mockReturnValue(of(command)); - const command$ = service.bescheiderstellungUeberspringen(vorgang); + const command$ = service.bescheidErstellungUeberspringen(vorgangWithEingangResource); - expect(command$).toBeObservable(cold('(a|)', { a: deleteBescheidCommand })); + expect(command$).toBeObservable(cold('(a|)', { a: command })); }); }); diff --git a/alfa-client/libs/bescheid-shared/src/lib/bescheid.service.ts b/alfa-client/libs/bescheid-shared/src/lib/bescheid.service.ts index a0a6e9e7e1bcd48f15601849df8a183c812d00e6..8f5b54ded79a63c59a8b1b946dc83b290933227f 100644 --- a/alfa-client/libs/bescheid-shared/src/lib/bescheid.service.ts +++ b/alfa-client/libs/bescheid-shared/src/lib/bescheid.service.ts @@ -48,26 +48,25 @@ export class BescheidService { this.facade.createBescheid(vorgangWithEingang, buildCreateBescheidCommand(bescheid)); } - public bescheiderstellungUeberspringen( + public bescheidLoeschenUndErstellungUeberspringen( vorgangWithEingangResource: VorgangWithEingangResource, + bescheidResource: BescheidResource, ): Observable<StateResource<CommandResource>> { - return this.getBescheidDraft().pipe( - switchMap((bescheidStateResource) => - this.commandService - .createCommand( - vorgangWithEingangResource, - VorgangWithEingangLinkRel.UEBERSPRINGEN_UND_ABSCHLIESSEN, - { - order: CommandOrder.VORGANG_ABSCHLIESSEN, - body: null, - }, - ) - .pipe( - switchMap(() => - this.deleteBescheid(bescheidStateResource.resource.id, vorgangWithEingangResource), - ), - ), - ), + return this.bescheidErstellungUeberspringen(vorgangWithEingangResource).pipe( + switchMap(() => this.deleteBescheid(bescheidResource.id, vorgangWithEingangResource)), + ); + } + + public bescheidErstellungUeberspringen( + vorgangWithEingangResource: VorgangWithEingangResource, + ): Observable<StateResource<CommandResource>> { + return this.commandService.createCommand( + vorgangWithEingangResource, + VorgangWithEingangLinkRel.UEBERSPRINGEN_UND_ABSCHLIESSEN, + { + order: CommandOrder.VORGANG_ABSCHLIESSEN, + body: null, + }, ); } diff --git a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-steps-content/vorgang-detail-bescheiden-ueberspringen-dialog/vorgang-detail-bescheiden-ueberspringen-dialog.component.spec.ts b/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-steps-content/vorgang-detail-bescheiden-ueberspringen-dialog/vorgang-detail-bescheiden-ueberspringen-dialog.component.spec.ts index 4c10e6dd53054a691a86f3dd75cb5bc07b079c73..f7642c47dafbb2a6932f63726436869cbb9d791d 100644 --- a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-steps-content/vorgang-detail-bescheiden-ueberspringen-dialog/vorgang-detail-bescheiden-ueberspringen-dialog.component.spec.ts +++ b/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-steps-content/vorgang-detail-bescheiden-ueberspringen-dialog/vorgang-detail-bescheiden-ueberspringen-dialog.component.spec.ts @@ -5,15 +5,16 @@ import { VorgangDetailBescheidenUeberspringenDialogComponent } from './vorgang-d import { MockComponent } from 'ng-mocks'; import { OzgcloudDialogService, OzgcloudStrokedButtonWithSpinnerComponent } from '@alfa-client/ui'; import { MatIcon } from '@angular/material/icon'; -import { BescheidService } from '@alfa-client/bescheid-shared'; +import { BescheidResource, BescheidService } from '@alfa-client/bescheid-shared'; import { createVorgangWithEingangResource } from '../../../../../../../../vorgang-shared/test/vorgang'; -import { VorgangWithEingangResource } from '@alfa-client/vorgang-shared'; +import { VorgangWithEingangLinkRel, VorgangWithEingangResource } from '@alfa-client/vorgang-shared'; import { BescheiderstellungUeberspringenDailogData } from '@alfa-client/vorgang-detail'; import { createCommandStateResource } from '../../../../../../../../command-shared/test/command'; -import { lastValueFrom, of } from 'rxjs'; +import { of } from 'rxjs'; import { cold } from 'jest-marbles'; -import { createEmptyStateResource } from '@alfa-client/tech-shared'; +import { createStateResource } from '@alfa-client/tech-shared'; import { CommandLinkRel } from '../../../../../../../../command-shared/src/lib/command.linkrel'; +import { createBescheidResource } from '../../../../../../../../bescheid-shared/src/test/bescheid'; describe('VorgangDetailBescheidenUeberspringenButtonComponent', () => { let component: VorgangDetailBescheidenUeberspringenDialogComponent; @@ -77,56 +78,114 @@ describe('VorgangDetailBescheidenUeberspringenButtonComponent', () => { }); describe('onConfirm', () => { - it('should Bescheiderstellung Überspringen', async () => { - bescheidService.bescheiderstellungUeberspringen.mockReturnValue( - of(createCommandStateResource()), + it('should close all dialogs on success', (done) => { + bescheidService.bescheidErstellungUeberspringen.mockReturnValue( + of(createCommandStateResource([CommandLinkRel.EFFECTED_RESOURCE])), ); component.onConfirm(); - await lastValueFrom(component.bescheiderstellungUeberspringen$); - - expect(bescheidService.bescheiderstellungUeberspringen).toHaveBeenCalledWith( - vorgangWithEingangResource, - ); + component.bescheiderstellungUeberspringen$.subscribe(() => { + expect(ozgcloudDialogService.closeAll).toHaveBeenCalled(); + done(); + }); }); - it('should emit values', () => { - const loadingCommand = createEmptyStateResource(true); - const bescheiderstellungUeberspringenCommand = createCommandStateResource(); - bescheidService.bescheiderstellungUeberspringen.mockReturnValue( - cold('-a', { a: bescheiderstellungUeberspringenCommand }), + it('should not close all dialogs on failre', (done) => { + bescheidService.bescheidErstellungUeberspringen.mockReturnValue( + of(createCommandStateResource()), ); component.onConfirm(); - expect(component.bescheiderstellungUeberspringen$).toBeObservable( - cold('ab', { a: loadingCommand, b: bescheiderstellungUeberspringenCommand }), - ); + component.bescheiderstellungUeberspringen$.subscribe(() => { + expect(ozgcloudDialogService.closeAll).not.toHaveBeenCalled(); + done(); + }); }); - it('should close all dialogs on success', async () => { - bescheidService.bescheiderstellungUeberspringen.mockReturnValue( - of(createCommandStateResource([CommandLinkRel.EFFECTED_RESOURCE])), - ); + describe('Bescheid Draft exists', () => { + let vorgangWithEingangResource: VorgangWithEingangResource; + let bescheidResource: BescheidResource; + + beforeEach(() => { + vorgangWithEingangResource = createVorgangWithEingangResource([ + VorgangWithEingangLinkRel.BESCHEID_DRAFT, + ]); + dialogData.vorgangWithEingangResource = vorgangWithEingangResource; + bescheidResource = createBescheidResource(); + bescheidService.getBescheidDraft.mockReturnValue(of(createStateResource(bescheidResource))); + bescheidService.bescheidLoeschenUndErstellungUeberspringen.mockReturnValue( + of(createCommandStateResource()), + ); + }); + + it('should get bescheid draft', (done) => { + component.onConfirm(); + + component.bescheiderstellungUeberspringen$.subscribe(() => { + expect(bescheidService.getBescheidDraft).toHaveBeenCalled(); + done(); + }); + }); + + it('should Bescheid löschen und Erstellung überspringen', (done) => { + component.onConfirm(); + + component.bescheiderstellungUeberspringen$.subscribe(() => { + expect(bescheidService.bescheidLoeschenUndErstellungUeberspringen).toHaveBeenCalledWith( + vorgangWithEingangResource, + bescheidResource, + ); + done(); + }); + }); + + it('should return command', () => { + const command = createCommandStateResource(); + bescheidService.bescheidLoeschenUndErstellungUeberspringen.mockReturnValue(of(command)); + + component.onConfirm(); + + expect(component.bescheiderstellungUeberspringen$).toBeObservable( + cold('(a|)', { a: command }), + ); + }); + }); - component.onConfirm(); + describe('Bescheid Draft not exists', () => { + let vorgangWithEingangResource: VorgangWithEingangResource; - await lastValueFrom(component.bescheiderstellungUeberspringen$); + beforeEach(() => { + vorgangWithEingangResource = createVorgangWithEingangResource(); + dialogData.vorgangWithEingangResource = vorgangWithEingangResource; + }); - expect(ozgcloudDialogService.closeAll).toHaveBeenCalled(); - }); + it('should Bescheiderstellung überspringen', (done) => { + bescheidService.bescheidErstellungUeberspringen.mockReturnValue( + of(createCommandStateResource()), + ); - it('should not close all dialogs on failure', async () => { - bescheidService.bescheiderstellungUeberspringen.mockReturnValue( - of(createCommandStateResource()), - ); + component.onConfirm(); - component.onConfirm(); + component.bescheiderstellungUeberspringen$.subscribe(() => { + expect(bescheidService.bescheidErstellungUeberspringen).toHaveBeenCalledWith( + vorgangWithEingangResource, + ); + done(); + }); + }); + + it('should return command', () => { + const command = createCommandStateResource(); + bescheidService.bescheidErstellungUeberspringen.mockReturnValue(of(command)); - await lastValueFrom(component.bescheiderstellungUeberspringen$); + component.onConfirm(); - expect(ozgcloudDialogService.closeAll).not.toHaveBeenCalled(); + expect(component.bescheiderstellungUeberspringen$).toBeObservable( + cold('(a|)', { a: command }), + ); + }); }); }); diff --git a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-steps-content/vorgang-detail-bescheiden-ueberspringen-dialog/vorgang-detail-bescheiden-ueberspringen-dialog.component.ts b/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-steps-content/vorgang-detail-bescheiden-ueberspringen-dialog/vorgang-detail-bescheiden-ueberspringen-dialog.component.ts index 6af40f56481e52fe3a1ecfacf3ac8fabbe9765e3..d5f23cad1c8ab2ea2994110073779f3381c42c37 100644 --- a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-steps-content/vorgang-detail-bescheiden-ueberspringen-dialog/vorgang-detail-bescheiden-ueberspringen-dialog.component.ts +++ b/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-steps-content/vorgang-detail-bescheiden-ueberspringen-dialog/vorgang-detail-bescheiden-ueberspringen-dialog.component.ts @@ -2,10 +2,12 @@ import { Component, Inject } from '@angular/core'; import { DIALOG_DATA, DialogRef } from '@angular/cdk/dialog'; import { OzgcloudDialogService } from '@alfa-client/ui'; import { BescheidService } from '@alfa-client/bescheid-shared'; -import { Observable, startWith, tap } from 'rxjs'; +import { Observable, switchMap, tap } from 'rxjs'; import { CommandResource, isSuccessfulDone } from '@alfa-client/command-shared'; -import { createEmptyStateResource, StateResource } from '@alfa-client/tech-shared'; +import { StateResource } from '@alfa-client/tech-shared'; import { BescheiderstellungUeberspringenDailogData } from '@alfa-client/vorgang-detail'; +import { hasLink } from '@ngxp/rest'; +import { VorgangWithEingangLinkRel } from '@alfa-client/vorgang-shared'; @Component({ selector: 'alfa-vorgang-detail-bescheiden-ueberspringen-dialog', @@ -26,16 +28,30 @@ export class VorgangDetailBescheidenUeberspringenDialogComponent { } onConfirm() { - this.bescheiderstellungUeberspringen$ = this.bescheidService - .bescheiderstellungUeberspringen(this.dialogData.vorgangWithEingangResource) - .pipe( - startWith(createEmptyStateResource<CommandResource>(true)), - tap((command) => { - if (isSuccessfulDone(command.resource)) { - this.ozgcloudDialogService.closeAll(); - } - }), + const vorgangWithEingangResource = this.dialogData.vorgangWithEingangResource; + if (!hasLink(vorgangWithEingangResource, VorgangWithEingangLinkRel.BESCHEID_DRAFT)) { + this.bescheiderstellungUeberspringen$ = this.bescheidService.bescheidErstellungUeberspringen( + vorgangWithEingangResource, ); + } else { + this.bescheiderstellungUeberspringen$ = this.bescheidService + .getBescheidDraft() + .pipe( + switchMap((bescheidStateResource) => + this.bescheidService.bescheidLoeschenUndErstellungUeberspringen( + vorgangWithEingangResource, + bescheidStateResource.resource, + ), + ), + ); + } + this.bescheiderstellungUeberspringen$ = this.bescheiderstellungUeberspringen$.pipe( + tap((command) => { + if (isSuccessfulDone(command.resource)) { + this.ozgcloudDialogService.closeAll(); + } + }), + ); } onClose() {