diff --git a/packages/web/src/pages/machinery/new-session.spec.tsx b/packages/web/src/pages/machinery/new-session.spec.tsx
new file mode 100644
index 0000000..00d5c6c
--- /dev/null
+++ b/packages/web/src/pages/machinery/new-session.spec.tsx
@@ -0,0 +1,34 @@
+import { render, screen } from '@testing-library/react';
+import { useSessionContext } from '../../contexts/session/SessionContext';
+import NewSession from './new-session';
+
+const setupSessionMock = jest.fn();
+(useSessionContext as jest.Mock) = jest.fn(() => ({
+ setupSession: setupSessionMock,
+ isAuthenticated: true,
+}));
+
+const testSessionID = 'sessionid1234';
+
+it('sets up the session', () => {
+ render();
+
+ expect(useSessionContext).toBeCalled();
+ expect(setupSessionMock).toBeCalledWith('sessionid1234');
+});
+
+it('redirects to the correct location when rp_postauth_redirect is set', async () => {
+ localStorage.setItem('rp_postauth_redirect', '/hello_world');
+ render();
+
+ const bounceLink = screen.getByText("If you aren't redirected soon, click here.");
+ expect(bounceLink.getAttribute('href')).toBe('/hello_world');
+});
+
+it('redirects to the correct location by default', async () => {
+ localStorage.setItem('rp_postauth_redirect', '/servers');
+ render();
+
+ const bounceLink = screen.getByText("If you aren't redirected soon, click here.");
+ expect(bounceLink.getAttribute('href')).toBe('/servers');
+});
diff --git a/packages/web/src/pages/machinery/new-session.tsx b/packages/web/src/pages/machinery/new-session.tsx
index aa80af6..4cc009e 100644
--- a/packages/web/src/pages/machinery/new-session.tsx
+++ b/packages/web/src/pages/machinery/new-session.tsx
@@ -8,10 +8,6 @@ const NewSession = (props: { sessionID: string }) => {
const { setupSession, isAuthenticated } = useSessionContext();
const [postauthUrl, setPostauthUrl] = React.useState('/servers');
- React.useEffect(() => {
- setupSession(props.sessionID);
- }, [props.sessionID, setupSession]);
-
React.useEffect(() => {
const storedPostauthUrl = localStorage.getItem('rp_postauth_redirect');
if (storedPostauthUrl) {
@@ -20,6 +16,13 @@ const NewSession = (props: { sessionID: string }) => {
}
}, [setPostauthUrl]);
+ React.useCallback(
+ (sessionID) => {
+ setupSession(sessionID);
+ },
+ [setupSession]
+ )(props.sessionID);
+
return (
<>