From 7d0c9d2f52449442f6f9a89a9d0b9630442e1be3 Mon Sep 17 00:00:00 2001 From: OZGCloud <ozgcloud@mgm-tp.com> Date: Wed, 29 May 2024 20:24:28 +0200 Subject: [PATCH] OZG-5012 adjust resource change handling; simplify getResource function --- .../src/lib/bescheid.service.spec.ts | 26 ++++++++++++++ .../src/lib/bescheid.service.ts | 12 +++---- .../src/lib/resource/resource.service.spec.ts | 35 ++++++++++--------- .../src/lib/resource/resource.service.ts | 8 +++-- 4 files changed, 54 insertions(+), 27 deletions(-) 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 844c5769fd..66e7b66d41 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 @@ -1246,6 +1246,32 @@ describe('BescheidService', () => { }); }); + describe('get resource', () => { + const bescheidResource: BescheidResource = createBescheidResource(); + const bescheidStateResource: StateResource<BescheidResource> = + createStateResource(bescheidResource); + + it('should call bescheid draft service', () => { + service.bescheidDraftService.selectResource = jest + .fn() + .mockReturnValue(of(bescheidStateResource)); + + service.getResource(); + + expect(service.bescheidDraftService.selectResource).toHaveBeenCalled(); + }); + + it('should return value', () => { + service.bescheidDraftService.selectResource = jest + .fn() + .mockReturnValue(of(bescheidStateResource)); + + const bescheidDraft: BescheidResource = service.getResource(); + + expect(bescheidDraft).toBe(bescheidResource); + }); + }); + describe('getEmpfaenger', () => { it('should return Empfänger', () => { const vorgangWithEingangResource: VorgangWithEingangResource = 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 42b888cbfa..12e091a11c 100644 --- a/alfa-client/libs/bescheid-shared/src/lib/bescheid.service.ts +++ b/alfa-client/libs/bescheid-shared/src/lib/bescheid.service.ts @@ -480,14 +480,10 @@ export class BescheidService { */ getResource(): BescheidResource { let resource: StateResource<BescheidResource> = undefined; - const selected = this.bescheidDraftService.get().pipe( - filter((stateResource: StateResource<BescheidResource>) => !stateResource.loading), - take(1), - ); - const sub = selected.subscribe( - (stateResource: StateResource<BescheidResource>) => (resource = stateResource), - ); - sub.unsubscribe(); + this.bescheidDraftService + .selectResource() + .pipe(take(1)) + .subscribe((stateResource: StateResource<BescheidResource>) => (resource = stateResource)); return resource.resource; } diff --git a/alfa-client/libs/tech-shared/src/lib/resource/resource.service.spec.ts b/alfa-client/libs/tech-shared/src/lib/resource/resource.service.spec.ts index d61b71c6e5..1a15c29a58 100644 --- a/alfa-client/libs/tech-shared/src/lib/resource/resource.service.spec.ts +++ b/alfa-client/libs/tech-shared/src/lib/resource/resource.service.spec.ts @@ -150,20 +150,20 @@ describe('ResourceService', () => { describe('handle config resource changes', () => { const stateResource: StateResource<Resource> = createStateResource(createDummyResource()); + it('should update configresource', () => { + service.configResource = createDummyResource(); + + service.handleResourceChanges(stateResource, configResource); + + expect(service.configResource).toBe(configResource); + }); + describe('on stable stateresource', () => { beforeEach(() => { jest.spyOn(ResourceUtil, 'isStateResoureStable').mockReturnValue(true); service.updateStateResourceByConfigResource = jest.fn(); }); - it('should update configresource', () => { - service.configResource = createDummyResource(); - - service.handleResourceChanges(stateResource, configResource); - - expect(service.configResource).toBe(configResource); - }); - it('should update stateresource by configresource', () => { service.handleResourceChanges(stateResource, configResource); @@ -179,15 +179,6 @@ describe('ResourceService', () => { jest.spyOn(ResourceUtil, 'isStateResoureStable').mockReturnValue(false); }); - it('should NOT update configresource', () => { - const currentConfigResource = createDummyResource(); - service.configResource = currentConfigResource; - - service.handleResourceChanges(stateResource, configResource); - - expect(service.configResource).toBe(currentConfigResource); - }); - it('should NOT update stateresource by configresource', () => { service.updateStateResourceByConfigResource = jest.fn(); @@ -500,6 +491,16 @@ describe('ResourceService', () => { expect(existResource$).toBeObservable(singleCold(false)); }); }); + + describe('select resource', () => { + it('should return state resource', () => { + service.stateResource.next(dummyStateResource); + + const resource$: Observable<StateResource<Resource>> = service.selectResource(); + + expect(resource$).toBeObservable(singleCold(dummyStateResource)); + }); + }); }); export class DummyResourceService<B extends Resource, T extends Resource> extends ResourceService< diff --git a/alfa-client/libs/tech-shared/src/lib/resource/resource.service.ts b/alfa-client/libs/tech-shared/src/lib/resource/resource.service.ts index 8a05ace866..a69b290c80 100644 --- a/alfa-client/libs/tech-shared/src/lib/resource/resource.service.ts +++ b/alfa-client/libs/tech-shared/src/lib/resource/resource.service.ts @@ -39,7 +39,7 @@ export abstract class ResourceService<B extends Resource, T extends Resource> { createEmptyStateResource(), ); - configResource: B; + configResource: B = null; constructor( protected config: ResourceServiceConfig<B>, @@ -78,8 +78,8 @@ export abstract class ResourceService<B extends Resource, T extends Resource> { } handleConfigResourceChanges(stateResource: StateResource<T>, configResource: B) { + this.configResource = configResource; if (isStateResoureStable(stateResource)) { - this.configResource = configResource; this.updateStateResourceByConfigResource(stateResource, configResource); } } @@ -168,4 +168,8 @@ export abstract class ResourceService<B extends Resource, T extends Resource> { public existResource(): Observable<boolean> { return this.stateResource.asObservable().pipe(mapToResource<T>(), map(isNotNull)); } + + public selectResource(): Observable<StateResource<T>> { + return this.stateResource.asObservable(); + } } -- GitLab