summaryrefslogtreecommitdiffstats
path: root/so-monitoring/so-monitoring-ui/src/main/frontend/src/app/login/login.component.spec.ts
blob: 8cf379d04f2a06f9030c460584e47ead8ec5b836 (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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
/**
 ============LICENSE_START=======================================================
 Copyright (C) 2019 Samsung. All rights reserved.
 ================================================================================
 Licensed under the Apache License, Version 2.0 (the "License");
 you may not use this file except in compliance with the License.
 You may obtain a copy of the License at

 http://www.apache.org/licenses/LICENSE-2.0

 Unless required by applicable law or agreed to in writing, software
 distributed under the License is distributed on an "AS IS" BASIS,
 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 See the License for the specific language governing permissions and
 limitations under the License.

 SPDX-License-Identifier: Apache-2.0
 ============LICENSE_END=========================================================

 @authors: k.kazak@samsung.com
 **/

import {async, ComponentFixture, inject, TestBed} from '@angular/core/testing';

import {LoginComponent} from './login.component';
import {AuthenticationService} from "../authentication.service";
import {CUSTOM_ELEMENTS_SCHEMA} from "@angular/core";
import {FormsModule, ReactiveFormsModule} from '@angular/forms';
import {RouterTestingModule} from "@angular/router/testing";
import {ActivatedRoute, Router, RouterModule} from "@angular/router";

describe('LoginComponent', () => {
  // Create SPY Object for Jasmine tests to mock DataService
  let spyDataService: jasmine.SpyObj<AuthenticationService>;
  let component: LoginComponent;
  let fixture: ComponentFixture<LoginComponent>;
  let router: Router;

  beforeEach(async(() => {
    spyDataService = jasmine.createSpyObj('AuthenticationService', ['login', 'logout']);

    TestBed.configureTestingModule({
      providers: [LoginComponent,
        {provide: AuthenticationService, useValue: spyDataService},
        {provide: ActivatedRoute, useValue: { snapshot: {queryParams: { returnUrl: 'test'}}}}
      ],
      imports: [RouterTestingModule, ReactiveFormsModule, FormsModule, RouterModule.forRoot([])],
      declarations: [LoginComponent],
      schemas: [
        CUSTOM_ELEMENTS_SCHEMA
      ]
    });

    fixture = TestBed.createComponent(LoginComponent);
    component = fixture.componentInstance;
    router = TestBed.get(Router);
  }));


  it('should create', inject([LoginComponent],
    (component: LoginComponent) => {
      expect(component).toBeTruthy();
    }));

  it('should logout and route to test directory', inject([LoginComponent],
    (component: LoginComponent) => {
      component.ngOnInit();
      expect(component.returnUrl).toBe('test');
    }));

  it('should logout and route to root directory', inject([LoginComponent],
    (component: LoginComponent) => {
      router.initialNavigation();
      component.ngOnInit();
      expect(component.returnUrl).toBe('test');
    }));

  it('should submit without success', inject([LoginComponent],
    (component: LoginComponent) => {
      component.ngOnInit();
      expect(component.loginForm.valid).toBe(false);
      component.onSubmit();
      expect(component.submitted).toBe(true);
    }));

  it('should submit without success', inject([LoginComponent],
    (component: LoginComponent) => {
      component.ngOnInit();
      expect(component.loginForm.valid).toBe(false);
      spyDataService.login.and.returnValue(Promise.resolve());

      let compiled = fixture.debugElement.nativeElement;
      let username = compiled.querySelector('input[type="text"]');
      let password = compiled.querySelector('input[type="password"]');

      fixture.detectChanges();

      // Change value
      username.value = 'test';
      password.value = 'password';

      // dispatch input event
      dispatchEvent(new Event('input'));

      component.onSubmit();
      expect(component.submitted).toBe(true);
    }));
});