diff --git a/spec/route.private.spec.js b/spec/route.private.spec.js new file mode 100644 index 0000000..70f3e50 --- /dev/null +++ b/spec/route.private.spec.js @@ -0,0 +1,42 @@ +import React from 'react' +import { shallow } from 'enzyme' +import { Redirect, Route } from 'react-router-dom' + +import PrivateRoute from '../src/route.private' + +describe('Private Route', () => { + let auth0MockResult + + beforeEach(() => { + auth0MockResult = { + isLoggedIn: jest.fn(), + setNextPath: jest.fn(), + options: { + loginRoot: '/login', + }, + } + + window.ReactRouterAuth0Provider = auth0MockResult + }) + + it('should set a return path and redirect when user is not logged in', () => { + auth0MockResult.isLoggedIn = jest.fn().mockReturnValue(false) + + const wrapper = shallow() + + expect(window.ReactRouterAuth0Provider.isLoggedIn).toHaveBeenCalled() + expect(window.ReactRouterAuth0Provider.setNextPath).toHaveBeenCalled() + expect(wrapper.find(Redirect)).toHaveLength(1) + }) + + + it('should render a react router Route when user is logged in', () => { + auth0MockResult.isLoggedIn = jest.fn().mockReturnValue(true) + + const wrapper = shallow() + + expect(window.ReactRouterAuth0Provider.isLoggedIn).toHaveBeenCalled() + expect(window.ReactRouterAuth0Provider.setNextPath).not.toHaveBeenCalled() + expect(wrapper.find(Route)).toHaveLength(1) + }) +}) diff --git a/src/route.private.jsx b/src/route.private.jsx index 4869ecb..4b8d53e 100644 --- a/src/route.private.jsx +++ b/src/route.private.jsx @@ -4,7 +4,7 @@ import { Route, Redirect } from 'react-router-dom' export default class PrivateRoute extends Route { render() { if (!window.ReactRouterAuth0Provider.isLoggedIn()) { - window.ReactRouterAuth0Provider.setNextPath(this.props.location.pathname) + window.ReactRouterAuth0Provider.setNextPath(this.props.location && this.props.location.pathname) return }