access-token-parser.test.js 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  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() => {
  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. });
  20. crowi = {
  21. model: jest.fn().mockReturnValue(User),
  22. };
  23. const req = {
  24. skipCsrfVerify: false,
  25. query: {},
  26. body: {},
  27. user: {},
  28. };
  29. const res = {};
  30. const next = jest.fn().mockReturnValue('next');
  31. test('without accessToken', async() => {
  32. const result = await accessTokenParser(req, res, next);
  33. expect(next).toHaveBeenCalled();
  34. expect(result).toBe('next');
  35. expect(req.skipCsrfVerify).toBe(false);
  36. });
  37. test('with invalid accessToken', async() => {
  38. req.query.access_token = 'invalidAccessToken';
  39. const result = await accessTokenParser(req, res, next);
  40. expect(next).toHaveBeenCalled();
  41. expect(result).toBe('next');
  42. expect(req.skipCsrfVerify).toBe(false);
  43. });
  44. test('with accessToken in query', async() => {
  45. req.query.access_token = 'N4xPDjh48TBsC7ahUN+ajjL5asnGpwtA5VAR+EhIDeg=';
  46. const result = await accessTokenParser(req, res, next);
  47. expect(next).toHaveBeenCalled();
  48. expect(result).toBe('next');
  49. expect(req.skipCsrfVerify).toBe(true);
  50. expect(req.user._id).toStrictEqual(targetUser._id);
  51. });
  52. test('with accessToken in body', async() => {
  53. req.body.access_token = 'N4xPDjh48TBsC7ahUN+ajjL5asnGpwtA5VAR+EhIDeg=';
  54. const result = await accessTokenParser(req, res, next);
  55. expect(next).toHaveBeenCalled();
  56. expect(result).toBe('next');
  57. expect(req.skipCsrfVerify).toBe(true);
  58. expect(req.user._id).toStrictEqual(targetUser._id);
  59. });
  60. });