access-token-parser.test.js 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. const mongoose = require('mongoose');
  2. const { getInstance } = require('../setup-crowi');
  3. describe('accessTokenParser', () => {
  4. let crowi;
  5. let accessTokenParser;
  6. let User;
  7. let targetUser;
  8. beforeAll(async(done) => {
  9. crowi = await getInstance();
  10. User = mongoose.model('User');
  11. accessTokenParser = require('@server/middlewares/access-token-parser')(crowi);
  12. targetUser = await User.create({
  13. name: 'Example for access token parser',
  14. username: 'targetUser',
  15. password: 'usertestpass',
  16. lang: 'en_US',
  17. apiToken: 'N4xPDjh48TBsC7ahUN+ajjL5asnGpwtA5VAR+EhIDeg=',
  18. });
  19. done();
  20. });
  21. crowi = {
  22. model: jest.fn().mockReturnValue(User),
  23. };
  24. const req = {
  25. skipCsrfVerify: false,
  26. query: {},
  27. body: {},
  28. user: {},
  29. };
  30. const res = {};
  31. const next = jest.fn().mockReturnValue('next');
  32. test('without accessToken', async() => {
  33. const result = await accessTokenParser(req, res, next);
  34. expect(next).toHaveBeenCalled();
  35. expect(result).toBe('next');
  36. expect(req.skipCsrfVerify).toBe(false);
  37. });
  38. test('with invalid accessToken', async() => {
  39. req.query.access_token = 'invalidAccessToken';
  40. const result = await accessTokenParser(req, res, next);
  41. expect(next).toHaveBeenCalled();
  42. expect(result).toBe('next');
  43. expect(req.skipCsrfVerify).toBe(false);
  44. });
  45. test('with accessToken in query', async() => {
  46. req.query.access_token = 'N4xPDjh48TBsC7ahUN+ajjL5asnGpwtA5VAR+EhIDeg=';
  47. const result = await accessTokenParser(req, res, next);
  48. expect(next).toHaveBeenCalled();
  49. expect(result).toBe('next');
  50. expect(req.skipCsrfVerify).toBe(true);
  51. expect(req.user._id).toStrictEqual(targetUser._id);
  52. });
  53. test('with accessToken in body', async() => {
  54. req.body.access_token = 'N4xPDjh48TBsC7ahUN+ajjL5asnGpwtA5VAR+EhIDeg=';
  55. const result = await accessTokenParser(req, res, next);
  56. expect(next).toHaveBeenCalled();
  57. expect(result).toBe('next');
  58. expect(req.skipCsrfVerify).toBe(true);
  59. expect(req.user._id).toStrictEqual(targetUser._id);
  60. });
  61. });