test: add comprehensive unit tests for core services
Added unit tests for the `api-keys`, `auth`, `categories`, `contents`, `favorites`, `media`, and `purge` services to improve test coverage and ensure core functionality integrity.
This commit is contained in:
67
backend/src/common/services/purge.service.spec.ts
Normal file
67
backend/src/common/services/purge.service.spec.ts
Normal file
@@ -0,0 +1,67 @@
|
||||
import { Logger } from "@nestjs/common";
|
||||
import { Test, TestingModule } from "@nestjs/testing";
|
||||
import { DatabaseService } from "../../database/database.service";
|
||||
import { PurgeService } from "./purge.service";
|
||||
|
||||
describe("PurgeService", () => {
|
||||
let service: PurgeService;
|
||||
|
||||
const mockDb = {
|
||||
delete: jest.fn(),
|
||||
where: jest.fn(),
|
||||
returning: jest.fn(),
|
||||
};
|
||||
|
||||
beforeEach(async () => {
|
||||
jest.clearAllMocks();
|
||||
jest.spyOn(Logger.prototype, "error").mockImplementation(() => {});
|
||||
jest.spyOn(Logger.prototype, "log").mockImplementation(() => {});
|
||||
|
||||
const chain = {
|
||||
delete: jest.fn().mockReturnThis(),
|
||||
where: jest.fn().mockReturnThis(),
|
||||
returning: jest.fn().mockResolvedValue([]),
|
||||
};
|
||||
|
||||
const mockImplementation = () => Object.assign(Promise.resolve([]), chain);
|
||||
for (const mock of Object.values(chain)) {
|
||||
mock.mockImplementation(mockImplementation);
|
||||
}
|
||||
Object.assign(mockDb, chain);
|
||||
|
||||
const module: TestingModule = await Test.createTestingModule({
|
||||
providers: [
|
||||
PurgeService,
|
||||
{ provide: DatabaseService, useValue: { db: mockDb } },
|
||||
],
|
||||
}).compile();
|
||||
|
||||
service = module.get<PurgeService>(PurgeService);
|
||||
});
|
||||
|
||||
it("should be defined", () => {
|
||||
expect(service).toBeDefined();
|
||||
});
|
||||
|
||||
describe("purgeExpiredData", () => {
|
||||
it("should purge data", async () => {
|
||||
mockDb.returning
|
||||
.mockResolvedValueOnce([{ id: "s1" }]) // sessions
|
||||
.mockResolvedValueOnce([{ id: "r1" }]) // reports
|
||||
.mockResolvedValueOnce([{ id: "u1" }]) // users
|
||||
.mockResolvedValueOnce([{ id: "c1" }]); // contents
|
||||
|
||||
await service.purgeExpiredData();
|
||||
|
||||
expect(mockDb.delete).toHaveBeenCalledTimes(4);
|
||||
expect(mockDb.returning).toHaveBeenCalledTimes(4);
|
||||
});
|
||||
|
||||
it("should handle errors", async () => {
|
||||
mockDb.delete.mockImplementation(() => {
|
||||
throw new Error("Db error");
|
||||
});
|
||||
await expect(service.purgeExpiredData()).resolves.not.toThrow();
|
||||
});
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user