diff --git a/app/server/src/middlewares/auth.test.js b/app/server/src/middlewares/auth.test.js new file mode 100644 index 0000000000000000000000000000000000000000..fd4d41f2c183f79ba3f3567a334c802100e57279 --- /dev/null +++ b/app/server/src/middlewares/auth.test.js @@ -0,0 +1,59 @@ +const auth = require('../middlewares/auth'); +const jwt = require('jsonwebtoken'); +const { model: Users } = require('../models/Users'); + +describe('Testing the authorization middleware', () => { + let mockRequest; + let mockResponse; + let nextFunction = jest.fn(); + + const token = 'mytoken'; + + beforeEach(() => { + mockRequest = { + cookies: { + 'todo-jt': token, + } + }; + mockResponse = { + redirect: jest.fn(), + status: jest.fn(() => { + return { + send: jest.fn() + } + }) + }; + }); + + test('should redirect, if the value of the todo-jt cookie is an empty string', async () => { + mockRequest.cookies['todo-jt'] = ''; + auth(mockRequest, mockResponse, nextFunction); + + expect(mockResponse.redirect).toHaveBeenCalledWith(401, '/login'); + }); + + test('should save the found user and token in the request', async () => { + const mockUser = { + username: 'testname', + password: 'testpw' + }; + + jest.spyOn(jwt, 'verify').mockReturnValue(token); + jest.spyOn(Users, 'findOne').mockResolvedValue(mockUser); + + await auth(mockRequest, mockResponse, nextFunction); + + expect(mockRequest.token).toEqual(token) + expect(mockRequest.user).toEqual(mockUser); + }); + + test('should sent a 401 status code, if the user could not be found', async () => { + spyOn(jwt, 'verify').mockReturnValue(token); + spyOn(Users, 'findOne').mockResolvedValue(undefined); + + await auth(mockRequest, mockResponse, nextFunction); + + expect(mockRequest.user).toBeUndefined; + expect(mockResponse.status).toHaveBeenCalledWith(401); + }); +});