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

Merge branch 'master' into OZG-2792_Suchserver_nicht_erreichbar

parents 4aa2ae13 7242f896
No related branches found
No related tags found
No related merge requests found
import { createEmptyStateResource } from '@goofy-client/tech-shared'; import { BinaryFileResource } from '@goofy-client/binary-file-shared';
import { createEmptyStateResource, createStateResource, StateResource } from '@goofy-client/tech-shared';
import { mock } from '@goofy-client/test-utils'; import { mock } from '@goofy-client/test-utils';
import { Resource } from '@ngxp/rest'; import { getUrl } from '@ngxp/rest';
import { createDummyResource } from 'libs/tech-shared/test/resource'; import { hot } from 'jest-marbles';
import { of } from 'rxjs'; import { of } from 'rxjs';
import { createApiRoot } from '../../test/api-root'; import { createBinaryFileResource } from '../../../binary-file-shared/test/binary-file';
import { ApiRoot } from './api-root.model'; import { createApiRoot, createApiRootResource } from '../../test/api-root';
import { ApiRootFacade } from './+state/api-root.facade';
import { ApiRoot, ApiRootResource } from './api-root.model';
import { ApiRootRepository } from './api-root.repository'; import { ApiRootRepository } from './api-root.repository';
import { ApiRootService } from './api-root.service'; import { ApiRootService } from './api-root.service';
...@@ -12,10 +15,15 @@ describe('ApiRootService', () => { ...@@ -12,10 +15,15 @@ describe('ApiRootService', () => {
var repository; var repository;
var service; var service;
var facade;
const apiRoot: ApiRootResource = createApiRootResource();
const apiRootStateResource: StateResource<ApiRootResource> = createStateResource(apiRoot);
beforeEach(() => { beforeEach(() => {
repository = mock(ApiRootRepository); repository = mock(ApiRootRepository);
service = new ApiRootService(repository); facade = mock(ApiRootFacade);
service = new ApiRootService(repository, facade);
}) })
describe('calling getApiRoot', () => { describe('calling getApiRoot', () => {
...@@ -73,12 +81,32 @@ describe('ApiRootService', () => { ...@@ -73,12 +81,32 @@ describe('ApiRootService', () => {
describe('getDownloadToken', () => { describe('getDownloadToken', () => {
const binaryFile: BinaryFileResource = createBinaryFileResource();
beforeEach(() => {
facade.getApiRoot.mockReturnValue(hot('-a', { a: apiRootStateResource }));
})
it('should call getApiRoot', () => {
service.getDownloadToken(binaryFile);
expect(facade.getApiRoot).toHaveBeenCalled();
})
it('should NOT call repository on null apiRoot', () => {
service.getApiRoot = jest.fn().mockReturnValue(of(createEmptyStateResource()));
service.getDownloadToken(binaryFile).subscribe();
expect(repository.downloadToken).not.toHaveBeenCalled();
})
it('should call repository', () => { it('should call repository', () => {
const resource: Resource = createDummyResource(); facade.getApiRoot.mockReturnValue(of(apiRootStateResource));
service.getDownloadToken(resource); service.getDownloadToken(binaryFile).subscribe();
expect(repository.downloadToken).toHaveBeenCalled(); expect(repository.downloadToken).toHaveBeenCalledWith(apiRoot, getUrl(binaryFile));
}); })
}); })
}) })
\ No newline at end of file
import { Injectable } from '@angular/core'; import { Injectable } from '@angular/core';
import { ApiDownloadToken, ApiRootResource } from '@goofy-client/api-root-shared'; import { createEmptyStateResource, createStateResource, doIfLoadingRequired, isNotNull, StateResource } from '@goofy-client/tech-shared';
import { createEmptyStateResource, createStateResource, doIfLoadingRequired, StateResource } from '@goofy-client/tech-shared';
import { getUrl, Resource } from '@ngxp/rest'; import { getUrl, Resource } from '@ngxp/rest';
import { BehaviorSubject, Observable } from 'rxjs'; import { BehaviorSubject, Observable } from 'rxjs';
import { filter, switchMap } from 'rxjs/operators';
import { ApiRootFacade } from './+state/api-root.facade';
import { ApiDownloadToken, ApiRootResource } from './api-root.model';
import { ApiRootRepository } from './api-root.repository'; import { ApiRootRepository } from './api-root.repository';
@Injectable() @Injectable()
...@@ -10,7 +12,7 @@ export class ApiRootService { ...@@ -10,7 +12,7 @@ export class ApiRootService {
private readonly apiRoot$: BehaviorSubject<StateResource<ApiRootResource>> = new BehaviorSubject<StateResource<ApiRootResource>>(createEmptyStateResource<ApiRootResource>()); private readonly apiRoot$: BehaviorSubject<StateResource<ApiRootResource>> = new BehaviorSubject<StateResource<ApiRootResource>>(createEmptyStateResource<ApiRootResource>());
constructor(private repository: ApiRootRepository) { } constructor(private repository: ApiRootRepository, private apiRootFacade: ApiRootFacade) { }
public getApiRoot(): Observable<StateResource<ApiRootResource>> { public getApiRoot(): Observable<StateResource<ApiRootResource>> {
doIfLoadingRequired(this.apiRoot$.value, () => this.loadApiRoot()) doIfLoadingRequired(this.apiRoot$.value, () => this.loadApiRoot())
...@@ -29,6 +31,9 @@ export class ApiRootService { ...@@ -29,6 +31,9 @@ export class ApiRootService {
//TOOD: In der Facade zur Verfuegung stellen, aufrufende Stelle anpassen und den service lib protected machen //TOOD: In der Facade zur Verfuegung stellen, aufrufende Stelle anpassen und den service lib protected machen
public getDownloadToken(resource: Resource): Observable<ApiDownloadToken> { public getDownloadToken(resource: Resource): Observable<ApiDownloadToken> {
return this.repository.downloadToken(this.apiRoot$.value.resource, getUrl(resource)); return this.apiRootFacade.getApiRoot().pipe(
filter(apiRoot => isNotNull(apiRoot.resource)),
switchMap(apiRoot => this.repository.downloadToken(apiRoot.resource, getUrl(resource)))
);
} }
} }
\ 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