Advertisement
Guest User

Untitled

a guest
Dec 25th, 2016
206
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 9.66 KB | None | 0 0
  1. import {TestBed, ComponentFixture, async} from '@angular/core/testing';
  2. import {Router} from '@angular/router';
  3. import {RouterTestingModule} from '@angular/router/testing';
  4. import {dispatchEvent} from '@angular/platform-browser/testing/browser_util';
  5. import {FormGroup, FormBuilder} from '@angular/forms';
  6. import {By} from '@angular/platform-browser'
  7. import {DebugElement, Component} from '@angular/core';
  8.  
  9. import {ToastsManager} from 'ng2-toastr/ng2-toastr';
  10.  
  11. import {TestModule, ToastsManagerMock} from '../../../test-helpers/index';
  12. import {LoginComponent} from './login.component';
  13. import {AuthService, SessionService} from '../../services/index';
  14.  
  15. @Component({
  16. template: ''
  17. })
  18. class MockComponent {
  19. }
  20.  
  21. describe('Component: Login', () => {
  22. let fixture: ComponentFixture<LoginComponent>,
  23. component: LoginComponent,
  24. de: DebugElement,
  25. el: HTMLElement,
  26. authService,
  27. sessionService,
  28. router, toastr,
  29. spy;
  30.  
  31. beforeEach(() => {
  32. TestBed.configureTestingModule({
  33. imports: [
  34. TestModule,
  35. RouterTestingModule
  36. ],
  37. declarations: [
  38. LoginComponent, MockComponent
  39. ]
  40. }).overrideComponent(LoginComponent, {
  41. set: {
  42. providers: [
  43. {provide: ToastsManager, useClass: ToastsManagerMock}
  44. ]
  45. }
  46. })
  47. .compileComponents();
  48. });
  49.  
  50. beforeEach(() => {
  51. fixture = TestBed.createComponent(LoginComponent);
  52. component = fixture.debugElement.componentInstance;
  53.  
  54. // query for the welcome <h1> by CSS element selector
  55. de = fixture.debugElement.query(By.css('div.container'));
  56. el = de.nativeElement;
  57.  
  58. // get an instance of the userService injected into the component
  59. sessionService = fixture.debugElement.injector.get(SessionService);
  60. authService = fixture.debugElement.injector.get(AuthService);
  61. router = fixture.debugElement.injector.get(Router);
  62. toastr = fixture.debugElement.injector.get(ToastsManager);
  63. });
  64.  
  65. describe('unit tests:', () => {
  66. it('should create the component', async(() => {
  67. // arrange
  68. // act
  69. fixture.detectChanges();
  70.  
  71. // assert
  72. expect(component).toBeTruthy();
  73. }));
  74.  
  75. it('should call session.destroy on init', async(() => {
  76. // arrange
  77. spyOn(sessionService, 'destroy');
  78.  
  79. // act
  80. component.ngOnInit();
  81. fixture.detectChanges();
  82.  
  83. // assert
  84. expect(sessionService.destroy).toHaveBeenCalled();
  85. }));
  86.  
  87. it('form should be invalid on init', async(() => {
  88. // arrange
  89. // act
  90. component.ngOnInit();
  91. fixture.detectChanges();
  92.  
  93. // assert
  94. expect(component.loginForm.valid).toBe(false, 'form should not be valid');
  95. }));
  96.  
  97. describe('auth.login', ()=> {
  98. it('should show toastr error message when form is not valid', async(() => {
  99. // arrange
  100. component.ngOnInit();
  101. fixture.detectChanges();
  102.  
  103. // setup spy for toastr error
  104. spy = spyOn(toastr, 'error');
  105.  
  106. // act
  107. component.login();
  108. fixture.detectChanges();
  109.  
  110. // assert
  111. expect(toastr.error).toHaveBeenCalledWith('invalidForm');
  112. }));
  113.  
  114. it('should navigate to dashboard on successful login', async(() => {
  115. // arrange
  116. let fb = new FormBuilder();
  117.  
  118. component.ngOnInit();
  119. fixture.detectChanges();
  120.  
  121. // create login form model
  122. component.loginForm = fb.group({
  123. username: ['bob@nextplanesolutions.com'],
  124. password: ['welcome!']
  125. });
  126.  
  127. spy = spyOn(router, 'navigate');
  128.  
  129. // act
  130. component.login();
  131. fixture.detectChanges();
  132.  
  133. // assert
  134. expect(router.navigate).toHaveBeenCalledWith(['/dashboard']);
  135. }));
  136.  
  137. it('should show toaster and destroy session when auth call fails', async(() => {
  138. // arrange
  139. let fb = new FormBuilder();
  140.  
  141. component.ngOnInit();
  142. fixture.detectChanges();
  143.  
  144. // create login form model
  145. component.loginForm = fb.group({
  146. username: ['bob@nextplanesolutions.com'],
  147. password: ['welcome!']
  148. });
  149.  
  150. // setup spys
  151. spy = spyOn(toastr, 'error');
  152. spy = spyOn(sessionService, 'destroy');
  153.  
  154. // set auth service to fail
  155. authService.login = authService.fail;
  156.  
  157. // act
  158. component.login();
  159. fixture.detectChanges();
  160.  
  161. // assert
  162. expect(toastr.error).toHaveBeenCalledWith('loginError');
  163. expect(sessionService.destroy).toHaveBeenCalled();
  164. }));
  165. });
  166. });
  167.  
  168. describe('integration tests:', () => {
  169. it('form should be valid with proper values', async(() => {
  170. // arrange
  171. let usernameEl = fixture.debugElement.query(By.css('#username')).nativeElement,
  172. passwordEl = fixture.debugElement.query(By.css('#password')).nativeElement,
  173. loginButtonEl = fixture.debugElement.query(By.css('.btn-primary'));
  174.  
  175. spy = spyOn(router, 'navigate');
  176.  
  177. // act
  178. component.ngOnInit();
  179.  
  180. fixture.detectChanges();
  181. fixture.whenStable().then(() => {
  182. usernameEl.value = 'bob@briebug.com';
  183. dispatchEvent(usernameEl, 'input');
  184.  
  185. passwordEl.value = 'welcome!';
  186. dispatchEvent(passwordEl, 'input');
  187.  
  188. fixture.detectChanges();
  189.  
  190. let loginForm: FormGroup = component.loginForm;
  191. let usernameFormControl = loginForm.controls['username'];
  192. let passwordFormControl = loginForm.controls['password'];
  193.  
  194. expect(usernameFormControl.hasError('required')).toBe(false);
  195. expect(usernameFormControl.valid).toBe(true);
  196.  
  197. expect(passwordFormControl.hasError('required')).toBe(false);
  198. expect(passwordFormControl.valid).toBe(true);
  199.  
  200. expect(loginForm.valid).toEqual(true);
  201.  
  202. loginButtonEl.triggerEventHandler('click', null);
  203. fixture.detectChanges();
  204.  
  205. expect(spy.calls.any()).toBe(true, 'router.navigate called');
  206. expect(router.navigate).toHaveBeenCalledWith(['/dashboard']);
  207. });
  208. }));
  209.  
  210. it('form should be invalid when nothing is set', async(() => {
  211. // arrange
  212.  
  213. // act
  214. component.ngOnInit();
  215.  
  216. fixture.detectChanges();
  217. fixture.whenStable().then(() => {
  218. let loginForm: FormGroup = component.loginForm;
  219. let usernameFormControl = loginForm.controls['username'];
  220. let passwordFormControl = loginForm.controls['password'];
  221.  
  222. expect(usernameFormControl.hasError('required')).toBe(true);
  223. expect(usernameFormControl.valid).toBe(false);
  224.  
  225. expect(passwordFormControl.hasError('required')).toBe(true);
  226. expect(passwordFormControl.valid).toBe(false);
  227.  
  228. expect(loginForm.valid).toEqual(false);
  229. });
  230. }));
  231.  
  232. it('form should show validators when invalid', async(() => {
  233. // arrange
  234. let loginButtonEl = fixture.debugElement.query(By.css('.btn-primary'));
  235.  
  236. // act
  237. component.ngOnInit();
  238.  
  239. fixture.detectChanges();
  240. fixture.whenStable().then(() => {
  241. let loginForm: FormGroup = component.loginForm;
  242.  
  243. loginButtonEl.triggerEventHandler('click', null);
  244. fixture.detectChanges();
  245.  
  246. expect(loginForm.valid).toEqual(false);
  247.  
  248. let usernameError = fixture.debugElement.query(By.css('.username-error')).nativeElement,
  249. passwordError = fixture.debugElement.query(By.css('.password-error')).nativeElement;
  250.  
  251. expect(usernameError).toBeTruthy();
  252. expect(passwordError).toBeTruthy();
  253. });
  254. }));
  255.  
  256. it('should show toaster and destroy session when auth call fails', async(() => {
  257. // arrange
  258. let usernameEl = fixture.debugElement.query(By.css('#username')).nativeElement,
  259. passwordEl = fixture.debugElement.query(By.css('#password')).nativeElement,
  260. loginButtonEl = fixture.debugElement.query(By.css('.btn-primary'));
  261.  
  262. // setup spys
  263. spyOn(sessionService, 'destroy');
  264. spyOn(toastr, 'error');
  265.  
  266. // set auth service to fail
  267. authService.login = authService.fail;
  268.  
  269. // act
  270. component.ngOnInit();
  271.  
  272. fixture.detectChanges();
  273. fixture.whenStable().then(() => {
  274. usernameEl.value = 'bob@briebug.com';
  275. dispatchEvent(usernameEl, 'input');
  276.  
  277. passwordEl.value = 'welcome!';
  278. dispatchEvent(passwordEl, 'input');
  279.  
  280. fixture.detectChanges();
  281.  
  282. loginButtonEl.triggerEventHandler('click', null);
  283. fixture.detectChanges();
  284.  
  285. expect(toastr.error).toHaveBeenCalled();
  286. expect(sessionService.destroy).toHaveBeenCalled();
  287. });
  288. }));
  289. });
  290. });
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement