File: /var/www/api-management/test/users/user.controller.update.e2e-spec.ts
import * as request from 'supertest';
import { Test } from '@nestjs/testing';
import { INestApplication } from '@nestjs/common';
import { UserModule } from '../../src/app/user/user.module';
import { UserSchema } from '../../src/app/user/schemas/user.schema';
import mongoose from 'mongoose';
import { MongoMemoryServer } from 'mongodb-memory-server';
import { MongooseModule } from '@nestjs/mongoose';
jest.setTimeout(40000);
describe('UserController.update', () => {
let app: INestApplication;
let mongoServer;
let userModel = mongoose.model('User', UserSchema);
let user;
const seederUser = {
tipoIdentificacion: {
_id: new mongoose.Types.ObjectId(),
nombre: 'Cédula',
},
identificacion: '123456789',
nombres: 'Juan',
apellidos: 'Pérez',
email: 'juan.perez@example.com',
password: 'Password123',
roles: [
{
_id: new mongoose.Types.ObjectId(),
nombre: 'admin',
},
],
};
beforeAll(async () => {
mongoServer = await MongoMemoryServer.create();
const uri = mongoServer.getUri();
await mongoose.connect(uri);
userModel = mongoose.model('User', UserSchema);
});
afterAll(async () => {
await mongoose.disconnect();
await mongoServer.stop();
});
beforeEach(async () => {
const moduleRef = await Test.createTestingModule({
imports: [
MongooseModule.forRootAsync({
useFactory: () => ({
uri: mongoServer.getUri(),
useNewUrlParser: true,
useUnifiedTopology: true,
}),
}),
UserModule,
],
}).compile();
app = moduleRef.createNestApplication();
await app.init();
// Crear el usuario inicial para la prueba de actualización
user = await userModel.create(seederUser);
});
afterEach(async () => {
await userModel.deleteMany({});
if (app) await app.close();
});
describe('PUT /users/:id', () => {
it('debe actualizar un usuario correctamente', async () => {
const payload = {
identificacion: '987654321', // Nuevo identificador
nombres: 'Juan Carlos', // Nuevo nombre
apellidos: 'Pérez Martínez', // Nuevos apellidos
email: 'juan.perez.martinez@example.com', // Nuevo email
roles: [
{
_id: user.roles[0]._id, // Mantener el rol existente
nombre: 'admin',
},
],
};
const response = await request(app.getHttpServer())
.put(`/users/${user._id}`)
.set({
'Content-Type': 'application/json',
Accept: 'application/json',
})
.send(payload)
.expect(200);
const data = response.body.data;
// Verificaciones
expect(data.identificacion).toEqual(payload.identificacion);
expect(data.nombres).toEqual(payload.nombres);
expect(data.apellidos).toEqual(payload.apellidos);
expect(data.email).toEqual(payload.email);
expect(response.body.message).toEqual('Registro exitoso');
expect(response.body.summary).toEqual('El elemento fue editado');
});
});
});