test(auth): write basic unit tests for authStore actions
This commit is contained in:
123
src/features/auth/model/stores/authStore/authStore.spec.ts
Normal file
123
src/features/auth/model/stores/authStore/authStore.spec.ts
Normal file
@@ -0,0 +1,123 @@
|
||||
import { setupServer } from "msw/node";
|
||||
import {
|
||||
loginMock,
|
||||
registerMock,
|
||||
logoutMock,
|
||||
refreshMock,
|
||||
} from "../../../api/calls";
|
||||
import { defaultStoreState, useAuthStore } from "./authStore";
|
||||
import {
|
||||
MOCK_EMAIL,
|
||||
MOCK_NEW_EMAIL,
|
||||
MOCK_PASSWORD,
|
||||
MOCK_TOKEN,
|
||||
} from "../../../api/calls/mocks";
|
||||
|
||||
const server = setupServer(loginMock, registerMock, logoutMock, refreshMock);
|
||||
|
||||
describe("authStore", () => {
|
||||
beforeAll(() => server.listen({ onUnhandledRequest: "error" }));
|
||||
afterEach(() => {
|
||||
useAuthStore.getState().reset();
|
||||
server.resetHandlers();
|
||||
});
|
||||
afterAll(() => server.close());
|
||||
|
||||
describe("reset", () => {
|
||||
it("should reset the store to default state", () => {
|
||||
useAuthStore.getState().reset();
|
||||
expect(useAuthStore.getState()).toMatchObject({ ...defaultStoreState });
|
||||
});
|
||||
});
|
||||
|
||||
describe("login", () => {
|
||||
it("should set access token, user data, and update status after successful login", async () => {
|
||||
await useAuthStore
|
||||
.getState()
|
||||
.login({ email: MOCK_EMAIL, password: MOCK_PASSWORD });
|
||||
|
||||
const { accessToken, user, status, error } = useAuthStore.getState();
|
||||
|
||||
expect(accessToken).toBeDefined();
|
||||
expect(user).toBeDefined();
|
||||
expect(status).toBe("authenticated");
|
||||
expect(error).toBeNull();
|
||||
});
|
||||
|
||||
it("should set error and update status if login fails", async () => {
|
||||
await useAuthStore
|
||||
.getState()
|
||||
.login({ email: "wrong@test.com", password: "wrongPassword" });
|
||||
|
||||
const { status, error } = useAuthStore.getState();
|
||||
|
||||
expect(status).toBe("unauthenticated");
|
||||
expect(error).toBeDefined();
|
||||
});
|
||||
});
|
||||
|
||||
describe("register", () => {
|
||||
it("should set access token, user data, and update status after successful registration", async () => {
|
||||
await useAuthStore
|
||||
.getState()
|
||||
.register({ email: MOCK_NEW_EMAIL, password: MOCK_PASSWORD });
|
||||
|
||||
const { accessToken, user, status, error } = useAuthStore.getState();
|
||||
|
||||
expect(accessToken).toBeDefined();
|
||||
expect(user).toBeDefined();
|
||||
expect(status).toBe("authenticated");
|
||||
expect(error).toBeNull();
|
||||
});
|
||||
|
||||
it("should set error and update status if registration fails", async () => {
|
||||
await useAuthStore
|
||||
.getState()
|
||||
.register({ email: MOCK_EMAIL, password: MOCK_PASSWORD });
|
||||
|
||||
const { status, error } = useAuthStore.getState();
|
||||
|
||||
expect(status).toBe("unauthenticated");
|
||||
expect(error).toBeDefined();
|
||||
});
|
||||
});
|
||||
|
||||
describe("logout", () => {
|
||||
it("should clear access token, user data, and update status after logout", async () => {
|
||||
await useAuthStore.getState().logout();
|
||||
|
||||
const { accessToken, user, status, error } = useAuthStore.getState();
|
||||
|
||||
expect(accessToken).toBeUndefined();
|
||||
expect(user).toBeUndefined();
|
||||
expect(status).toBe("unauthenticated");
|
||||
expect(error).toBeNull();
|
||||
});
|
||||
});
|
||||
|
||||
describe("refresh", () => {
|
||||
it("should update access token and user data after successful refresh", async () => {
|
||||
useAuthStore.setState({ accessToken: MOCK_TOKEN });
|
||||
|
||||
await useAuthStore.getState().refresh();
|
||||
|
||||
const { accessToken, user, status, error } = useAuthStore.getState();
|
||||
|
||||
expect(accessToken).toBeDefined();
|
||||
expect(user).toBeDefined();
|
||||
expect(status).toBe("authenticated");
|
||||
expect(error).toBeNull();
|
||||
});
|
||||
|
||||
it("should set error and update status if refresh fails", async () => {
|
||||
useAuthStore.setState({ accessToken: "old_token" });
|
||||
|
||||
await useAuthStore.getState().refresh();
|
||||
|
||||
const { status, error } = useAuthStore.getState();
|
||||
|
||||
expect(status).toBe("unauthenticated");
|
||||
expect(error).toBeDefined();
|
||||
});
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user