From 4a6ddc0495f345b78d13534d2b2b9a6fd59c9a16 Mon Sep 17 00:00:00 2001 From: Caio Kinzel Filho Date: Mon, 18 Nov 2019 16:29:28 +0200 Subject: [PATCH] specs for private route --- spec/route.private.spec.js | 42 ++++++++++++++++++++++++++++++++++++++ src/route.private.jsx | 2 +- 2 files changed, 43 insertions(+), 1 deletion(-) create mode 100644 spec/route.private.spec.js 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 }