Skip to content

Commit

Permalink
rename everything to signout
Browse files Browse the repository at this point in the history
  • Loading branch information
tlangs committed Mar 21, 2024
1 parent de032a0 commit 81ad969
Show file tree
Hide file tree
Showing 24 changed files with 70 additions and 61 deletions.
4 changes: 2 additions & 2 deletions src/auth/AuthContainer.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { ReactNode } from 'react';
import { h } from 'react-hyperscript-helpers';
import { Logout } from 'src/auth/Logout';
import { SignOutPage } from 'src/auth/signout/SignOutPage';
import { fixedSpinnerOverlay } from 'src/components/common';
import { useRoute } from 'src/libs/nav';
import { useStore } from 'src/libs/react-utils';
Expand All @@ -23,7 +23,7 @@ const AuthContainer = ({ children }) => {
const authspinner = () => fixedSpinnerOverlay;

return Utils.cond<ReactNode>(
[name === 'logout-callback', () => h(Logout)],
[name === 'signout-callback', () => h(SignOutPage)],
[signInStatus === 'uninitialized' && !isPublic, authspinner],
[signInStatus === 'signedOut' && !isPublic, () => h(SignIn)],
[userMustRegister, () => h(Register)],
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { render } from '@testing-library/react';
import React from 'react';
import { Logout } from 'src/auth/Logout';
import { OidcUser } from 'src/auth/oidc-broker';
import { SignOutPage } from 'src/auth/signout/SignOutPage';
import { authStore, azureCookieReadyStore, cookieReadyStore, metricStore, oidcStore, userStore } from 'src/libs/state';

type NavExports = typeof import('src/libs/nav');
Expand All @@ -15,7 +15,7 @@ jest.mock(
})
);

