Advertisement
nikolayneykov

Untitled

Nov 27th, 2019
188
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. import { UserLoginDTO } from './../../models/user/user-login.dto';
  2. import { SocketIoModule } from 'ngx-socket-io';
  3. import { SocketService } from './socket.service';
  4. import { async, TestBed } from '@angular/core/testing';
  5. import { AuthService } from './auth.service';
  6. import { HttpClientModule, HttpClient } from '@angular/common/http';
  7. import { JwtModule, JwtHelperService } from '@auth0/angular-jwt';
  8. import { StorageService } from './storage.service';
  9. import { of } from 'rxjs';
  10.  
  11.  
  12. describe('AuthService', () => {
  13.   const fakeToken = 'authToken';
  14.   let httpClient;
  15.   let storageService;
  16.   let jwtService;
  17.   let socketService;
  18.   let authService: AuthService;
  19.  
  20.  
  21.   beforeEach(async () => {
  22.     httpClient = {
  23.       post() { },
  24.       delete() { }
  25.     };
  26.  
  27.     storageService = {
  28.       getItem() { return fakeToken },
  29.       setItem() { },
  30.       removeItem() { }
  31.     };
  32.  
  33.     jwtService = {
  34.       isTokenExpired() { },
  35.       decodeToken() { }
  36.     };
  37.  
  38.     socketService = {
  39.       join() { },
  40.       leave() { },
  41.     }
  42.  
  43.  
  44.     TestBed.configureTestingModule({
  45.       imports: [
  46.         HttpClientModule,
  47.         JwtModule.forRoot({ config: {} }),
  48.         SocketIoModule.forRoot({
  49.           url: '',
  50.           options: {},
  51.         }),
  52.       ],
  53.       providers: [AuthService, StorageService, SocketService]
  54.     })
  55.       .overrideProvider(HttpClient, { useValue: httpClient })
  56.       .overrideProvider(StorageService, { useValue: storageService })
  57.       .overrideProvider(JwtHelperService, { useValue: jwtService })
  58.       .overrideProvider(SocketService, { useValue: socketService })
  59.  
  60.     authService = TestBed.get(AuthService);
  61.   });
  62.  
  63.   it('should be created', () => {
  64.     expect(authService).toBeTruthy();
  65.   });
  66.  
  67.   describe('login() should', () => {
  68.     it('call http.post with the correct parameters', () => {
  69.       const mockUser: UserLoginDTO = {
  70.         username: 'john_doe',
  71.         password: '123',
  72.       };
  73.  
  74.       spyOn(httpClient, 'post').and.callFake(() => of({ fakeToken }));
  75.  
  76.       authService.login(mockUser);
  77.  
  78.       expect(httpClient.post).toHaveBeenCalledTimes(1);
  79.       expect(httpClient.post).toHaveBeenCalledWith('http://localhost:3000/api/session', mockUser);
  80.     });
  81.  
  82.     it('call storageService.setItem() 3 times with correct parameters', async (done) => {
  83.       spyOn(httpClient, 'post').and.callFake(() => of({ fakeToken }));
  84.       const mockUser: UserLoginDTO = { username: 'john_doe', password: '123' };
  85.       const setItemSpy = spyOn(storageService, 'setItem');
  86.  
  87.       authService.login(mockUser).subscribe(
  88.         ({ authToken }) => {
  89.           expect(setItemSpy).toHaveBeenCalledWith('authToken', authToken);
  90.           expect(setItemSpy).toHaveBeenCalledWith('username', mockUser.username);
  91.           expect(setItemSpy).toHaveBeenCalledWith('joined', true);
  92.           expect(setItemSpy).toHaveBeenCalledTimes(3);
  93.           done();
  94.         }
  95.       );
  96.     });
  97.  
  98.     it('call storageService.getItem() with correct parameter', async (done) => {
  99.       spyOn(httpClient, 'post').and.callFake(() => of({ fakeToken }));
  100.       const mockUser: UserLoginDTO = { username: 'john_doe', password: '123' };
  101.       const getItemSpy = spyOn(storageService, 'getItem');
  102.  
  103.       authService.login(mockUser).subscribe(
  104.         ({ authToken }) => {
  105.           expect(getItemSpy).toHaveBeenCalledWith('username');
  106.           done();
  107.         }
  108.       );
  109.     });
  110.  
  111.     it('call socketService.join() with correct parameter', async (done) => {
  112.       spyOn(httpClient, 'post').and.callFake(() => of({ fakeToken }));
  113.       spyOn(storageService, 'getItem').and.returnValue('john_doe');
  114.       const mockUser: UserLoginDTO = { username: 'john_doe', password: '123' };
  115.       const joinSpy = spyOn(socketService, 'join');
  116.  
  117.       authService.login(mockUser).subscribe(
  118.         ({ authToken }) => {
  119.           expect(joinSpy).toHaveBeenCalledTimes(1);
  120.           expect(joinSpy).toHaveBeenCalledWith('john_doe');
  121.           done();
  122.         }
  123.       );
  124.     });
  125.   });
  126.  
  127.   describe('logout() should', () => {
  128.     it('calls storageService.removeItem() with correct parameter', () => {
  129.       const removeItemSpy = spyOn(storageService, 'removeItem');
  130.  
  131.       authService.logout();
  132.  
  133.       expect(removeItemSpy).toHaveBeenCalledTimes(1);
  134.       expect(removeItemSpy).toHaveBeenCalledWith('authToken');
  135.     });
  136.  
  137.     it('calls storageService.setItem() with correct parameters', () => {
  138.       const setItemSpy = spyOn(storageService, 'setItem');
  139.  
  140.       authService.logout();
  141.  
  142.       expect(setItemSpy).toHaveBeenCalledTimes(1);
  143.       expect(setItemSpy).toHaveBeenCalledWith('joined', false);
  144.     });
  145.  
  146.     it('call socketService.leave() with correct parameter', () => {
  147.       spyOn(storageService, 'getItem').and.returnValue('john_doe');
  148.       const leaveSpy = spyOn(socketService, 'leave');
  149.  
  150.       authService.logout();
  151.  
  152.       expect(leaveSpy).toHaveBeenCalledTimes(1);
  153.       expect(leaveSpy).toHaveBeenCalledWith('john_doe');
  154.     });
  155.  
  156.     it('call storageService.getItem() with correct parameter', () => {
  157.       const getItemSpy = spyOn(storageService, 'getItem');
  158.  
  159.       authService.logout();
  160.  
  161.       expect(getItemSpy).toHaveBeenCalledTimes(1);
  162.       expect(getItemSpy).toHaveBeenCalledWith('username');
  163.     });
  164.   });
  165.  
  166.   describe('getLoggedUserData() should', () => {
  167.     it('call the storageService.getItem() method once with correct parameter', () => {
  168.       const getItemSpy = spyOn(storageService, 'getItem');
  169.  
  170.       authService.getLoggedUserData();
  171.  
  172.       expect(getItemSpy).toHaveBeenCalledTimes(1);
  173.       expect(getItemSpy).toHaveBeenCalledWith(fakeToken);
  174.     });
  175.  
  176.     it('call the jwtService.isTokenExpired() method once with correct token if the token exists', () => {
  177.       const isTokenExpiredSpy = spyOn(jwtService, 'isTokenExpired');
  178.  
  179.       authService.getLoggedUserData();
  180.  
  181.       expect(isTokenExpiredSpy).toHaveBeenCalledTimes(1);
  182.       expect(isTokenExpiredSpy).toHaveBeenCalledWith(fakeToken);
  183.     });
  184.  
  185.     it('call the storageService.removeItem() method once with correct parameter if the token exists as is expired', () => {
  186.       const removeItemSpy = spyOn(storageService, 'removeItem');
  187.       spyOn(jwtService, 'isTokenExpired').and.returnValue(true);
  188.  
  189.       authService.getLoggedUserData();
  190.  
  191.       expect(removeItemSpy).toHaveBeenCalledTimes(1);
  192.       expect(removeItemSpy).toHaveBeenCalledWith(fakeToken);
  193.     });
  194.  
  195.     it('call the storageService.setItem() method once with correct parameters if the token exists as is expired', () => {
  196.       const setItemSpy = spyOn(storageService, 'setItem');
  197.       spyOn(jwtService, 'isTokenExpired').and.returnValue(true);
  198.  
  199.       authService.getLoggedUserData();
  200.  
  201.       expect(setItemSpy).toHaveBeenCalledTimes(1);
  202.       expect(setItemSpy).toHaveBeenCalledWith('joined', false);
  203.     });
  204.  
  205.     it('should call the jwtService.decodeToken() method once with correct parameter if the token exists as is not expired', () => {
  206.       const decodeTokenSpy = spyOn(jwtService, 'decodeToken');
  207.       spyOn(jwtService, 'isTokenExpired').and.returnValue(false);
  208.  
  209.       authService.getLoggedUserData();
  210.  
  211.       expect(decodeTokenSpy).toHaveBeenCalledTimes(1);
  212.       expect(decodeTokenSpy).toHaveBeenCalledWith(fakeToken);
  213.     });
  214.  
  215.     it('should return the value of jwtService.decodeToken() if the token exists as is not expired', () => {
  216.       spyOn(jwtService, 'decodeToken').and.returnValue('decoded token');
  217.       spyOn(jwtService, 'isTokenExpired').and.returnValue(false);
  218.  
  219.       const decodedToken = authService.getLoggedUserData();
  220.  
  221.       expect(decodedToken).toEqual('decoded token');
  222.     });
  223.  
  224.     it('should return null if the token does not exist', () => {
  225.       spyOn(storageService, 'getItem').and.returnValue(null);
  226.       spyOn(jwtService, 'decodeToken').and.returnValue('decoded token');
  227.       spyOn(jwtService, 'isTokenExpired').and.returnValue(false);
  228.  
  229.       const decodedToken = authService.getLoggedUserData();
  230.  
  231.       expect(decodedToken).toBeNull();
  232.     });
  233.  
  234.     it('should return null if the token exists but is expired', () => {
  235.       spyOn(jwtService, 'decodeToken').and.returnValue('decoded token');
  236.       spyOn(jwtService, 'isTokenExpired').and.returnValue(true);
  237.  
  238.       const decodedToken = authService.getLoggedUserData();
  239.  
  240.       expect(decodedToken).toBeNull();
  241.     });
  242.   });
  243. });
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement