import { beforeEach, describe, expect, it } from "vitest"; import { authContainer } from "@/di/container"; import { AUTH_SYMBOLS } from "@/di/symbols"; import { MockUsersRepository } from "@/infrastructure/repositories/users.repository.mock"; import { MockAuthenticationService } from "@/infrastructure/services/authentication.service.mock"; import type { IUsersRepository } from "@/application/repositories/users.repository.interface"; import type { IAuthenticationService } from "@/application/services/authentication.service.interface"; import { InputParseError } from "@/entities/errors/common"; import { signOutController } from "./sign-out.controller"; describe("signOutController", () => { beforeEach(() => { if (authContainer.isBound(AUTH_SYMBOLS.IUsersRepository)) { authContainer.unbind(AUTH_SYMBOLS.IUsersRepository); } if (authContainer.isBound(AUTH_SYMBOLS.IAuthenticationService)) { authContainer.unbind(AUTH_SYMBOLS.IAuthenticationService); } const usersRepo = new MockUsersRepository(); const authService = new MockAuthenticationService(usersRepo); authContainer .bind(AUTH_SYMBOLS.IUsersRepository) .toConstantValue(usersRepo); authContainer .bind(AUTH_SYMBOLS.IAuthenticationService) .toConstantValue(authService); }); it("returns a blank cookie", async () => { const cookie = await signOutController("session_anything"); expect(cookie.name).toBe("session"); expect(cookie.value).toBe(""); }); it("throws InputParseError when sessionId is missing", async () => { await expect(signOutController(undefined)).rejects.toBeInstanceOf( InputParseError, ); }); });