mirror of
https://github.com/immich-app/immich.git
synced 2025-12-22 01:11:20 +03:00
refactor: controller tests (#18100)
This commit is contained in:
@@ -1,4 +1,5 @@
|
||||
import { AuthController } from 'src/controllers/auth.controller';
|
||||
import { LoginResponseDto } from 'src/dtos/auth.dto';
|
||||
import { AuthService } from 'src/services/auth.service';
|
||||
import request from 'supertest';
|
||||
import { errorDto } from 'test/medium/responses';
|
||||
@@ -14,6 +15,7 @@ describe(AuthController.name, () => {
|
||||
});
|
||||
|
||||
beforeEach(() => {
|
||||
service.resetAllMocks();
|
||||
ctx.reset();
|
||||
});
|
||||
|
||||
@@ -56,5 +58,88 @@ describe(AuthController.name, () => {
|
||||
expect(status).toEqual(201);
|
||||
expect(service.adminSignUp).toHaveBeenCalledWith(expect.objectContaining({ email: 'admin@immich.cloud' }));
|
||||
});
|
||||
|
||||
it('should accept an email with a local domain', async () => {
|
||||
const { status } = await request(ctx.getHttpServer())
|
||||
.post('/auth/admin-sign-up')
|
||||
.send({ name: 'admin', password: 'password', email: 'admin@local' });
|
||||
expect(status).toEqual(201);
|
||||
});
|
||||
});
|
||||
|
||||
describe('POST /auth/login', () => {
|
||||
it(`should require an email and password`, async () => {
|
||||
const { status, body } = await request(ctx.getHttpServer()).post('/auth/login').send({ name: 'admin' });
|
||||
expect(status).toBe(400);
|
||||
expect(body).toEqual(
|
||||
errorDto.badRequest([
|
||||
'email should not be empty',
|
||||
'email must be an email',
|
||||
'password should not be empty',
|
||||
'password must be a string',
|
||||
]),
|
||||
);
|
||||
});
|
||||
|
||||
it(`should not allow null email`, async () => {
|
||||
const { status, body } = await request(ctx.getHttpServer())
|
||||
.post('/auth/login')
|
||||
.send({ name: 'admin', email: null, password: 'password' });
|
||||
expect(status).toBe(400);
|
||||
expect(body).toEqual(errorDto.badRequest(['email should not be empty', 'email must be an email']));
|
||||
});
|
||||
|
||||
it(`should not allow null password`, async () => {
|
||||
const { status, body } = await request(ctx.getHttpServer())
|
||||
.post('/auth/login')
|
||||
.send({ name: 'admin', email: 'admin@immich.cloud', password: null });
|
||||
expect(status).toBe(400);
|
||||
expect(body).toEqual(errorDto.badRequest(['password should not be empty', 'password must be a string']));
|
||||
});
|
||||
|
||||
it('should reject an invalid email', async () => {
|
||||
service.login.mockResolvedValue({ accessToken: 'access-token' } as LoginResponseDto);
|
||||
|
||||
const { status, body } = await request(ctx.getHttpServer())
|
||||
.post('/auth/login')
|
||||
.send({ name: 'admin', email: [], password: 'password' });
|
||||
|
||||
expect(status).toBe(400);
|
||||
expect(body).toEqual(errorDto.badRequest(['email must be an email']));
|
||||
});
|
||||
|
||||
it('should transform the email to all lowercase', async () => {
|
||||
service.login.mockResolvedValue({ accessToken: 'access-token' } as LoginResponseDto);
|
||||
|
||||
const { status } = await request(ctx.getHttpServer())
|
||||
.post('/auth/login')
|
||||
.send({ name: 'admin', email: 'aDmIn@iMmIcH.ApP', password: 'password' });
|
||||
|
||||
expect(status).toBe(201);
|
||||
expect(service.login).toHaveBeenCalledWith(
|
||||
expect.objectContaining({ email: 'admin@immich.app' }),
|
||||
expect.anything(),
|
||||
);
|
||||
});
|
||||
|
||||
it('should accept an email with a local domain', async () => {
|
||||
service.login.mockResolvedValue({ accessToken: 'access-token' } as LoginResponseDto);
|
||||
|
||||
const { status } = await request(ctx.getHttpServer())
|
||||
.post('/auth/login')
|
||||
.send({ name: 'admin', email: 'admin@local', password: 'password' });
|
||||
|
||||
expect(status).toEqual(201);
|
||||
expect(service.login).toHaveBeenCalledWith(expect.objectContaining({ email: 'admin@local' }), expect.anything());
|
||||
});
|
||||
});
|
||||
|
||||
describe('POST /auth/change-password', () => {
|
||||
it('should be an authenticated route', async () => {
|
||||
await request(ctx.getHttpServer())
|
||||
.post('/auth/change-password')
|
||||
.send({ password: 'password', newPassword: 'Password1234' });
|
||||
expect(ctx.authenticate).toHaveBeenCalled();
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user