describe('Logout', () => {
describe('SignOutPage', () => {
it('clears stores after being redirected to', () => {
// Arrange
cookieReadyStore.update(() => true);
Expand All @@ -25,7 +25,7 @@ describe('Logout', () => {
metricStore.update((state) => ({ ...state, anonymousId: '12345', sessionId: '67890' }));
userStore.update((state) => ({ ...state, enterpriseFeatures: ['github-account-linking'] }));
// Act
render(<Logout />);
render(<SignOutPage />);
// Assert
expect(cookieReadyStore.get()).toBe(false);
expect(azureCookieReadyStore.get().readyForRuntime).toBe(false);
Expand Down
14 changes: 7 additions & 7 deletions src/auth/Logout.tsx → src/auth/signout/SignOutPage.tsx
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
import { useEffect } from 'react';
import { userSignedOut } from 'src/auth/auth-events/signout';
import { userSignedOut } from 'src/auth/signout/sign-out';
import * as Nav from 'src/libs/nav';

export const logoutCallbackLinkName = 'logout-callback';
export const Logout = () => {
export const signOutCallbackLinkName = 'signout-callback';
export const SignOutPage = () => {
useEffect(() => {
try {
userSignedOut();
Expand All @@ -17,9 +17,9 @@ export const Logout = () => {

export const navPaths = [
{
name: logoutCallbackLinkName,
path: '/logout',
component: Logout,
title: 'Logout',
name: signOutCallbackLinkName,
path: '/signout',
component: SignOutPage,
title: 'SignOut',
},
];
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { DeepPartial } from '@terra-ui-packages/core-utils';
import { sessionTimedOutErrorMessage } from 'src/auth/auth-errors';
import { signOut } from 'src/auth/auth-events/signout';
import { removeUserFromLocalState } from 'src/auth/oidc-broker';
import { signOut } from 'src/auth/signout/sign-out';
import { Ajax } from 'src/libs/ajax';
import Events from 'src/libs/events';
import * as Nav from 'src/libs/nav';
Expand Down Expand Up @@ -32,8 +32,9 @@ type NavExports = typeof import('src/libs/nav');
jest.mock('src/libs/nav', (): NavExports => {
return {
...jest.requireActual<NavExports>('src/libs/nav'),
getLink: jest.fn().mockReturnValue({ name: 'logout-callback', query: {} }),
getLink: jest.fn().mockReturnValue({ name: 'signout-callback', query: {} }),
goToPath: jest.fn(),
getWindowOrigin: jest.fn(),
};
});

Expand All @@ -51,7 +52,7 @@ jest.mock('src/libs/state', () => {
};
});

describe('signout', () => {
describe('sign-out', () => {
it('sends sign out metrics', async () => {
// Arrange
const captureEventFn = jest.fn();
Expand Down Expand Up @@ -94,20 +95,23 @@ describe('signout', () => {
// Assert
expect(notify).toHaveBeenCalledWith('info', sessionTimedOutErrorMessage, sessionTimeoutProps);
});
it('redirects to the logout callback page', () => {
it('redirects to the signout callback page', () => {
// Arrange
const signoutRedirectFn = jest.fn();
const hostname = 'https://mycoolhost.horse';
const link = 'signout';
asMockedFn(oidcStore.get).mockReturnValue({
userManager: {
signoutRedirect: signoutRedirectFn,
},
} as unknown as OidcState);
asMockedFn(Nav.getLink).mockReturnValue('logout');
asMockedFn(Nav.getLink).mockReturnValue(link);
asMockedFn(Nav.getWindowOrigin).mockReturnValue(hostname);
// Act
signOut();
// Assert
expect(signoutRedirectFn).toHaveBeenCalledWith({
post_logout_redirect_uri: `${window.location.origin}/logout`,
post_logout_redirect_uri: `${hostname}/${link}`,
});
});
it('logs an error and calls userSignedOut if signoutRedirect throws', () => {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { sessionTimedOutErrorMessage } from 'src/auth/auth-errors';
import { logoutCallbackLinkName } from 'src/auth/Logout';
import { removeUserFromLocalState } from 'src/auth/oidc-broker';
import { signOutCallbackLinkName } from 'src/auth/signout/SignOutPage';
import { Ajax } from 'src/libs/ajax';
import { getSessionStorage } from 'src/libs/browser-storage';
import Events, { MetricsEventName } from 'src/libs/events';
Expand Down Expand Up @@ -38,7 +38,7 @@ export const signOut = (cause: SignOutCause = 'unspecified'): void => {

try {
const userManager = oidcStore.get().userManager;
const redirectUrl = `${window.location.origin}/${Nav.getLink(logoutCallbackLinkName)}`;
const redirectUrl = `${Nav.getWindowOrigin()}/${Nav.getLink(signOutCallbackLinkName)}`;
// This will redirect to the logout callback page, which calls `userSignedOut` and then redirects to the homepage.
userManager!.signoutRedirect({ post_logout_redirect_uri: redirectUrl });
} catch (e: unknown) {
Expand Down Expand Up @@ -76,6 +76,7 @@ const sendSignOutMetrics = async (cause: SignOutCause): Promise<void> => {
};

export const userSignedOut = (redirectFailed = false) => {
// At this point, we are guaranteed to not have a valid token, if the redirect succeeded.
cookieReadyStore.reset();
azureCookieReadyStore.reset();
getSessionStorage().clear();
Expand Down
2 changes: 1 addition & 1 deletion src/components/IdleStatusMonitor.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import _ from 'lodash/fp';
import * as qs from 'qs';
import { useEffect, useState } from 'react';
import { div, h, iframe } from 'react-hyperscript-helpers';
import { signOut } from 'src/auth/auth-events/signout';
import { signOut } from 'src/auth/signout/sign-out';
import ButtonBar from 'src/components/ButtonBar';
import colors from 'src/libs/colors';
import * as Nav from 'src/libs/nav';
Expand Down
2 changes: 1 addition & 1 deletion src/components/TopBar.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ import { Transition } from 'react-transition-group';
import { AlertsIndicator } from 'src/alerts/Alerts';
import { RequiredUpdateAlert } from 'src/alerts/RequiredUpdateAlert';
import { signIn } from 'src/auth/auth';
import { signOut } from 'src/auth/auth-events/signout';
import { signOut } from 'src/auth/signout/sign-out';
import { Clickable, IdContainer, LabeledCheckbox, Link, spinnerOverlay } from 'src/components/common';
import { icon } from 'src/components/icons';
import { TextArea } from 'src/components/input';
Expand Down
6 changes: 3 additions & 3 deletions src/libs/ajax/TermsOfServicePact.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -22,10 +22,10 @@ jest.mock('src/auth/auth', () => {
};
});

type LogoutExports = typeof import('src/auth/auth-events/signout');
type SignOutExports = typeof import('src/auth/signout/sign-out');
jest.mock(
'src/auth/auth-events/signout',
(): LogoutExports => ({
'src/auth/signout/sign-out',
(): SignOutExports => ({
signOut: jest.fn(),
userSignedOut: jest.fn(),
})
Expand Down
6 changes: 3 additions & 3 deletions src/libs/ajax/User.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,10 +16,10 @@ jest.mock(
})
);

type LogoutExports = typeof import('src/auth/auth-events/signout');
type SignOutExports = typeof import('src/auth/signout/sign-out');
jest.mock(
'src/auth/auth-events/signout',
(): LogoutExports => ({
'src/auth/signout/sign-out',
(): SignOutExports => ({
signOut: jest.fn(),
userSignedOut: jest.fn(),
})
Expand Down
8 changes: 4 additions & 4 deletions src/libs/ajax/ajax-common.test.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { getAuthToken, getAuthTokenFromLocalStorage, loadAuthToken } from 'src/auth/auth';
import { sessionTimedOutErrorMessage } from 'src/auth/auth-errors';
import { signOut } from 'src/auth/auth-events/signout';
import { OidcUser } from 'src/auth/oidc-broker';
import { signOut } from 'src/auth/signout/sign-out';
import { asMockedFn } from 'src/testing/test-utils';

import { authOpts, makeRequestRetry, withRetryAfterReloadingExpiredAuthToken } from './ajax-common';
Expand Down Expand Up @@ -52,11 +52,11 @@ jest.mock('src/auth/auth', (): Partial<AuthExports> => {
};
});

type LogoutExports = typeof import('src/auth/auth-events/signout');
type SignOutExports = typeof import('src/auth/signout/sign-out');

jest.mock(
'src/auth/auth-events/signout',
(): Partial<LogoutExports> => ({
'src/auth/signout/sign-out',
(): Partial<SignOutExports> => ({
signOut: jest.fn(),
})
);
Expand Down
2 changes: 1 addition & 1 deletion src/libs/ajax/ajax-common.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ import {
sendRetryMetric,
} from 'src/auth/auth';
import { sessionTimedOutErrorMessage } from 'src/auth/auth-errors';
import { signOut, SignOutCause } from 'src/auth/auth-events/signout';
import { signOut, SignOutCause } from 'src/auth/signout/sign-out';
import { getConfig } from 'src/libs/config';
import { ajaxOverridesStore } from 'src/libs/state';

Expand Down
2 changes: 1 addition & 1 deletion src/libs/ajax/workflows-app/CbasPact.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ jest.mock('src/auth/auth', () => {
signOutAfterSessionTimeout: jest.fn(),
};
});
jest.mock('src/auth/auth-events/signout', () => ({
jest.mock('src/auth/signout/sign-out', () => ({
signOut: jest.fn(),
userSignedOut: jest.fn(),
}));
Expand Down
4 changes: 4 additions & 0 deletions src/libs/nav.ts
Original file line number Diff line number Diff line change
Expand Up @@ -127,6 +127,10 @@ export const getCurrentRoute = () => {
return parseRoute(routeHandlersStore.get(), history.location);
};

export const getWindowOrigin = (): string => {
return window.location.origin;
};

export const useRoute = () => {
const location: any = useContext(locationContext);
const handlers = useStore(routeHandlersStore);
Expand Down
4 changes: 2 additions & 2 deletions src/libs/routes.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import { compile, pathToRegexp } from 'path-to-regexp';
import * as Analysis from 'src/analysis/Analyses';
import * as AnalysisLauncher from 'src/analysis/AnalysisLauncher';
import * as AppLauncher from 'src/analysis/AppLauncher';
import * as Logout from 'src/auth/Logout';
import * as SignOutPage from 'src/auth/signout/SignOutPage';
import * as DataBrowserDetails from 'src/data-catalog/DataBrowserDetails';
import * as DataBrowserPreview from 'src/data-catalog/DataBrowserPreview';
import * as ImportDataPage from 'src/import-data/ImportDataPage';
Expand Down Expand Up @@ -86,7 +86,7 @@ const routes = _.flatten([
WorkspaceFiles.navPaths,
WorkflowsApp.navPaths,
WorkspaceMigration.navPaths,
Logout.navPaths,
SignOutPage.navPaths,
NotFound.navPaths, // must be last
]);

Expand Down
2 changes: 1 addition & 1 deletion src/pages/Disabled.tsx
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { ButtonPrimary } from '@terra-ui-packages/components';
import React, { ReactNode } from 'react';
import { signOut } from 'src/auth/auth-events/signout';
import { signOut } from 'src/auth/signout/sign-out';

export const Disabled = (): ReactNode => {
return (
Expand Down
8 changes: 4 additions & 4 deletions src/profile/Profile.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,12 +11,12 @@ import { useUserProfile } from './useUserProfile';
jest.mock('src/auth/auth');
jest.mock('src/libs/ajax');

type SignoutExports = typeof import('src/auth/auth-events/signout');
type SignOutExports = typeof import('src/auth/signout/sign-out');

jest.mock(
'src/auth/auth-events/signout',
(): SignoutExports => ({
...jest.requireActual('src/auth/auth-events/signout'),
'src/auth/signout/sign-out',
(): SignOutExports => ({
...jest.requireActual('src/auth/signout/sign-out'),
signOut: jest.fn(),
userSignedOut: jest.fn(),
})
Expand Down
4 changes: 2 additions & 2 deletions src/profile/external-identities/NihAccount.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,8 @@ jest.mock('src/libs/nav', () => ({
getLink: jest.fn(() => 'externalIdentities'),
}));

jest.mock('src/auth/auth', () => ({
...jest.requireActual('src/auth/auth'),
jest.mock('src/auth/signout/sign-out', () => ({
...jest.requireActual('src/auth/signout/sign-out'),
signOut: jest.fn(),
}));

Expand Down
6 changes: 3 additions & 3 deletions src/profile/personal-info/PersonalInfo.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,10 @@ import { PersonalInfo } from './PersonalInfo';
// Workaround for import cycle.
jest.mock('src/auth/auth');

type LogoutExports = typeof import('src/auth/auth-events/signout');
type SignOutExports = typeof import('src/auth/signout/sign-out');
jest.mock(
'src/auth/auth-events/signout',
(): LogoutExports => ({
'src/auth/signout/sign-out',
(): SignOutExports => ({
signOut: jest.fn(),
userSignedOut: jest.fn(),
})
Expand Down
6 changes: 3 additions & 3 deletions src/profile/personal-info/useProxyGroup.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,10 +9,10 @@ import { useProxyGroup } from './useProxyGroup';
// Workaround for import cycle.
jest.mock('src/auth/auth');

type LogoutExports = typeof import('src/auth/auth-events/signout');
type SignOutExports = typeof import('src/auth/signout/sign-out');
jest.mock(
'src/auth/auth-events/signout',
(): LogoutExports => ({
'src/auth/signout/sign-out',
(): SignOutExports => ({
signOut: jest.fn(),
userSignedOut: jest.fn(),
})
Expand Down
6 changes: 3 additions & 3 deletions src/profile/useUserProfile.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -20,10 +20,10 @@ jest.mock('src/libs/ajax/User', (): UserExports => {
// Mock the entire auth module to work around the auth/ajax-common import cycle.
jest.mock('src/auth/auth');

type LogoutExports = typeof import('src/auth/auth-events/signout');
type SignOutExports = typeof import('src/auth/signout/sign-out');
jest.mock(
'src/auth/auth-events/signout',
(): LogoutExports => ({
'src/auth/signout/sign-out',
(): SignOutExports => ({
signOut: jest.fn(),
userSignedOut: jest.fn(),
})
Expand Down
6 changes: 3 additions & 3 deletions src/registration/Register.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,16 +3,16 @@ import { act, fireEvent, screen } from '@testing-library/react';
import { axe } from 'jest-axe';
import { h } from 'react-hyperscript-helpers';
import { loadTerraUser } from 'src/auth/auth';
import { signOut } from 'src/auth/auth-events/signout';
import { signOut } from 'src/auth/signout/sign-out';
import { Ajax } from 'src/libs/ajax';
import { asMockedFn, renderWithAppContexts as render } from 'src/testing/test-utils';

import { Register } from './Register';

jest.mock('src/libs/ajax');

jest.mock('src/auth/auth-events/signout', () => ({
...jest.requireActual('src/auth/auth-events/signout'),
jest.mock('src/auth/signout/sign-out', () => ({
...jest.requireActual('src/auth/signout/sign-out'),
signOut: jest.fn(),
userSignedOut: jest.fn(),
}));
Expand Down
2 changes: 1 addition & 1 deletion src/registration/Register.tsx
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { Modal } from '@terra-ui-packages/components';
import React, { ReactNode, useState } from 'react';
import { loadTerraUser } from 'src/auth/auth';
import { signOut } from 'src/auth/auth-events/signout';
import { signOut } from 'src/auth/signout/sign-out';
import { ButtonPrimary, ButtonSecondary, LabeledCheckbox } from 'src/components/common';
import { centeredSpinner } from 'src/components/icons';
import planet from 'src/images/register-planet.svg';
Expand Down
8 changes: 4 additions & 4 deletions src/registration/terms-of-service/TermsOfServicePage.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -29,11 +29,11 @@ jest.mock(

type AuthExports = typeof import('src/auth/auth');

type LogoutExports = typeof import('src/auth/auth-events/signout');
type SignOutExports = typeof import('src/auth/signout/sign-out');
jest.mock(
'src/auth/auth-events/signout',
(): LogoutExports => ({
...jest.requireActual<LogoutExports>('src/auth/auth-events/signout'),
'src/auth/signout/sign-out',
(): SignOutExports => ({
...jest.requireActual<SignOutExports>('src/auth/signout/sign-out'),
signOut: jest.fn(),
})
);
Expand Down
2 changes: 1 addition & 1 deletion src/registration/terms-of-service/TermsOfServicePage.tsx
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import React, { useState } from 'react';
import { loadTerraUser } from 'src/auth/auth';
import { signOut } from 'src/auth/auth-events/signout';
import { signOut } from 'src/auth/signout/sign-out';
import { ButtonPrimary, ButtonSecondary, spinnerOverlay } from 'src/components/common';
import scienceBackground from 'src/images/science-background.jpg';
import { Ajax } from 'src/libs/ajax';
Expand Down

0 comments on commit 81ad969

Please sign in to comment.