auth.test.js 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. import request from 'supertest';
  2. import express from 'express';
  3. import { jest } from '@jest/globals';
  4. import auth from '../authentication';
  5. describe('Authentication test', () => {
  6. let query;
  7. let onSendToken;
  8. let onLogin;
  9. let onLogout;
  10. beforeEach(() => {
  11. onSendToken = jest.fn(() => Promise.resolve());
  12. onLogin = jest.fn();
  13. onLogout = jest.fn();
  14. const app = express();
  15. app.use(express.json());
  16. app.use(
  17. auth({
  18. secret: 'My test secret key',
  19. onSendToken,
  20. onLogin,
  21. onLogout,
  22. })
  23. );
  24. query = request(app);
  25. });
  26. it('should get and verify token', async () => {
  27. await query
  28. .post('/auth/')
  29. .set('X-Auth-Host', 'http://localhost:5000/')
  30. .send({ userEmail: 'test@yopmail' })
  31. .expect(200);
  32. const userId = onSendToken.mock.calls[0][0].userId;
  33. const token = onSendToken.mock.calls[0][0].token;
  34. await query.get(`/auth/verify/${userId}/${token}`).expect(200);
  35. expect(onLogin).toHaveBeenCalled();
  36. });
  37. it('should failed verify token', async () => {
  38. await query.get(`/auth/verify/fakeuserid/badtoken`).expect(403);
  39. expect(onLogin).not.toHaveBeenCalled();
  40. });
  41. it('should login and logout', async () => {
  42. await query
  43. .post('/auth/')
  44. .set('X-Auth-Host', 'http://localhost:5000/')
  45. .send({ userEmail: 'test@yopmail' })
  46. .expect(200);
  47. const userId = onSendToken.mock.calls[0][0].userId;
  48. const token = onSendToken.mock.calls[0][0].token;
  49. await query.get(`/auth/verify/${userId}/${token}`).expect(200);
  50. await query.get(`/auth/logout/`).expect(200);
  51. expect(onLogout).toHaveBeenCalled();
  52. });
  53. });