test(reports): add unit tests for ReportsController and ReportsRepository with mocked dependencies
This commit is contained in:
69
backend/src/reports/repositories/reports.repository.spec.ts
Normal file
69
backend/src/reports/repositories/reports.repository.spec.ts
Normal file
@@ -0,0 +1,69 @@
|
||||
import { Test, TestingModule } from "@nestjs/testing";
|
||||
import { DatabaseService } from "../../database/database.service";
|
||||
import { ReportsRepository } from "./reports.repository";
|
||||
|
||||
describe("ReportsRepository", () => {
|
||||
let repository: ReportsRepository;
|
||||
|
||||
const mockDb = {
|
||||
select: jest.fn().mockReturnThis(),
|
||||
from: jest.fn().mockReturnThis(),
|
||||
orderBy: jest.fn().mockReturnThis(),
|
||||
where: jest.fn().mockReturnThis(),
|
||||
limit: jest.fn().mockReturnThis(),
|
||||
offset: jest.fn().mockReturnThis(),
|
||||
insert: jest.fn().mockReturnThis(),
|
||||
values: jest.fn().mockReturnThis(),
|
||||
update: jest.fn().mockReturnThis(),
|
||||
set: jest.fn().mockReturnThis(),
|
||||
delete: jest.fn().mockReturnThis(),
|
||||
returning: jest.fn().mockReturnThis(),
|
||||
execute: jest.fn(),
|
||||
};
|
||||
|
||||
const wrapWithThen = (obj: any) => {
|
||||
obj.then = function (onFulfilled: any) {
|
||||
const result = this.execute();
|
||||
return Promise.resolve(result).then(onFulfilled);
|
||||
};
|
||||
return obj;
|
||||
};
|
||||
wrapWithThen(mockDb);
|
||||
|
||||
beforeEach(async () => {
|
||||
const module: TestingModule = await Test.createTestingModule({
|
||||
providers: [
|
||||
ReportsRepository,
|
||||
{ provide: DatabaseService, useValue: { db: mockDb } },
|
||||
],
|
||||
}).compile();
|
||||
|
||||
repository = module.get<ReportsRepository>(ReportsRepository);
|
||||
});
|
||||
|
||||
it("should create report", async () => {
|
||||
(mockDb.execute as jest.Mock).mockResolvedValue([{ id: "1" }]);
|
||||
const result = await repository.create({ reporterId: "u", reason: "spam" });
|
||||
expect(result.id).toBe("1");
|
||||
});
|
||||
|
||||
it("should find all", async () => {
|
||||
(mockDb.execute as jest.Mock).mockResolvedValue([{ id: "1" }]);
|
||||
const result = await repository.findAll(10, 0);
|
||||
expect(result).toHaveLength(1);
|
||||
});
|
||||
|
||||
it("should update status", async () => {
|
||||
(mockDb.execute as jest.Mock).mockResolvedValue([
|
||||
{ id: "1", status: "resolved" },
|
||||
]);
|
||||
const result = await repository.updateStatus("1", "resolved");
|
||||
expect(result[0].status).toBe("resolved");
|
||||
});
|
||||
|
||||
it("should purge obsolete", async () => {
|
||||
(mockDb.execute as jest.Mock).mockResolvedValue([{ id: "1" }]);
|
||||
await repository.purgeObsolete(new Date());
|
||||
expect(mockDb.delete).toHaveBeenCalled();
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user