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 { Resource } from '@ngxp/rest';
import { createDummyResource } from 'libs/tech-shared/test/resource';
import { getUrl } from '@ngxp/rest';
import { hot } from 'jest-marbles';
import { of } from 'rxjs';
import { createApiRoot } from '../../test/api-root';
import { ApiRoot } from './api-root.model';
import { createBinaryFileResource } from '../../../binary-file-shared/test/binary-file';
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 { ApiRootService } from './api-root.service';
......@@ -12,10 +15,15 @@ describe('ApiRootService', () => {
var repository;
var service;
var facade;
const apiRoot: ApiRootResource = createApiRootResource();
const apiRootStateResource: StateResource<ApiRootResource> = createStateResource(apiRoot);
beforeEach(() => {
repository = mock(ApiRootRepository);
service = new ApiRootService(repository);
facade = mock(ApiRootFacade);
service = new ApiRootService(repository, facade);
})
describe('calling getApiRoot', () => {
......@@ -73,12 +81,32 @@ describe('ApiRootService', () => {
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', () => {
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 { ApiDownloadToken, ApiRootResource } from '@goofy-client/api-root-shared';
import { createEmptyStateResource, createStateResource, doIfLoadingRequired, StateResource } from '@goofy-client/tech-shared';
import { createEmptyStateResource, createStateResource, doIfLoadingRequired, isNotNull, StateResource } from '@goofy-client/tech-shared';
import { getUrl, Resource } from '@ngxp/rest';
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';
@Injectable()
......@@ -10,7 +12,7 @@ export class ApiRootService {
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>> {
doIfLoadingRequired(this.apiRoot$.value, () => this.loadApiRoot())
......@@ -29,6 +31,9 @@ export class ApiRootService {
//TOOD: In der Facade zur Verfuegung stellen, aufrufende Stelle anpassen und den service lib protected machen
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