test: add unit tests for messaging, comments, events, and user services
- Added comprehensive unit tests for `MessagesService`, `CommentsService`, `EventsGateway`, and enhancements in `UsersService`. - Ensured proper mocking and test coverage for newly introduced dependencies like `EventsGateway` and `RBACService`.
This commit is contained in:
82
backend/src/comments/comments.service.spec.ts
Normal file
82
backend/src/comments/comments.service.spec.ts
Normal file
@@ -0,0 +1,82 @@
|
||||
import { ForbiddenException, NotFoundException } from "@nestjs/common";
|
||||
import { Test, TestingModule } from "@nestjs/testing";
|
||||
import { CommentsService } from "./comments.service";
|
||||
import { CommentsRepository } from "./repositories/comments.repository";
|
||||
|
||||
describe("CommentsService", () => {
|
||||
let service: CommentsService;
|
||||
let repository: CommentsRepository;
|
||||
|
||||
const mockCommentsRepository = {
|
||||
create: jest.fn(),
|
||||
findAllByContentId: jest.fn(),
|
||||
findOne: jest.fn(),
|
||||
delete: jest.fn(),
|
||||
};
|
||||
|
||||
beforeEach(async () => {
|
||||
const module: TestingModule = await Test.createTestingModule({
|
||||
providers: [
|
||||
CommentsService,
|
||||
{ provide: CommentsRepository, useValue: mockCommentsRepository },
|
||||
],
|
||||
}).compile();
|
||||
|
||||
service = module.get<CommentsService>(CommentsService);
|
||||
repository = module.get<CommentsRepository>(CommentsRepository);
|
||||
});
|
||||
|
||||
it("should be defined", () => {
|
||||
expect(service).toBeDefined();
|
||||
});
|
||||
|
||||
describe("create", () => {
|
||||
it("should create a comment", async () => {
|
||||
const userId = "user1";
|
||||
const contentId = "content1";
|
||||
const dto = { text: "Nice meme" };
|
||||
mockCommentsRepository.create.mockResolvedValue({ id: "c1", ...dto });
|
||||
|
||||
const result = await service.create(userId, contentId, dto);
|
||||
expect(result.id).toBe("c1");
|
||||
expect(repository.create).toHaveBeenCalledWith({
|
||||
userId,
|
||||
contentId,
|
||||
text: dto.text,
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
describe("findAllByContentId", () => {
|
||||
it("should return comments for a content", async () => {
|
||||
mockCommentsRepository.findAllByContentId.mockResolvedValue([{ id: "c1" }]);
|
||||
const result = await service.findAllByContentId("content1");
|
||||
expect(result).toHaveLength(1);
|
||||
expect(repository.findAllByContentId).toHaveBeenCalledWith("content1");
|
||||
});
|
||||
});
|
||||
|
||||
describe("remove", () => {
|
||||
it("should remove comment if owner", async () => {
|
||||
mockCommentsRepository.findOne.mockResolvedValue({ userId: "u1" });
|
||||
await service.remove("u1", "c1");
|
||||
expect(repository.delete).toHaveBeenCalledWith("c1");
|
||||
});
|
||||
|
||||
it("should remove comment if admin", async () => {
|
||||
mockCommentsRepository.findOne.mockResolvedValue({ userId: "u1" });
|
||||
await service.remove("other", "c1", true);
|
||||
expect(repository.delete).toHaveBeenCalledWith("c1");
|
||||
});
|
||||
|
||||
it("should throw NotFoundException if comment does not exist", async () => {
|
||||
mockCommentsRepository.findOne.mockResolvedValue(null);
|
||||
await expect(service.remove("u1", "c1")).rejects.toThrow(NotFoundException);
|
||||
});
|
||||
|
||||
it("should throw ForbiddenException if not owner and not admin", async () => {
|
||||
mockCommentsRepository.findOne.mockResolvedValue({ userId: "u1" });
|
||||
await expect(service.remove("other", "c1")).rejects.toThrow(ForbiddenException);
|
||||
});
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user