access-token-parser.test.js 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  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. // crowi.model = jest.fn().mockReturnValue('huge');
  34. // const findUserByApiToken = jest.spyOn(User, 'findUserByApiToken').mockImplementation((accessToken) => {
  35. // return User.find({ apiToken: accessToken });
  36. // });
  37. test('without accessToken', async() => {
  38. const result = await accessTokenParser(req, res, next);
  39. expect(next).toHaveBeenCalled();
  40. expect(result).toBe('next');
  41. });
  42. test('with invalid accessToken', async() => {
  43. req.query.access_token = 'invalidAccessToken';
  44. const result = await accessTokenParser(req, res, next);
  45. expect(next).toHaveBeenCalled();
  46. expect(result).toBe('next');
  47. expect(req.skipCsrfVerify).toBe(false);
  48. });
  49. test('with accessToken in query', async() => {
  50. req.query.access_token = 'N4xPDjh48TBsC7ahUN+ajjL5asnGpwtA5VAR+EhIDeg=';
  51. const result = await accessTokenParser(req, res, next);
  52. expect(next).toHaveBeenCalled();
  53. expect(result).toBe('next');
  54. expect(req.skipCsrfVerify).toBe(true);
  55. expect(req.user._id).toStrictEqual(targetUser._id);
  56. });
  57. test('with accessToken in body', async() => {
  58. req.body.access_token = 'N4xPDjh48TBsC7ahUN+ajjL5asnGpwtA5VAR+EhIDeg=';
  59. const result = await accessTokenParser(req, res, next);
  60. expect(next).toHaveBeenCalled();
  61. expect(result).toBe('next');
  62. expect(req.skipCsrfVerify).toBe(true);
  63. expect(req.user._id).toStrictEqual(targetUser._id);
  64. });
  65. });
  66. });