access-token-parser.test.js 2.2 KB

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