Advertisement
nikolayneykov

Untitled

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