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..3d192fdf 100644 --- a/src/app/modules/shared/interceptors/spinner.interceptor.spec.ts +++ b/src/app/modules/shared/interceptors/spinner.interceptor.spec.ts @@ -2,8 +2,9 @@ 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'; +import { ComponentPortal } from 'ngx-toastr'; describe('SpinnerInterceptorService test', () => { @@ -20,32 +21,40 @@ describe('SpinnerInterceptorService test', () => { } } - let overlay: Overlay; - let httpHandler: HttpHandler; + let spinnerService: SpinnerOverlayService; let spinnerInterceptor: SpinnerInterceptor; - let spinnerOverlayService: SpinnerOverlayService; + let mockHttpHandler: HttpHandler; + let overlayRef: any; beforeEach(() => { - overlay = jasmine.createSpyObj('Overlay', ['create']); - httpHandler = new MockHttpHandler(); - spinnerInterceptor = new SpinnerInterceptor(new SpinnerOverlayService(overlay)); - spinnerOverlayService = new SpinnerOverlayService(overlay); + spinnerService = TestBed.inject(SpinnerOverlayService); + spinnerInterceptor = TestBed.inject(SpinnerInterceptor); + mockHttpHandler = new MockHttpHandler(); + overlayRef = spinnerService.overlayRef; }); it('should be created', () => { expect(spinnerInterceptor).toBeTruthy(); }); - 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(); + it('if request is made then spinnerService is show', () => { + const request = new HttpRequest('GET', '/recent'); + spyOn(spinnerService, 'show'); - spinnerInterceptor.intercept(request, httpHandler); + spinnerInterceptor.intercept(request, mockHttpHandler); - expect(spinnerInterceptor.intercept).toHaveBeenCalledWith(request, httpHandler); - expect(spinnerSubscription.unsubscribe).toBeTruthy(); + expect(spinnerService.show).toHaveBeenCalled(); + expect(ComponentPortal).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/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(() => {