mirror of
https://github.com/Sea-Haven-Industries/shoc-frontend-new.git
synced 2026-10-06 18:12:05 +00:00
66 lines
2.2 KiB
TypeScript
66 lines
2.2 KiB
TypeScript
import type { ReactNode } from "react";
|
|
import { QueryClient, QueryClientProvider } from "@tanstack/react-query";
|
|
import { act, renderHook, waitFor } from "@testing-library/react";
|
|
import { toast } from "react-toastify";
|
|
import { beforeEach, describe, expect, it, vi } from "vitest";
|
|
|
|
import { teamMembersApi } from "@/domain/team-members/api/team-members-api";
|
|
import type {
|
|
CreateTeamMemberInput,
|
|
TeamMemberCreated,
|
|
} from "@/domain/team-members/types/team-member";
|
|
import {
|
|
INVITE_EMAIL_FAILED_MESSAGE,
|
|
useCreateTeamMember,
|
|
} from "@/domain/team-members/use-cases/use-create-team-member";
|
|
|
|
vi.mock("react-toastify", () => ({
|
|
toast: { success: vi.fn(), warning: vi.fn(), error: vi.fn() },
|
|
}));
|
|
|
|
vi.mock("@/domain/team-members/api/team-members-api", () => ({
|
|
teamMembersApi: { create: vi.fn() },
|
|
}));
|
|
|
|
const CREATED: TeamMemberCreated = {
|
|
id: "user-7",
|
|
name: "Taylor Reed",
|
|
role: "Dispatcher",
|
|
color: "#0D9488",
|
|
email: "taylor@example.com",
|
|
phone: "555-0100",
|
|
serviceAreas: ["East"],
|
|
pendingRegistration: true,
|
|
};
|
|
|
|
function wrapper({ children }: { children: ReactNode }) {
|
|
const client = new QueryClient({ defaultOptions: { mutations: { retry: false } } });
|
|
return <QueryClientProvider client={client}>{children}</QueryClientProvider>;
|
|
}
|
|
|
|
async function create(created: TeamMemberCreated) {
|
|
vi.mocked(teamMembersApi.create).mockResolvedValue(created);
|
|
const { result } = renderHook(() => useCreateTeamMember(), { wrapper });
|
|
act(() => result.current.mutate({} as CreateTeamMemberInput));
|
|
await waitFor(() => expect(result.current.isSuccess).toBe(true));
|
|
}
|
|
|
|
describe("useCreateTeamMember", () => {
|
|
beforeEach(() => {
|
|
vi.clearAllMocks();
|
|
});
|
|
|
|
it("confirms the pending member when the invite email went out", async () => {
|
|
await create({ ...CREATED, inviteEmailSent: true });
|
|
|
|
expect(toast.success).toHaveBeenCalledWith("Team member created with pending registration.");
|
|
expect(toast.warning).not.toHaveBeenCalled();
|
|
});
|
|
|
|
it("warns the admin to re-send when the invite email could not be sent", async () => {
|
|
await create({ ...CREATED, inviteEmailSent: false });
|
|
|
|
expect(toast.warning).toHaveBeenCalledWith(INVITE_EMAIL_FAILED_MESSAGE);
|
|
expect(toast.success).not.toHaveBeenCalled();
|
|
});
|
|
});
|