diff --git a/src/App.jsx b/src/App.jsx index faed1727..1aaa8617 100644 --- a/src/App.jsx +++ b/src/App.jsx @@ -19,7 +19,7 @@ import FullPageLoading from './components/FullPageLoading'; const Explorer = lazy(() => import('./components/explorer')); const AnonymousLanding = lazy(() => import('./components/anonymous')); -class App extends Component { +export class App extends Component { constructor(props) { super(props); @@ -87,12 +87,17 @@ class App extends Component { } redirectLink() { + if (this.redirectURL !== undefined) { + return this.redirectURL; + } + let url = '/'; if (typeof window.sessionStorage !== 'undefined' && sessionStorage.getItem('redirectURL') !== null) { url = sessionStorage.getItem('redirectURL'); sessionStorage.removeItem('redirectURL'); } - return url; + this.redirectURL = url; + return this.redirectURL; } authRoutes() { diff --git a/src/__tests__/App.test.jsx b/src/__tests__/App.test.jsx index 480c5eb8..79794183 100644 --- a/src/__tests__/App.test.jsx +++ b/src/__tests__/App.test.jsx @@ -1,6 +1,6 @@ /* eslint-env jest */ import { act, render } from '@testing-library/react'; -import App from '../App'; +import App, { App as AppComponent } from '../App'; describe('App', () => { it('should not crash', () => { @@ -8,4 +8,14 @@ describe('App', () => { render(); }); }); + + it('preserves the login redirect across renders', () => { + const route = '/0123456789abcdef/00000000--0123456789/0/60'; + window.sessionStorage.setItem('redirectURL', route); + const app = new AppComponent({}); + + expect(app.redirectLink()).toBe(route); + expect(window.sessionStorage.getItem('redirectURL')).toBeNull(); + expect(app.redirectLink()).toBe(route); + }); });