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 daa0e9c48412323f1754c1c25825712304e2c988..9ce1e5f2ab726f6fb574fd43ff6fe02783d5780e 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 @@ -41,22 +41,32 @@ import { singleCold, singleColdCompleted } from '../../../tech-shared/test/marbl import { createBescheid, createBescheidDocument, createBescheidListResource, createBescheidResource } from '../test/bescheid'; import { createDocumentResource } from '../test/document'; import { BescheidFacade } from './+state/bescheid.facade'; -import { BescheidResourceService } from './bescheid-resource-service'; import { BescheidLinkRel } from './bescheid.linkrel'; import { Bescheid, BESCHEID_UPLOADED_ATTACHMENTS, BescheidDocument, BescheidListResource, BescheidResource, BescheidStatus, BescheidWizardStep, createEmptyBescheidDocument, createEmptyUploadInProgress, createInitialWizard, } from './bescheid.model'; import { BescheidService } from './bescheid.service'; import { DocumentLinkRel } from './document.linkrel'; import { DocumentResource } from './document.model'; +import { BescheidListResourceService, BescheidResourceService, buildCreateBescheidDocumentFromFileProps, buildUpdateBescheidCommandProps, createBescheidListResourceService, createBescheidResourceService, } from '@alfa-client/bescheid-shared'; import { expect } from '@jest/globals'; import { cold } from 'jest-marbles'; import * as DateUtil from '../../../tech-shared/src/lib/date.util'; -import { BescheidListResourceService } from './bescheid-list-resource-service'; -import * as BescheidUtil from './bescheid.util'; + +jest.mock('@alfa-client/bescheid-shared', () => { + const originalModule = jest.requireActual('@alfa-client/bescheid-shared'); + + return { + __esModule: true, + ...originalModule, + createBescheidResourceService: jest.fn(), + createBescheidListResourceService: jest.fn(), + buildUpdateBescheidCommandProps: jest.fn(), + buildCreateBescheidDocumentFromFileProps: jest.fn(), + }; +}); describe('BescheidService', () => { let service: BescheidService; - let facade: Mock<BescheidFacade>; let vorgangService: Mock<VorgangService>; let resourceRepository: Mock<ResourceRepository>; @@ -84,6 +94,8 @@ describe('BescheidService', () => { postfachService = mock(PostfachService); bescheidResourceService = mock(CommandResourceService); bescheidListResourceService = mock(ResourceListService); + (createBescheidResourceService as jest.Mock).mockReturnValue(bescheidResourceService); + (createBescheidListResourceService as jest.Mock).mockReturnValue(bescheidListResourceService); TestBed.configureTestingModule({ providers: [ @@ -97,8 +109,6 @@ describe('BescheidService', () => { provide: PostfachService, useValue: postfachService, }, - { provide: BescheidResourceService, useValue: bescheidResourceService }, - { provide: BescheidListResourceService, useValue: bescheidListResourceService }, BescheidService, ], }); @@ -534,14 +544,12 @@ describe('BescheidService', () => { const binaryFile: BinaryFileResource = createBinaryFileResource(); const createCommandProps: CreateCommandProps = createCreateCommandProps(); - let buildCreateBescheidDocumentFromFilePropsSpy; + let buildCreateBescheidDocumentFromFilePropsMock = buildCreateBescheidDocumentFromFileProps as jest.Mock; const commandStateResource: StateResource<CommandResource> = createCommandStateResource(); beforeEach(() => { - buildCreateBescheidDocumentFromFilePropsSpy = jest - .spyOn(BescheidUtil, 'buildCreateBescheidDocumentFromFileProps') - .mockReturnValue(createCommandProps); + buildCreateBescheidDocumentFromFilePropsMock.mockReturnValue(createCommandProps); commandService.createCommandByProps.mockReturnValue(of(commandStateResource)); }); @@ -554,7 +562,7 @@ describe('BescheidService', () => { it('should build create command document from file props', () => { service.createBescheidDocumentFromFile(bescheid, binaryFile); - expect(buildCreateBescheidDocumentFromFilePropsSpy).toHaveBeenCalledWith(bescheid, binaryFile); + expect(buildCreateBescheidDocumentFromFilePropsMock).toHaveBeenCalledWith(bescheid, binaryFile); }); it('should call handle create bescheid document from file response', () => { @@ -697,12 +705,10 @@ describe('BescheidService', () => { const bescheidResource: BescheidResource = createBescheidResource(); const createCommandProps: CreateCommandProps = createCreateCommandProps(); - let buildUpdateBescheidCommandPropsSpy: jest.SpyInstance; + let buildUpdateBescheidCommandPropsMock: jest.Mock = buildUpdateBescheidCommandProps as jest.Mock; beforeEach(() => { - buildUpdateBescheidCommandPropsSpy = jest - .spyOn(BescheidUtil, 'buildUpdateBescheidCommandProps') - .mockReturnValue(createCommandProps); + buildUpdateBescheidCommandPropsMock.mockReturnValue(createCommandProps); commandService.createCommandByProps.mockClear(); commandService.createCommandByProps.mockReturnValue(of(createCommandStateResource())); }); @@ -710,7 +716,7 @@ describe('BescheidService', () => { it('should build update bescheid command props', () => { service.doUpdateBescheid(bescheidResource, bescheid); - expect(buildUpdateBescheidCommandPropsSpy).toHaveBeenCalledWith(bescheidResource, bescheid); + expect(buildUpdateBescheidCommandPropsMock).toHaveBeenCalledWith(bescheidResource, bescheid); }); it('should call command service', () => { 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 5f58ef9c22fcb2c80dfde2209ebfa13f785e86de..ec6a90a43ad27dd898eda39b580ddeb4f0d287be 100644 --- a/alfa-client/libs/bescheid-shared/src/lib/bescheid.service.ts +++ b/alfa-client/libs/bescheid-shared/src/lib/bescheid.service.ts @@ -36,6 +36,8 @@ import { buildCreateBescheidDocumentFromFileProps, buildSendBescheidCommandProps, buildUpdateBescheidCommandProps, + createBescheidListResourceService, + createBescheidResourceService, createEmptyBescheidDocument, createEmptyUploadInProgress, createInitialWizard, @@ -46,17 +48,15 @@ import { BinaryFileListLinkRel, BinaryFileListResource, BinaryFileResource, Bina import { CommandOrder, CommandResource, CommandService, getEffectedResourceUrl, notHasCommandError, tapOnCommandSuccessfullyDone, } from '@alfa-client/command-shared'; import { PostfachService } from '@alfa-client/postfach-shared'; import { createEmptyStateResource, createStateResource, filterIsLoadedOrHasError, getEmbeddedResources, hasStateResourceError, isLoaded, isNotEmpty, isNotNil, ResourceRepository, sortByGermanDateStr, StateResource, } from '@alfa-client/tech-shared'; -import { VorgangCommandService, VorgangWithEingangResource } from '@alfa-client/vorgang-shared'; +import { VorgangCommandService, VorgangService, VorgangWithEingangResource } from '@alfa-client/vorgang-shared'; import { inject, Injectable } from '@angular/core'; import { getUrl, hasLink, LinkRel, Resource, ResourceUri } from '@ngxp/rest'; import { isNil } from 'lodash-es'; import { BehaviorSubject, filter, first, map, Observable, startWith, switchMap } from 'rxjs'; import { BescheidFacade } from './+state/bescheid.facade'; -import { BescheidListResourceService } from './bescheid-list-resource-service'; -import { BescheidResourceService } from './bescheid-resource-service'; import { DocumentLinkRel } from './document.linkrel'; -@Injectable() +@Injectable({ providedIn: 'root' }) export class BescheidService { private readonly bescheidFacade = inject(BescheidFacade); private readonly commandService = inject(CommandService); @@ -64,8 +64,15 @@ export class BescheidService { private readonly binaryFileService = inject(BinaryFileService); private readonly resourceRepository = inject(ResourceRepository); private readonly postfachService = inject(PostfachService); - private readonly bescheidResourceService = inject(BescheidResourceService); - private readonly bescheidListResourceService = inject(BescheidListResourceService); + private readonly vorgangSvc = inject(VorgangService); + // The injection of this service and the one below is problematic. + // It must be analysed how to inject BescheidService via providers in BescheidSharedModule. + private readonly bescheidResourceService = createBescheidResourceService( + this.resourceRepository, + this.commandService, + this.vorgangSvc, + ); + private readonly bescheidListResourceService = createBescheidListResourceService(this.resourceRepository, this.vorgangSvc); readonly _bescheidDocument$: BehaviorSubject<BescheidDocument> = new BehaviorSubject(createEmptyBescheidDocument()); readonly _wizard$: BehaviorSubject<Wizard> = new BehaviorSubject(createInitialWizard());