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

OZG-157 OZG-252

parent e0abd743
Branches
Tags
No related merge requests found
import { Component, OnInit } from '@angular/core';
import { CommandService } from '@goofy-client/command-shared';
import { createEmptyStateResource, StateResource } from '@goofy-client/tech-shared';
import { VorgangCommandMessages, VorgangMitEingangLinkRel, VorgangMitEingangResource, VorgangService } from '@goofy-client/vorgang-shared';
import { VorgangMitEingangLinkRel, VorgangMitEingangResource, VorgangService } from '@goofy-client/vorgang-shared';
import { hasLink } from '@ngxp/rest';
import { CommandLinkRel } from 'libs/command-shared/src/lib/command.linkrel';
import { CommandResource } from 'libs/command-shared/src/lib/command.model';
......@@ -22,8 +21,7 @@ export class VorgangDetailPageComponent implements OnInit {
subscriptions: Subscription = new Subscription();
constructor(
private vorgangService: VorgangService,
private commandService: CommandService
private vorgangService: VorgangService
) { }
ngOnInit(): void {
......@@ -31,10 +29,9 @@ export class VorgangDetailPageComponent implements OnInit {
}
annehmen(vorgangMitEingang: VorgangMitEingangResource): void {
this.subscriptions.add(this.commandService.createCommand(vorgangMitEingang, VorgangMitEingangLinkRel.ANNEHMEN, VorgangCommandMessages.VORGANG_ANNEHMEN).subscribe(updatedCommandStateResource => {
this.subscriptions.add(this.vorgangService.vorgangAnnehmen(vorgangMitEingang).subscribe(updatedCommandStateResource => {
this.commandStateResource = updatedCommandStateResource;
if (hasLink(updatedCommandStateResource.resource, CommandLinkRel.SUBJECT)) {
this.vorgangStateResource$ = this.vorgangService.getVorgangMitEingang();
this.subscriptions.unsubscribe();
}
}))
......
......@@ -4,8 +4,6 @@ import { ResourceFactory } from '@ngxp/rest';
import { Observable } from 'rxjs/internal/Observable';
import { VorgangListLinkRel } from './vorgang.linkrels';
import { VorgangListResource, VorgangMitEingangResource } from './vorgang.model';
import { concatMap, delay } from 'rxjs/operators';
import { of } from 'rxjs';
@Injectable()
export class VorgangRepository {
......
import { ApiRootResource } from '@goofy-client/api-root-shared';
import { CommandService } from '@goofy-client/command-shared';
import { createEmptyStateResource, createStateResource, NavigationService } from '@goofy-client/tech-shared';
import { Mock, mock, useFromMock } from '@goofy-client/test-utils';
import { getEmbeddedResource, getUrl } from '@ngxp/rest';
import { cold, hot } from 'jest-marbles';
import { ApiRootService } from 'libs/api-root-shared/src/lib/api-root.service';
import { createApiRootResource } from 'libs/api-root-shared/test/api-root';
import { CommandLinkRel } from 'libs/command-shared/src/lib/command.linkrel';
import { CommandResource } from 'libs/command-shared/src/lib/command.model';
import { createCommandResource } from 'libs/command-shared/test/command';
import { createVorgangListResource, createVorgangMitEingangResource, createVorgangResource } from 'libs/vorgang-shared/test/vorgang';
import { BehaviorSubject, of } from 'rxjs';
import { VorgangListLinkRel } from './vorgang.linkrels';
import { VorgangListResource, VorgangResource } from './vorgang.model';
import { of } from 'rxjs';
import { VorgangCommandMessages } from '..';
import { VorgangListLinkRel, VorgangMitEingangLinkRel } from './vorgang.linkrels';
import { VorgangListResource, VorgangMitEingangResource, VorgangResource } from './vorgang.model';
import { VorgangRepository } from './vorgang.repository';
import { VorgangService } from './vorgang.service';
......@@ -17,6 +22,7 @@ describe('VorgangService', () => {
let navigationService: Mock<NavigationService>;
let repository: Mock<VorgangRepository>;
let apiRootService: Mock<ApiRootService>;
let commandService: Mock<CommandService>;
const vorgangListResource: VorgangListResource = createVorgangListResource();
const vorgaengeOfVorgangList: VorgangResource[] = getEmbeddedResource(vorgangListResource, VorgangListLinkRel.VORGANG_HEADER_LIST);
......@@ -25,7 +31,8 @@ describe('VorgangService', () => {
repository = mock(VorgangRepository);
apiRootService = mock(ApiRootService);
navigationService = mock(NavigationService);
service = new VorgangService(useFromMock(apiRootService), useFromMock(repository), useFromMock(navigationService));
commandService = mock(CommandService);
service = new VorgangService(useFromMock(apiRootService), useFromMock(repository), useFromMock(navigationService), useFromMock(commandService));
})
describe('getCurrentVorgangList', () => {
......@@ -276,4 +283,28 @@ describe('VorgangService', () => {
expect((<any>service).vorgaenge$.value).toEqual(expectedVorgaenge);
})
})
describe('vorgangAnnehmen', () => {
const commandResource: CommandResource = createCommandResource();
const commandResourceWithSubjectLink: CommandResource = createCommandResource([CommandLinkRel.SUBJECT]);
const vorgangMitEingangResource: VorgangMitEingangResource = createVorgangMitEingangResource();
beforeEach(() => {
commandService.createCommand.mockReturnValue(cold('a', { a: commandResource }));
repository.getVorgang.mockReturnValue(cold('a', { a: createVorgangMitEingangResource() }));
})
it('should call commandService', () => {
service.vorgangAnnehmen(vorgangMitEingangResource);
expect(commandService.createCommand).toHaveBeenCalledWith(vorgangMitEingangResource, VorgangMitEingangLinkRel.ANNEHMEN, VorgangCommandMessages.VORGANG_ANNEHMEN);
})
it('should reload vorgang with given uri', () => {
service.reloadVorgang(commandResourceWithSubjectLink);
expect(repository.getVorgang).toHaveBeenCalledWith(getUrl(commandResourceWithSubjectLink, CommandLinkRel.SUBJECT));
})
})
})
import { Injectable } from '@angular/core';
import { UrlSegment } from '@angular/router';
import { ApiRootResource } from '@goofy-client/api-root-shared';
import { CommandService } from '@goofy-client/command-shared';
import { createEmptyStateResource, createStateResource, doIfLoadingRequired, NavigationService, StateResource } from '@goofy-client/tech-shared';
import { getEmbeddedResource, hasLink } from '@ngxp/rest';
import { getEmbeddedResource, getUrl, hasLink, ResourceUri } from '@ngxp/rest';
import { ApiRootService } from 'libs/api-root-shared/src/lib/api-root.service';
import { CommandLinkRel } from 'libs/command-shared/src/lib/command.linkrel';
import { CommandResource } from 'libs/command-shared/src/lib/command.model';
import { isNil } from 'lodash-es';
import { BehaviorSubject, Observable, Subscription } from 'rxjs';
import { filter, first, flatMap } from 'rxjs/operators';
import { VorgangListLinkRel } from './vorgang.linkrels';
import { filter, first, flatMap, tap } from 'rxjs/operators';
import { VorgangCommandMessages } from './vorgang.command.messages';
import { VorgangListLinkRel, VorgangMitEingangLinkRel } from './vorgang.linkrels';
import { VorgangListResource, VorgangMitEingangResource, VorgangResource } from './vorgang.model';
import { VorgangRepository } from './vorgang.repository';
......@@ -24,7 +28,8 @@ export class VorgangService {
constructor(
private apiRootService: ApiRootService,
private vorgangRepository: VorgangRepository,
private navigationService: NavigationService
private navigationService: NavigationService,
private commandService: CommandService
) { }
ngOnDestroy(): void {
......@@ -35,15 +40,11 @@ export class VorgangService {
return this.loadVorgangMitEingang(this.getVorgangMitEingangUrl())
}
private getVorgangMitEingangUrl(): string {
return this.navigationService.getDecodedUrlParameter('vorgangMitEingangUrl')
}
private loadVorgangMitEingang(vorgangMitEingangUrl: string): Observable<StateResource<VorgangMitEingangResource>> {
private loadVorgangMitEingang(vorgangMitEingangUrl: ResourceUri): Observable<StateResource<VorgangMitEingangResource>> {
if (vorgangMitEingangUrl) {
doIfLoadingRequired(this.vorgangMitEingang$.value, () => {
this.vorgangMitEingang$.next({ ...this.vorgangMitEingang$.value, loading: true });
this.vorgangRepository.getVorgang(vorgangMitEingangUrl).pipe(first())
this.vorgangRepository.getVorgang(vorgangMitEingangUrl).pipe()
.subscribe(vorgang => {
this.vorgangMitEingang$.next(createStateResource(vorgang));
this.listenForLeavingVorgang();
......@@ -53,6 +54,10 @@ export class VorgangService {
return this.vorgangMitEingang$;
}
private getVorgangMitEingangUrl(): ResourceUri {
return this.navigationService.getDecodedUrlParameter('vorgangMitEingangUrl')
}
private listenForLeavingVorgang(): void {
this.unsubscribe();
this.subscription = this.navigationService.getUrl().subscribe(urlSegements => this.clearStateOnNavigation(urlSegements));
......@@ -146,4 +151,17 @@ export class VorgangService {
private updateVorgaenge(vorgaenge: VorgangResource[]): void {
this.vorgaenge$.next(vorgaenge);
}
public vorgangAnnehmen(vorgangMitEingang: VorgangMitEingangResource): Observable<StateResource<CommandResource>> {
return this.commandService.createCommand(vorgangMitEingang, VorgangMitEingangLinkRel.ANNEHMEN, VorgangCommandMessages.VORGANG_ANNEHMEN).pipe(
tap(updatedCommandStateResource => {
if (hasLink(updatedCommandStateResource.resource, CommandLinkRel.SUBJECT)) this.reloadVorgang(updatedCommandStateResource.resource)
})
)
}
reloadVorgang(commandResource: CommandResource) {
this.vorgangMitEingang$.next({ ...this.vorgangMitEingang$.value, reload: true })
this.loadVorgangMitEingang(getUrl(commandResource, CommandLinkRel.SUBJECT));
}
}
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment