import { Test, TestingModule } from "@nestjs/testing"; import { ReportsService } from "./reports.service"; import { ReportsRepository } from "./repositories/reports.repository"; describe("ReportsService", () => { let service: ReportsService; let repository: ReportsRepository; const mockReportsRepository = { create: jest.fn(), findAll: jest.fn(), updateStatus: jest.fn(), }; beforeEach(async () => { jest.clearAllMocks(); const module: TestingModule = await Test.createTestingModule({ providers: [ ReportsService, { provide: ReportsRepository, useValue: mockReportsRepository }, ], }).compile(); service = module.get(ReportsService); repository = module.get(ReportsRepository); }); it("should be defined", () => { expect(service).toBeDefined(); }); describe("create", () => { it("should create a report", async () => { const reporterId = "u1"; const data = { contentId: "c1", reason: "spam" } as const; mockReportsRepository.create.mockResolvedValue({ id: "r1", ...data, reporterId, }); const result = await service.create(reporterId, data); expect(result.id).toBe("r1"); expect(repository.create).toHaveBeenCalled(); }); }); describe("findAll", () => { it("should return reports", async () => { mockReportsRepository.findAll.mockResolvedValue([{ id: "r1" }]); const result = await service.findAll(10, 0); expect(result).toHaveLength(1); expect(repository.findAll).toHaveBeenCalledWith(10, 0); }); }); describe("updateStatus", () => { it("should update report status", async () => { mockReportsRepository.updateStatus.mockResolvedValue([ { id: "r1", status: "resolved" }, ]); const result = await service.updateStatus("r1", "resolved"); expect(result[0].status).toBe("resolved"); expect(repository.updateStatus).toHaveBeenCalledWith("r1", "resolved"); }); }); });