mirror of
https://github.com/formbricks/formbricks.git
synced 2026-04-24 03:21:20 -05:00
fix: deletes local storage environment id on logout (#5957)
This commit is contained in:
@@ -1,17 +1,61 @@
|
||||
import { useSignOut } from "@/modules/auth/hooks/use-sign-out";
|
||||
import { render } from "@testing-library/react";
|
||||
import { signOut } from "next-auth/react";
|
||||
import { describe, expect, test, vi } from "vitest";
|
||||
import { type MockedFunction, beforeEach, describe, expect, test, vi } from "vitest";
|
||||
import { ClientLogout } from "./index";
|
||||
|
||||
// Mock the localStorage
|
||||
const mockRemoveItem = vi.fn();
|
||||
Object.defineProperty(window, "localStorage", {
|
||||
value: {
|
||||
removeItem: mockRemoveItem,
|
||||
},
|
||||
});
|
||||
|
||||
// Mock next-auth/react
|
||||
vi.mock("next-auth/react", () => ({
|
||||
signOut: vi.fn(),
|
||||
const mockSignOut = vi.fn();
|
||||
vi.mock("@/modules/auth/hooks/use-sign-out", () => ({
|
||||
useSignOut: vi.fn(),
|
||||
}));
|
||||
|
||||
const mockUseSignOut = useSignOut as MockedFunction<typeof useSignOut>;
|
||||
|
||||
describe("ClientLogout", () => {
|
||||
test("calls signOut on render", () => {
|
||||
beforeEach(() => {
|
||||
vi.clearAllMocks();
|
||||
mockUseSignOut.mockReturnValue({
|
||||
signOut: mockSignOut,
|
||||
});
|
||||
});
|
||||
|
||||
test("calls signOut with correct parameters on render", () => {
|
||||
render(<ClientLogout />);
|
||||
expect(signOut).toHaveBeenCalled();
|
||||
|
||||
expect(mockUseSignOut).toHaveBeenCalled();
|
||||
|
||||
expect(mockSignOut).toHaveBeenCalledWith({
|
||||
reason: "forced_logout",
|
||||
redirectUrl: "/auth/login",
|
||||
redirect: false,
|
||||
callbackUrl: "/auth/login",
|
||||
});
|
||||
});
|
||||
|
||||
test("handles missing userId and userEmail", () => {
|
||||
render(<ClientLogout />);
|
||||
|
||||
expect(mockUseSignOut).toHaveBeenCalled();
|
||||
|
||||
expect(mockSignOut).toHaveBeenCalledWith({
|
||||
reason: "forced_logout",
|
||||
redirectUrl: "/auth/login",
|
||||
redirect: false,
|
||||
callbackUrl: "/auth/login",
|
||||
});
|
||||
});
|
||||
|
||||
test("removes environment ID from localStorage", () => {
|
||||
render(<ClientLogout />);
|
||||
expect(mockRemoveItem).toHaveBeenCalledWith("formbricks-environment-id");
|
||||
});
|
||||
|
||||
test("renders null", () => {
|
||||
|
||||
@@ -1,11 +1,20 @@
|
||||
"use client";
|
||||
|
||||
import { signOut } from "next-auth/react";
|
||||
import { FORMBRICKS_ENVIRONMENT_ID_LS } from "@/lib/localStorage";
|
||||
import { useSignOut } from "@/modules/auth/hooks/use-sign-out";
|
||||
import { useEffect } from "react";
|
||||
|
||||
export const ClientLogout = () => {
|
||||
const { signOut: signOutWithAudit } = useSignOut();
|
||||
|
||||
useEffect(() => {
|
||||
signOut();
|
||||
localStorage.removeItem(FORMBRICKS_ENVIRONMENT_ID_LS);
|
||||
signOutWithAudit({
|
||||
reason: "forced_logout",
|
||||
redirectUrl: "/auth/login",
|
||||
redirect: false,
|
||||
callbackUrl: "/auth/login",
|
||||
});
|
||||
});
|
||||
return null;
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user