const AuthStateComponent = () => {
const { user, signIn, signOut } = useSSO();
createEffect(() => {
console.log("auth state user >>>>", user());
});
return (
<Show
when={user()}
fallback={
<>
<div>Not Authenticated</div>
<button onClick={signIn}>Sign In</button>
</>
}
>
<div>Authenticated</div>
<div>{user()!.profile.name}</div>
<button onClick={signOut}>Sign Out</button>
</Show>
);
};
test("handles successful sign in", async () => {
let userManagerInstance!: UserManager;
function TestWithUserManager() {
const { userManager } = useSSO();
userManagerInstance = userManager();
return <AuthStateComponent />;
}
const signinRedirectMock = vi.fn(async () => {
await userManagerInstance.events.load(mockUser, true);
});
vi.spyOn(UserManager.prototype, "signinRedirect").mockImplementationOnce(signinRedirectMock);
const { findByText } = render(() => (
<SSOProvider authority={TEST_AUTHORITY} client_id={TEST_CLIENT_ID}>
<TestWithUserManager />
</SSOProvider>
));
expect(userManagerInstance).not.toBeUndefined();
await userEvent.click(await findByText("Sign In"));
expect(signinRedirectMock).toHaveBeenCalled();
await waitFor(async () => {
expect(await findByText("Authenticated")).toBeInTheDocument();
});
});
const AuthStateComponent = () => {
const { user, signIn, signOut } = useSSO();
createEffect(() => {
console.log("auth state user >>>>", user());
});
return (
<Show
when={user()}
fallback={
<>
<div>Not Authenticated</div>
<button onClick={signIn}>Sign In</button>
</>
}
>
<div>Authenticated</div>
<div>{user()!.profile.name}</div>
<button onClick={signOut}>Sign Out</button>
</Show>
);
};
test("handles successful sign in", async () => {
let userManagerInstance!: UserManager;
function TestWithUserManager() {
const { userManager } = useSSO();
userManagerInstance = userManager();
return <AuthStateComponent />;
}
const signinRedirectMock = vi.fn(async () => {
await userManagerInstance.events.load(mockUser, true);
});
vi.spyOn(UserManager.prototype, "signinRedirect").mockImplementationOnce(signinRedirectMock);
const { findByText } = render(() => (
<SSOProvider authority={TEST_AUTHORITY} client_id={TEST_CLIENT_ID}>
<TestWithUserManager />
</SSOProvider>
));
expect(userManagerInstance).not.toBeUndefined();
await userEvent.click(await findByText("Sign In"));
expect(signinRedirectMock).toHaveBeenCalled();
await waitFor(async () => {
expect(await findByText("Authenticated")).toBeInTheDocument();
});
});