Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
97 changes: 94 additions & 3 deletions src/user/user.controller.spec.ts
Original file line number Diff line number Diff line change
@@ -1,20 +1,111 @@
import { Test, TestingModule } from '@nestjs/testing';
import { UserController } from './user.controller';
import { UserService } from './user.service';
import { CreateUserDto } from './dto/create-user.dto';
import { UpdateUserDto } from './dto/update-user.dto';

describe('UserController', () => {
let controller: UserController;
// eslint-disable-next-line @typescript-eslint/no-unused-vars
let service: UserService;

const mockUser = {
name: 'Alice',
email: 'alice@mail.com',
password: 'secret',
};

const mockService = {
create: jest.fn(),
findAll: jest.fn(),
findOne: jest.fn(),
update: jest.fn(),
remove: jest.fn(),
};

beforeEach(async () => {
const module: TestingModule = await Test.createTestingModule({
controllers: [UserController],
providers: [UserService],
providers: [{ provide: UserService, useValue: mockService }],
}).compile();

controller = module.get<UserController>(UserController);
service = module.get<UserService>(UserService);

jest.clearAllMocks();
});

describe('create()', () => {
it('should create and return a user ID', () => {
mockService.create.mockReturnValue(1);
const dto: CreateUserDto = mockUser;
const result = controller.create(dto);
expect(result).toBe(1);
expect(mockService.create).toHaveBeenCalledWith(dto);
});

it('should handle create failure (mocked error)', () => {
mockService.create.mockImplementation(() => {
throw new Error('Create failed');
});
expect(() => controller.create(mockUser)).toThrow('Create failed');
});
});

describe('findAll()', () => {
it('should return all users', () => {
mockService.findAll.mockReturnValue([mockUser]);
const result = controller.findAll();
expect(result).toEqual([mockUser]);
});

it('should return an empty array when no users exist', () => {
mockService.findAll.mockReturnValue([]);
const result = controller.findAll();
expect(result).toEqual([]);
});
});

describe('findOne()', () => {
it('should return a user by ID', () => {
mockService.findOne.mockReturnValue(mockUser);
const result = controller.findOne(1);

Check failure on line 72 in src/user/user.controller.spec.ts

View workflow job for this annotation

GitHub Actions / ci

Unsafe assignment of an `any` value
expect(result).toEqual(mockUser);
});

it('should return "user not found" if user doesn’t exist', () => {
mockService.findOne.mockReturnValue(undefined);
const result = controller.findOne(999);

Check failure on line 78 in src/user/user.controller.spec.ts

View workflow job for this annotation

GitHub Actions / ci

Unsafe assignment of an `any` value
expect(result).toBe('user not found');
});
});

it('should be defined', () => {
expect(controller).toBeDefined();
describe('update()', () => {
it('should return success message when update is successful', () => {
mockService.update.mockReturnValue(true);
const dto: UpdateUserDto = { name: 'Updated' };
const result = controller.update(1, dto);
expect(result).toBe('user updated');
});

it('should return failure message when update fails', () => {
mockService.update.mockReturnValue(false);
const result = controller.update(999, { name: 'Nope' });
expect(result).toBe('user not updated');
});
});

describe('remove()', () => {
it('should return success message when user is deleted', () => {
mockService.remove.mockReturnValue(true);
const result = controller.remove(1);
expect(result).toBe('user deleted');
});

it('should return failure message when user is not found', () => {
mockService.remove.mockReturnValue(false);
const result = controller.remove(999);
expect(result).toBe('user could not be deleted');
});
});
});
Loading