import { describe, expect, it, vi } from "vitest"; import { AppService } from "./app.service"; import { AppController } from "./app.controller"; import { PrismaService } from "./prisma/prisma.service"; describe("AppController", () => { const appService = new AppService(); // Mock PrismaService const mockPrismaService = { isHealthy: vi.fn(), getConnectionInfo: vi.fn(), $connect: vi.fn(), $disconnect: vi.fn(), } as unknown as PrismaService; const controller = new AppController(appService, mockPrismaService); describe("getHello", () => { it('should return "Mosaic Stack API"', () => { expect(controller.getHello()).toBe("Mosaic Stack API"); }); }); describe("getHealth", () => { it("should return health status", async () => { // Setup mocks vi.mocked(mockPrismaService.isHealthy).mockResolvedValue(true); vi.mocked(mockPrismaService.getConnectionInfo).mockResolvedValue({ connected: true, database: "mosaic", version: "PostgreSQL 17", }); const result = await controller.getHealth(); expect(result.success).toBe(true); expect(result.data.status).toBe("healthy"); expect(result.data.timestamp).toBeDefined(); expect(result.data.checks.database.status).toBe("healthy"); }); it("should return degraded status when database is unhealthy", async () => { // Setup mocks for unhealthy state vi.mocked(mockPrismaService.isHealthy).mockResolvedValue(false); vi.mocked(mockPrismaService.getConnectionInfo).mockResolvedValue({ connected: false, }); const result = await controller.getHealth(); expect(result.success).toBe(true); expect(result.data.status).toBe("degraded"); expect(result.data.checks.database.status).toBe("unhealthy"); }); }); }); describe("AppService", () => { const service = new AppService(); it('should return "Mosaic Stack API"', () => { expect(service.getHello()).toBe("Mosaic Stack API"); }); });