fix: align auth success status contract

This commit is contained in:
2026-08-24 00:50:48 +03:00
parent c77b3cf782
commit 9bd3400264
3 changed files with 37 additions and 6 deletions
+21
View File
@@ -0,0 +1,21 @@
import { HTTP_CODE_METADATA } from '@nestjs/common/constants';
jest.mock('./auth.service', () => ({
AuthService: class AuthService {},
}));
import { AuthController } from './auth.controller';
describe('AuthController response statuses', () => {
it.each(['register', 'login', 'refresh'] as const)(
'%s explicitly returns HTTP 200',
(handler) => {
// Nest stores @HttpCode metadata on the unbound handler function.
const handlerTarget = Object.getOwnPropertyDescriptor(
AuthController.prototype,
handler,
)?.value as object;
expect(Reflect.getMetadata(HTTP_CODE_METADATA, handlerTarget)).toBe(200);
},
);
});
+3
View File
@@ -49,6 +49,7 @@ export class AuthController {
constructor(private readonly auth: AuthService) {} constructor(private readonly auth: AuthService) {}
@Post('register') @Post('register')
@HttpCode(200)
@ApiOkResponse({ type: AuthenticationDto }) @ApiOkResponse({ type: AuthenticationDto })
async register( async register(
@Body() credentials: CredentialsDto, @Body() credentials: CredentialsDto,
@@ -61,6 +62,7 @@ export class AuthController {
} }
@Post('login') @Post('login')
@HttpCode(200)
@ApiOkResponse({ type: AuthenticationDto }) @ApiOkResponse({ type: AuthenticationDto })
async login( async login(
@Body() credentials: CredentialsDto, @Body() credentials: CredentialsDto,
@@ -73,6 +75,7 @@ export class AuthController {
} }
@Post('refresh') @Post('refresh')
@HttpCode(200)
@ApiOkResponse({ type: AuthenticationDto }) @ApiOkResponse({ type: AuthenticationDto })
async refresh( async refresh(
@Req() request: Request, @Req() request: Request,
+13 -6
View File
@@ -34,7 +34,7 @@ describe('Authentication (e2e)', () => {
const registration = await agent const registration = await agent
.post('/api/v1/auth/register') .post('/api/v1/auth/register')
.send({ email: ' User@Example.com ', password: 'a secure password' }) .send({ email: ' User@Example.com ', password: 'a secure password' })
.expect(201); .expect(200);
const authentication = registration.body as Authentication; const authentication = registration.body as Authentication;
expect(authentication.user.email).toBe('user@example.com'); expect(authentication.user.email).toBe('user@example.com');
@@ -49,7 +49,7 @@ describe('Authentication (e2e)', () => {
); );
const firstCookie = registration.headers['set-cookie'][0]; const firstCookie = registration.headers['set-cookie'][0];
await agent.post('/api/v1/auth/refresh').expect(201); await agent.post('/api/v1/auth/refresh').expect(200);
await request(app.getHttpServer()) await request(app.getHttpServer())
.post('/api/v1/auth/refresh') .post('/api/v1/auth/refresh')
.set('Cookie', firstCookie) .set('Cookie', firstCookie)
@@ -63,7 +63,14 @@ describe('Authentication (e2e)', () => {
await request(app.getHttpServer()) await request(app.getHttpServer())
.post('/api/v1/auth/register') .post('/api/v1/auth/register')
.send({ email: 'user@example.com', password: 'a secure password' }) .send({ email: 'user@example.com', password: 'a secure password' })
.expect(201); .expect(200);
await request(app.getHttpServer())
.post('/api/v1/auth/login')
.send({ email: 'user@example.com', password: 'a secure password' })
.expect(200)
.expect(({ body }: { body: unknown }) =>
expect((body as Authentication).user.email).toBe('user@example.com'),
);
await request(app.getHttpServer()) await request(app.getHttpServer())
.post('/api/v1/auth/register') .post('/api/v1/auth/register')
.send({ email: 'USER@example.com', password: 'a secure password' }) .send({ email: 'USER@example.com', password: 'a secure password' })
@@ -84,7 +91,7 @@ describe('Authentication (e2e)', () => {
const registration = await request(app.getHttpServer()) const registration = await request(app.getHttpServer())
.post('/api/v1/auth/register') .post('/api/v1/auth/register')
.send({ email: 'connection@example.com', password: 'a secure password' }) .send({ email: 'connection@example.com', password: 'a secure password' })
.expect(201); .expect(200);
const accessToken = (registration.body as Authentication).accessToken; const accessToken = (registration.body as Authentication).accessToken;
await request(app.getHttpServer()) await request(app.getHttpServer())
@@ -103,7 +110,7 @@ describe('Authentication (e2e)', () => {
const registration = await request(app.getHttpServer()) const registration = await request(app.getHttpServer())
.post('/api/v1/auth/register') .post('/api/v1/auth/register')
.send({ email: 'accounts@example.com', password: 'a secure password' }) .send({ email: 'accounts@example.com', password: 'a secure password' })
.expect(201); .expect(200);
const accessToken = (registration.body as Authentication).accessToken; const accessToken = (registration.body as Authentication).accessToken;
await request(app.getHttpServer()) await request(app.getHttpServer())
@@ -122,7 +129,7 @@ describe('Authentication (e2e)', () => {
const registration = await request(app.getHttpServer()) const registration = await request(app.getHttpServer())
.post('/api/v1/auth/register') .post('/api/v1/auth/register')
.send({ email: 'portfolio@example.com', password: 'a secure password' }) .send({ email: 'portfolio@example.com', password: 'a secure password' })
.expect(201); .expect(200);
const accessToken = (registration.body as Authentication).accessToken; const accessToken = (registration.body as Authentication).accessToken;
await request(app.getHttpServer()) await request(app.getHttpServer())