diff --git a/goofy-client/libs/tech-shared/test/error.ts b/goofy-client/libs/tech-shared/test/error.ts index 3795d07a448f018b1b040ca2aca68efd05ed242a..216da5aa424236a75f97aa28756b2562c4d39d8f 100644 --- a/goofy-client/libs/tech-shared/test/error.ts +++ b/goofy-client/libs/tech-shared/test/error.ts @@ -30,8 +30,7 @@ export function createError(): unknown { } export function createHttpErrorResponse(apiError: ApiError = null): HttpErrorResponse { - return { - ...<HttpErrorResponse>{}, + return <HttpErrorResponse>{ error: { error: apiError ?? createApiError() } diff --git a/goofy-client/libs/vorgang-shared/src/lib/+state/vorgang.effects.spec.ts b/goofy-client/libs/vorgang-shared/src/lib/+state/vorgang.effects.spec.ts index 8f1d170902a1bd2fcb8afa5c464e9153902c0aab..fde4f3688ad7abdcbd16bb69cb577a3d55bb3a01 100644 --- a/goofy-client/libs/vorgang-shared/src/lib/+state/vorgang.effects.spec.ts +++ b/goofy-client/libs/vorgang-shared/src/lib/+state/vorgang.effects.spec.ts @@ -1,4 +1,4 @@ -import { HttpErrorResponse } from '@angular/common/http'; +import { HttpErrorResponse, HttpStatusCode } from '@angular/common/http'; import { TestBed } from '@angular/core/testing'; import { ApiRootFacade, ApiRootLinkRel, ApiRootResource } from '@goofy-client/api-root-shared'; import { NavigationFacade } from '@goofy-client/navigation-shared'; @@ -274,4 +274,34 @@ describe('VorgangEffects', () => { expect(effects.searchForPreview$).toBeObservable(expected); }) }) + + describe('search error', () => { + const action = VorgangActions.searchForPreviewFailure({ httpErrorResponse: null }); + const error: HttpErrorResponse = createHttpErrorResponse(); + + it('should trigger showSearchError$', () => { + actions = of(action); + effects.showSearchError = jest.fn(); + + effects.showSearchError$.subscribe(); + + expect(effects.showSearchError).toHaveBeenCalled(); + }) + + it('should call snackbarService.showError if HTTP status code is NOT 503 ', () => { + error.error.status = HttpStatusCode.ExpectationFailed; + + effects.showSearchError(error); + + expect(snackbarService.showError).not.toHaveBeenCalled(); + }) + + it('should call snackbarService.showError if HTTP status code is 503 ', () => { + error.error.status = HttpStatusCode.ServiceUnavailable; + + effects.showSearchError(error); + + expect(snackbarService.showError).toHaveBeenCalled(); + }) + }) }); \ No newline at end of file diff --git a/goofy-client/libs/vorgang-shared/src/lib/+state/vorgang.effects.ts b/goofy-client/libs/vorgang-shared/src/lib/+state/vorgang.effects.ts index afd330953b7a2558d2b3801c2d92d9a23632fd30..ca2f9eff00a5d448e85d42cd9a71bf5789e022c7 100644 --- a/goofy-client/libs/vorgang-shared/src/lib/+state/vorgang.effects.ts +++ b/goofy-client/libs/vorgang-shared/src/lib/+state/vorgang.effects.ts @@ -12,7 +12,7 @@ import { getSearchLinkRel } from '../vorgang-navigation.util'; import { VorgangMessages } from '../vorgang.messages'; import { VorgangRepository } from '../vorgang.repository'; import * as VorgangActions from './vorgang.actions'; -import { ApiRootAction, SearchVorgaengeByProps } from './vorgang.actions'; +import { ApiRootAction, HttpErrorAction, SearchVorgaengeByProps } from './vorgang.actions'; import * as VorgangSelectors from './vorgang.selectors'; @Injectable() @@ -84,11 +84,11 @@ export class VorgangEffects { VorgangActions.searchForPreviewFailure, VorgangActions.searchVorgaengeByFailure ), - map(({ httpErrorResponse }) => this.showSearchError(httpErrorResponse)), + map((action: HttpErrorAction) => this.showSearchError(action.httpErrorResponse)), ), { dispatch: false } ); - private showSearchError(error: HttpErrorResponse): void { + showSearchError(error: HttpErrorResponse): void { if (isServiceUnavailable(error.error.status)) { this.snackbarService.showError(VorgangMessages.SEARCH_UNAVAILABLE); }