From e654843014f7aa872e64f70d67f4788491990d8d Mon Sep 17 00:00:00 2001 From: Nicole Garcia Date: Wed, 12 Oct 2022 08:49:47 -0500 Subject: [PATCH] fix: spinner test --- .../spinner-overlay.component.html | 1 - .../spinner-overlay.component.ts | 2 +- .../interceptors/spinner.interceptor.spec.ts | 7 +------ .../shared/interceptors/spinner.interceptor.ts | 15 +++++---------- .../services/spinner-overlay.service.spec.ts | 15 +++++++++++---- .../shared/services/spinner-overlay.service.ts | 18 ++---------------- 6 files changed, 20 insertions(+), 38 deletions(-) delete mode 100644 src/app/modules/shared/components/spinner-overlay/spinner-overlay.component.html diff --git a/src/app/modules/shared/components/spinner-overlay/spinner-overlay.component.html b/src/app/modules/shared/components/spinner-overlay/spinner-overlay.component.html deleted file mode 100644 index 1d0d28f5..00000000 --- a/src/app/modules/shared/components/spinner-overlay/spinner-overlay.component.html +++ /dev/null @@ -1 +0,0 @@ - diff --git a/src/app/modules/shared/components/spinner-overlay/spinner-overlay.component.ts b/src/app/modules/shared/components/spinner-overlay/spinner-overlay.component.ts index bb997986..00bca451 100644 --- a/src/app/modules/shared/components/spinner-overlay/spinner-overlay.component.ts +++ b/src/app/modules/shared/components/spinner-overlay/spinner-overlay.component.ts @@ -2,7 +2,7 @@ import { Component } from '@angular/core'; @Component({ selector: 'app-spinner-overlay', - templateUrl: './spinner-overlay.component.html', + template: '', styleUrls: ['./spinner-overlay.component.scss'], }) diff --git a/src/app/modules/shared/interceptors/spinner.interceptor.spec.ts b/src/app/modules/shared/interceptors/spinner.interceptor.spec.ts index 419ae7a9..99462d18 100644 --- a/src/app/modules/shared/interceptors/spinner.interceptor.spec.ts +++ b/src/app/modules/shared/interceptors/spinner.interceptor.spec.ts @@ -2,7 +2,7 @@ import { Overlay } from '@angular/cdk/overlay'; import { TestBed } from '@angular/core/testing'; import { SpinnerInterceptor } from './spinner.interceptor'; import { HttpHandler, HttpRequest, HttpResponse, HttpEvent } from '@angular/common/http'; -import { Observable, of, Subscription } from 'rxjs'; +import { Observable, of } from 'rxjs'; import { SpinnerOverlayService } from '../services/spinner-overlay.service'; @@ -23,13 +23,11 @@ describe('SpinnerInterceptorService test', () => { let overlay: Overlay; let httpHandler: HttpHandler; let spinnerInterceptor: SpinnerInterceptor; - let spinnerOverlayService: SpinnerOverlayService; beforeEach(() => { overlay = jasmine.createSpyObj('Overlay', ['create']); httpHandler = new MockHttpHandler(); spinnerInterceptor = new SpinnerInterceptor(new SpinnerOverlayService(overlay)); - spinnerOverlayService = new SpinnerOverlayService(overlay); }); it('should be created', () => { @@ -38,14 +36,11 @@ describe('SpinnerInterceptorService test', () => { it('if request is made then spinnerInterceptor is called', () => { const request = new HttpRequest('GET', '/foo'); - const spinnerSubscription: Subscription = spinnerOverlayService.spinner$.subscribe(); - spyOn(spinnerSubscription, 'unsubscribe') spyOn(spinnerInterceptor, 'intercept').and.callThrough(); spinnerInterceptor.intercept(request, httpHandler); expect(spinnerInterceptor.intercept).toHaveBeenCalledWith(request, httpHandler); - expect(spinnerSubscription.unsubscribe).toBeTruthy(); }); }); diff --git a/src/app/modules/shared/interceptors/spinner.interceptor.ts b/src/app/modules/shared/interceptors/spinner.interceptor.ts index 76825951..9710e48d 100644 --- a/src/app/modules/shared/interceptors/spinner.interceptor.ts +++ b/src/app/modules/shared/interceptors/spinner.interceptor.ts @@ -5,21 +5,16 @@ import { HttpRequest, } from '@angular/common/http'; import { Injectable } from '@angular/core'; -import { Observable, Subscription } from 'rxjs'; +import { Observable } from 'rxjs'; import { finalize } from 'rxjs/operators'; import { SpinnerOverlayService } from '../services/spinner-overlay.service'; @Injectable() export class SpinnerInterceptor implements HttpInterceptor { - constructor(private readonly spinnerOverlayService: SpinnerOverlayService) {} + constructor(private readonly spinnerOverlayService: SpinnerOverlayService) { } - intercept( - req: HttpRequest, - next: HttpHandler - ): Observable> { - const spinnerSubscription: Subscription = this.spinnerOverlayService.spinner$.subscribe(); - return next - .handle(req) - .pipe(finalize(() => spinnerSubscription.unsubscribe())); + intercept(req: HttpRequest, next: HttpHandler): Observable> { + this.spinnerOverlayService.show(); + return next.handle(req).pipe(finalize(() => this.spinnerOverlayService.hide())); } } diff --git a/src/app/modules/shared/services/spinner-overlay.service.spec.ts b/src/app/modules/shared/services/spinner-overlay.service.spec.ts index c18a3e4d..cde9934c 100644 --- a/src/app/modules/shared/services/spinner-overlay.service.spec.ts +++ b/src/app/modules/shared/services/spinner-overlay.service.spec.ts @@ -44,16 +44,23 @@ describe('SpinnerOverlayService test', () => { }); it('if request is made then spinnerService is show', () => { - const request = new HttpRequest('GET', '/foo'); + const request = new HttpRequest('GET', '/recent'); spyOn(spinnerService, 'show'); - spyOn(spinnerService, 'hide'); spinnerInterceptor.intercept(request, mockHttpHandler); expect(spinnerService.show).toHaveBeenCalled(); - expect(overlayRef).toBeUndefined(); expect(ComponentPortal).toBeTruthy(); - expect(spinnerService.hide).toBeTruthy(); + }); + + + it('if hide calls detach method of overlayRef and then sets it to undefined', () => { + spyOn(spinnerService, 'hide'); + + spinnerService.hide(); + + expect(spinnerService.hide).toHaveBeenCalled(); + expect(overlayRef).toBeUndefined(); }); }); diff --git a/src/app/modules/shared/services/spinner-overlay.service.ts b/src/app/modules/shared/services/spinner-overlay.service.ts index 23187c06..68180442 100644 --- a/src/app/modules/shared/services/spinner-overlay.service.ts +++ b/src/app/modules/shared/services/spinner-overlay.service.ts @@ -1,28 +1,14 @@ import { Overlay, OverlayRef } from '@angular/cdk/overlay'; import { ComponentPortal } from '@angular/cdk/portal'; import { Injectable } from '@angular/core'; -import { defer, NEVER } from 'rxjs'; -import { finalize, share } from 'rxjs/operators'; -import { SpinnerOverlayComponent } from './../components/spinner-overlay/spinner-overlay.component'; - +import { SpinnerOverlayComponent } from '../components/spinner-overlay/spinner-overlay.component'; @Injectable({ providedIn: 'root', }) export class SpinnerOverlayService { - static spinner$: any; public overlayRef: OverlayRef = undefined; - - constructor(private readonly overlay: Overlay) { } - - public readonly spinner$ = defer(() => { - this.show(); - return NEVER.pipe( - finalize(() => { - this.hide(); - }) - ); - }).pipe(share()); + constructor(public overlay: Overlay) { } public show(): void { Promise.resolve(null).then(() => {