summaryrefslogtreecommitdiffstats
path: root/src/pybind/mgr/dashboard/frontend/src/app/shared/services/no-sso-guard.service.spec.ts
blob: 9a330cdc83eb42f03cda1f64828ba0ab98fbfe28 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
import { Component, NgZone } from '@angular/core';
import { fakeAsync, TestBed, tick } from '@angular/core/testing';
import { Routes } from '@angular/router';
import { RouterTestingModule } from '@angular/router/testing';

import { DashboardUserDeniedError } from '~/app/core/error/error';
import { configureTestBed } from '~/testing/unit-test-helper';
import { AuthStorageService } from './auth-storage.service';
import { NoSsoGuardService } from './no-sso-guard.service';

describe('NoSsoGuardService', () => {
  let service: NoSsoGuardService;
  let authStorageService: AuthStorageService;
  let ngZone: NgZone;

  @Component({ selector: 'cd-404', template: '' })
  class NotFoundComponent {}

  const routes: Routes = [{ path: '404', component: NotFoundComponent }];

  configureTestBed({
    imports: [RouterTestingModule.withRoutes(routes)],
    providers: [NoSsoGuardService, AuthStorageService],
    declarations: [NotFoundComponent]
  });

  beforeEach(() => {
    service = TestBed.inject(NoSsoGuardService);
    authStorageService = TestBed.inject(AuthStorageService);
    ngZone = TestBed.inject(NgZone);
  });

  it('should be created', () => {
    expect(service).toBeTruthy();
  });

  it('should allow if not logged in via SSO', () => {
    spyOn(authStorageService, 'isSSO').and.returnValue(false);
    expect(service.canActivate()).toBe(true);
  });

  it('should prevent if logged in via SSO', fakeAsync(() => {
    spyOn(authStorageService, 'isSSO').and.returnValue(true);
    ngZone.run(() => {
      expect(() => service.canActivate()).toThrowError(DashboardUserDeniedError);
    });
    tick();
  }));
});