diff --git a/server/forcessl.mw.spec.js b/server/forcessl.mw.spec.js new file mode 100644 index 000000000..e18821e6d --- /dev/null +++ b/server/forcessl.mw.spec.js @@ -0,0 +1,66 @@ +import forceSSL from './forcessl.mw'; + +describe('Tests for ForceSSL middleware', ()=>{ + let originalEnv; + let nextFn; + + let req = {}; + let res = {}; + + beforeEach(()=>{ + originalEnv = process.env.NODE_ENV; + nextFn = jest.fn(); + + req = { + header : ()=>{ return 'http'; }, + get : ()=>{ return 'test'; }, + url : 'URL' + }; + + res = { + redirect : jest.fn() + }; + }); + afterEach(()=>{ + process.env.NODE_ENV = originalEnv; + jest.clearAllMocks(); + }); + + it('should not redirect when NODE_ENV is set to local', ()=>{ + process.env.NODE_ENV = 'local'; + + forceSSL(null, null, nextFn); + + expect(res.redirect).not.toHaveBeenCalled(); + expect(nextFn).toHaveBeenCalled(); + }); + + it('should not redirect when NODE_ENV is set to docker', ()=>{ + process.env.NODE_ENV = 'docker'; + + forceSSL(null, null, nextFn); + + expect(res.redirect).not.toHaveBeenCalled(); + expect(nextFn).toHaveBeenCalled(); + }); + + it('should redirect with 302 when header is not HTTPS and NODE_ENV is not local or docker', ()=>{ + process.env.NODE_ENV = 'test'; + + forceSSL(req, res, nextFn); + + expect(res.redirect).toHaveBeenCalledWith(302, 'https://testURL'); + expect(nextFn).not.toHaveBeenCalled(); + }); + + it('should not redirect when header is HTTPS and NODE_ENV is not local or docker', ()=>{ + process.env.NODE_ENV = 'test'; + req.header = ()=>{ return 'https'; }; + + forceSSL(req, res, nextFn); + + expect(res.redirect).not.toHaveBeenCalled(); + expect(nextFn).toHaveBeenCalled(); + }); + +}); \ No newline at end of file