Skip to content
Snippets Groups Projects
Commit 9c7e1732 authored by cjenkscybercom's avatar cjenkscybercom
Browse files

CE-1975: add UserImpersonator and common args for stories

parent e472889b
No related branches found
No related tags found
2 merge requests!407CE-2141: 3.0.0,!403CE-1975: add UserImpersonator and common args for stories
Pipeline #164451 passed
...@@ -8,6 +8,7 @@ import { NotificationProvider } from "../components/common/notification/Notifica ...@@ -8,6 +8,7 @@ import { NotificationProvider } from "../components/common/notification/Notifica
import NavigationMenu from "../components/navigation/NavigationMenu"; import NavigationMenu from "../components/navigation/NavigationMenu";
import { MemoryRouter } from "react-router-dom"; import { MemoryRouter } from "react-router-dom";
import { DeployAPIProvider } from "../api/DeployApi"; import { DeployAPIProvider } from "../api/DeployApi";
import { TestUserProvider, UserImpersonator } from "./UserImpersonator";
export function RouterHarness({ children, initialHistory = ["/"] }) { export function RouterHarness({ children, initialHistory = ["/"] }) {
return ( return (
...@@ -22,20 +23,33 @@ export function RouterHarness({ children, initialHistory = ["/"] }) { ...@@ -22,20 +23,33 @@ export function RouterHarness({ children, initialHistory = ["/"] }) {
); );
} }
export function AppHarness({ children, initialHistory = ["/"] }) { export function AppHarness({
children,
initialHistory = ["/"],
useTestUser = false,
...args
}) {
const SelectedUserProvider = useTestUser
? ({ children }) => (
<TestUserProvider>
<UserImpersonator {...args}>{children}</UserImpersonator>
</TestUserProvider>
)
: UserProvider;
return ( return (
<SnackbarProvider <SnackbarProvider
preventDuplicate preventDuplicate
maxSnack="5" maxSnack="5"
> >
<RouterHarness initialHistory={initialHistory}> <RouterHarness initialHistory={initialHistory}>
<UserProvider> <SelectedUserProvider>
<NotificationProvider> <NotificationProvider>
<NavigationMenu> <NavigationMenu>
<Container>{children}</Container> <Container>{children}</Container>
</NavigationMenu> </NavigationMenu>
</NotificationProvider> </NotificationProvider>
</UserProvider> </SelectedUserProvider>
</RouterHarness> </RouterHarness>
</SnackbarProvider> </SnackbarProvider>
); );
......
import React, { useCallback, useContext, useEffect, useState } from "react";
import testUser from "./fixtures/User.json";
import { userContext } from "@ess-ics/ce-ui-common";
const testAuthContext = userContext;
export const defaultUser = testUser;
export const defaultUserRoles = [
"DeploymentToolAdmin",
"DeploymentToolIntegrator"
];
const defaultLogin = (username, password) => {
console.log(
`Login called with username '${username}', password '${password}'`
);
};
const defaultLogout = () => {
console.log("Logout called");
};
const defaultLoginError = "";
const TestAuthContextProvider = ({ children }) => {
const [user, setUser] = useState(defaultUser);
const [userRoles, setUserRoles] = useState(defaultUserRoles);
const [login, setLogin] = useState(defaultLogin);
const [loginError, setLoginError] = useState(defaultLoginError);
const [logout, setLogout] = useState(defaultLogout);
const resetLoginError = useCallback(() => {
setLoginError(defaultLoginError);
}, [setLoginError]);
const value = {
user,
setUser,
userRoles,
setUserRoles,
login,
setLogin,
loginError,
setLoginError,
logout,
setLogout,
resetLoginError
};
return (
<testAuthContext.Provider value={value}>
{children}
</testAuthContext.Provider>
);
};
export const TestUserProvider = ({ children }) => {
return <TestAuthContextProvider>{children}</TestAuthContextProvider>;
};
export const UserImpersonator = ({ user, userRoles, children }) => {
const { setUser, setUserRoles } = useContext(testAuthContext);
useEffect(() => {
setUser(user);
setUserRoles(userRoles);
}, [setUser, setUserRoles, user, userRoles]);
return <>{children}</>;
};
import { defaultUser, defaultUserRoles } from "../../mocks/UserImpersonator";
// see https://storybook.js.org/docs/react/essentials/controls#disable-controls-for-specific-properties // see https://storybook.js.org/docs/react/essentials/controls#disable-controls-for-specific-properties
export const hideStorybookControls = { export const hideStorybookControls = {
table: { table: {
...@@ -11,3 +13,8 @@ export const paginationNoResults = { ...@@ -11,3 +13,8 @@ export const paginationNoResults = {
rows: 10, rows: 10,
page: 0 page: 0
}; };
export const userImpersonatorArgs = {
user: { ...defaultUser },
userRoles: [...defaultUserRoles]
};
...@@ -3,20 +3,30 @@ import { AppHarness } from "../../../mocks/AppHarness"; ...@@ -3,20 +3,30 @@ import { AppHarness } from "../../../mocks/AppHarness";
import { CreateIOCView } from "../../../views/IOC/CreateIOCView"; import { CreateIOCView } from "../../../views/IOC/CreateIOCView";
import { rest } from "msw"; import { rest } from "msw";
import { handlers } from "../../../mocks/handlers"; import { handlers } from "../../../mocks/handlers";
import { userImpersonatorArgs } from "../../utils/common-args";
export default { export default {
title: "Views/IOC/CreateIOCView" title: "Views/IOC/CreateIOCView"
}; };
const Template = () => ( const Template = (args) => (
<AppHarness> <AppHarness
useTestUser
{...args}
>
<CreateIOCView /> <CreateIOCView />
</AppHarness> </AppHarness>
); );
export const Default = () => <Template />; export const Default = (args) => <Template {...args} />;
Default.args = {
...userImpersonatorArgs
};
export const CreateLoading = () => <Template />; export const CreateLoading = (args) => <Template {...args} />;
CreateLoading.args = {
...Default.args
};
CreateLoading.parameters = { CreateLoading.parameters = {
msw: { msw: {
handlers: [ handlers: [
...@@ -25,7 +35,11 @@ CreateLoading.parameters = { ...@@ -25,7 +35,11 @@ CreateLoading.parameters = {
] ]
} }
}; };
export const CreateWithError = () => <Template />;
export const CreateWithError = (args) => <Template {...args} />;
CreateWithError.args = {
...Default.args
};
CreateWithError.parameters = { CreateWithError.parameters = {
msw: { msw: {
handlers: [ handlers: [
......
import React from "react"; import React from "react";
import { AppHarness } from "../../../mocks/AppHarness"; import { AppHarness } from "../../../mocks/AppHarness";
import { IOCDetailsContainer } from "../../../views/IOC/IOCDetailsContainer"; import { IOCDetailsContainer } from "../../../views/IOC/IOCDetailsContainer";
import { userImpersonatorArgs } from "../../utils/common-args";
export default { export default {
title: "Views/IOC/IOCDetailsView" title: "Views/IOC/IOCDetailsView"
}; };
const Template = (args) => ( const Template = (args) => (
<AppHarness> <AppHarness
useTestUser
{...args}
>
<IOCDetailsContainer <IOCDetailsContainer
id={346} id={346}
{...args} {...args}
...@@ -15,9 +19,13 @@ const Template = (args) => ( ...@@ -15,9 +19,13 @@ const Template = (args) => (
</AppHarness> </AppHarness>
); );
export const Default = () => <Template />; export const Default = (args) => <Template {...args} />;
Default.args = {
...userImpersonatorArgs
};
export const Deployable = (args) => <Template {...args} />; export const Deployable = (args) => <Template {...args} />;
Deployable.args = { Deployable.args = {
id: 2 id: 2,
...Default.args
}; };
...@@ -7,7 +7,11 @@ export default { ...@@ -7,7 +7,11 @@ export default {
}; };
export const Default = () => ( export const Default = () => (
<AppHarness initialHistory={["/login"]}> <AppHarness
initialHistory={["/login"]}
useTestUser
user={null}
>
<LoginView /> <LoginView />
</AppHarness> </AppHarness>
); );
import React from "react"; import React from "react";
import { UserDetailsContainer } from "../../../views/UserPage"; import { UserDetailsContainer } from "../../../views/UserPage";
import { AppHarness } from "../../../mocks/AppHarness"; import { AppHarness } from "../../../mocks/AppHarness";
import { userImpersonatorArgs } from "../../utils/common-args";
export default { export default {
title: "Views/UserPage/UserPageView" title: "Views/UserPage/UserPageView"
}; };
export const Default = () => ( const Template = (args) => (
<AppHarness> <AppHarness
useTestUser
{...args}
>
<UserDetailsContainer /> <UserDetailsContainer />
</AppHarness> </AppHarness>
); );
export const Default = (args) => <Template {...args} />;
Default.args = {
...userImpersonatorArgs
};
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment