Skip to content
Snippets Groups Projects
Commit 4a9611c7 authored by OZGCloud's avatar OZGCloud
Browse files

OZG-5151 move logic to bescheid.service

parent 3315ef4e
Branches
Tags
No related merge requests found
......@@ -17,6 +17,10 @@ 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 { createCommandStateResource } from '../../../command-shared/test/command';
import { CommandLinkRel } from '../../../command-shared/src/lib/command.linkrel';
import { cold } from 'jest-marbles';
describe('BescheidService', () => {
let service: BescheidService;
......@@ -74,14 +78,36 @@ describe('BescheidService', () => {
describe('bescheiderstellungUeberspringen', () => {
let vorgang: VorgangWithEingangResource;
let getBescheidDraft: jest.Mock;
let deleteBescheid: jest.Mock;
beforeEach(() => {
vorgang = createVorgangWithEingangResource();
getBescheidDraft = service.getBescheidDraft = jest.fn();
deleteBescheid = service.deleteBescheid = jest.fn();
});
it('should create command', () => {
service.bescheiderstellungUeberspringen(vorgang);
it('should get bescheid draft', (done) => {
getBescheidDraft.mockReturnValue(of(createBescheidStateResource()));
commandService.createCommand.mockReturnValue(of(createCommandStateResource()));
deleteBescheid.mockReturnValue(of(createCommandStateResource()));
const command$ = service.bescheiderstellungUeberspringen(vorgang);
command$.subscribe(() => {
expect(getBescheidDraft).toHaveBeenCalled();
done();
});
});
it('should vorgang abschliessen', (done) => {
getBescheidDraft.mockReturnValue(of(createBescheidStateResource()));
commandService.createCommand.mockReturnValue(of(createCommandStateResource()));
deleteBescheid.mockReturnValue(of(createCommandStateResource()));
const command$ = service.bescheiderstellungUeberspringen(vorgang);
command$.subscribe(() => {
expect(commandService.createCommand).toHaveBeenCalledWith(
vorgang,
VorgangWithEingangLinkRel.UEBERSPRINGEN_UND_ABSCHLIESSEN,
......@@ -90,15 +116,32 @@ describe('BescheidService', () => {
body: null,
} as CreateCommand,
);
done();
});
});
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 command = createEmptyStateResource();
commandService.createCommand.mockReturnValue(command);
const deleteBescheidCommand = createCommandStateResource([CommandLinkRel.EFFECTED_RESOURCE]);
getBescheidDraft.mockReturnValue(of(createBescheidStateResource()));
commandService.createCommand.mockReturnValue(of(createCommandStateResource()));
deleteBescheid.mockReturnValue(of(deleteBescheidCommand));
const createdCommand = service.bescheiderstellungUeberspringen(vorgang);
const command$ = service.bescheiderstellungUeberspringen(vorgang);
expect(createdCommand).toEqual(command);
expect(command$).toBeObservable(cold('(a|)', { a: deleteBescheidCommand }));
});
});
......
......@@ -6,7 +6,7 @@ import {
VorgangWithEingangResource,
} from '@alfa-client/vorgang-shared';
import { Injectable } from '@angular/core';
import { Observable, of } from 'rxjs';
import { Observable, of, switchMap } from 'rxjs';
import { ResourceServiceConfig } from '../../../tech-shared/src/lib/resource/resource.model';
import { ResourceRepository } from '../../../tech-shared/src/lib/resource/resource.repository';
import { ResourceService } from '../../../tech-shared/src/lib/resource/resource.service';
......@@ -63,13 +63,23 @@ export class BescheidService {
public bescheiderstellungUeberspringen(
vorgangWithEingangResource: VorgangWithEingangResource,
): Observable<StateResource<CommandResource>> {
return this.commandService.createCommand(
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),
),
),
),
);
}
......
......@@ -8,14 +8,12 @@ import { MatIcon } from '@angular/material/icon';
import { BescheidService } from '@alfa-client/bescheid-shared';
import { createVorgangWithEingangResource } from '../../../../../../../../vorgang-shared/test/vorgang';
import { VorgangWithEingangResource } from '@alfa-client/vorgang-shared';
import { createEmptyStateResource, StateResource } from '@alfa-client/tech-shared';
import { BescheiderstellungUeberspringenDailogData } from '@alfa-client/vorgang-detail';
import { createCommandStateResource } from '../../../../../../../../command-shared/test/command';
import { lastValueFrom, of } from 'rxjs';
import { BescheiderstellungUeberspringenDailogData } from '@alfa-client/vorgang-detail';
import { cold } from 'jest-marbles';
import { createBescheidStateResource } from '../../../../../../../../bescheid-shared/src/test/bescheid';
import { createEmptyStateResource } from '@alfa-client/tech-shared';
import { CommandLinkRel } from '../../../../../../../../command-shared/src/lib/command.linkrel';
import { CommandResource } from '@alfa-client/command-shared';
describe('VorgangDetailBescheidenUeberspringenButtonComponent', () => {
let component: VorgangDetailBescheidenUeberspringenDialogComponent;
......@@ -79,98 +77,57 @@ describe('VorgangDetailBescheidenUeberspringenButtonComponent', () => {
});
describe('onConfirm', () => {
it('should get bescheid draft', async () => {
const lastValue = givenSuccessfullyLoadedResources();
when();
await lastValueToEmit(lastValue);
expect(bescheidService.getBescheidDraft).toHaveBeenCalled();
});
it('should überspringen Bescheiderstellung', async () => {
const lastValue = givenSuccessfullyLoadedResources();
when();
await lastValueToEmit(lastValue);
expect(bescheidService.bescheiderstellungUeberspringen).toHaveBeenCalled();
});
it('should Bescheiderstellung Überspringen', async () => {
bescheidService.bescheiderstellungUeberspringen.mockReturnValue(
of(createCommandStateResource()),
);
it('should delete Bescheid', async () => {
const lastValue = givenSuccessfullyLoadedResources();
component.onConfirm();
when();
await lastValueFrom(component.bescheiderstellungUeberspringen$);
await lastValueToEmit(lastValue);
expect(bescheidService.deleteBescheid).toHaveBeenCalled();
expect(bescheidService.bescheiderstellungUeberspringen).toHaveBeenCalledWith(
vorgangWithEingangResource,
);
});
it('should emit commands', () => {
const ueberspringenCommandStateResource = createCommandStateResource();
const deleteCommandStateResource = createCommandStateResource();
bescheidService.getBescheidDraft.mockReturnValue(
cold('a', { a: createBescheidStateResource() }),
);
it('should emit values', () => {
const loadingCommand = createEmptyStateResource(true);
const bescheiderstellungUeberspringenCommand = createCommandStateResource();
bescheidService.bescheiderstellungUeberspringen.mockReturnValue(
cold('a', { a: ueberspringenCommandStateResource }),
cold('-a', { a: bescheiderstellungUeberspringenCommand }),
);
bescheidService.deleteBescheid.mockReturnValue(cold('-a', { a: deleteCommandStateResource }));
when();
component.onConfirm();
expect(component.bescheiderstellungUeberspringen$).toBeObservable(
cold('ab', {
a: createEmptyStateResource(true),
b: deleteCommandStateResource,
}),
cold('ab', { a: loadingCommand, b: bescheiderstellungUeberspringenCommand }),
);
});
it('should close all dialogs on success', async () => {
const lastValue = givenSuccessfullyLoadedResources();
when();
await lastValueToEmit(lastValue);
expect(ozgcloudDialogService.closeAll).toHaveBeenCalled();
});
it('should not close all dialogs on get bescheid draft failure', async () => {
bescheidService.getBescheidDraft.mockReturnValue(of(createBescheidStateResource()));
bescheidService.bescheiderstellungUeberspringen.mockReturnValue(
of(createCommandStateResource([CommandLinkRel.EFFECTED_RESOURCE])),
);
const lastValue = createCommandStateResource();
bescheidService.deleteBescheid.mockReturnValue(of(lastValue));
when();
component.onConfirm();
await expect(lastValueFrom(component.bescheiderstellungUeberspringen$)).resolves.toEqual(
lastValue,
);
expect(ozgcloudDialogService.closeAll).not.toHaveBeenCalled();
await lastValueFrom(component.bescheiderstellungUeberspringen$);
expect(ozgcloudDialogService.closeAll).toHaveBeenCalled();
});
function givenSuccessfullyLoadedResources(): StateResource<CommandResource> {
bescheidService.getBescheidDraft.mockReturnValue(of(createBescheidStateResource()));
it('should not close all dialogs on failure', async () => {
bescheidService.bescheiderstellungUeberspringen.mockReturnValue(
of(createCommandStateResource([CommandLinkRel.EFFECTED_RESOURCE])),
of(createCommandStateResource()),
);
const lastValue = createCommandStateResource([CommandLinkRel.EFFECTED_RESOURCE]);
bescheidService.deleteBescheid.mockReturnValue(of(lastValue));
return lastValue;
}
function when(): void {
component.onConfirm();
}
async function lastValueToEmit(lastValue: StateResource<CommandResource>) {
await expect(lastValueFrom(component.bescheiderstellungUeberspringen$)).resolves.toEqual(
lastValue,
);
}
await lastValueFrom(component.bescheiderstellungUeberspringen$);
expect(ozgcloudDialogService.closeAll).not.toHaveBeenCalled();
});
});
describe('onClose', () => {
......
......@@ -2,7 +2,7 @@ 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, switchMap, tap } from 'rxjs';
import { Observable, startWith, tap } from 'rxjs';
import { CommandResource, isSuccessfulDone } from '@alfa-client/command-shared';
import { createEmptyStateResource, StateResource } from '@alfa-client/tech-shared';
import { BescheiderstellungUeberspringenDailogData } from '@alfa-client/vorgang-detail';
......@@ -26,28 +26,15 @@ export class VorgangDetailBescheidenUeberspringenDialogComponent {
}
onConfirm() {
this.bescheiderstellungUeberspringen$ = this.bescheidService.getBescheidDraft().pipe(
switchMap((bescheidStateResource) =>
this.bescheidService
this.bescheiderstellungUeberspringen$ = this.bescheidService
.bescheiderstellungUeberspringen(this.dialogData.vorgangWithEingangResource)
.pipe(
switchMap(() =>
this.bescheidService
.deleteBescheid(
bescheidStateResource.resource.id,
this.dialogData.vorgangWithEingangResource,
)
.pipe(
startWith(createEmptyStateResource<CommandResource>(true)),
tap((command) => {
if (isSuccessfulDone(command.resource)) {
this.ozgcloudDialogService.closeAll();
}
}),
),
),
),
),
startWith(createEmptyStateResource<CommandResource>(true)),
);
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment