File: /var/www/api-management/test/roles/role.controller.findOne.e2e-spec.ts
import * as request from 'supertest';
import { Test } from '@nestjs/testing';
import { INestApplication } from '@nestjs/common';
import { RoleModule } from '../../src/app/roles/role.module';
import { RoleSchema } from '../../src/app/roles/schemas/role.schema';
import mongoose from 'mongoose';
import { MongoMemoryServer } from 'mongodb-memory-server';
import { MongooseModule } from '@nestjs/mongoose';
jest.setTimeout(30000);
describe('RoleController (e2e)', () => {
let app: INestApplication;
let mongoServer;
let roleModel = mongoose.model('Role', RoleSchema);
let role;
// Seeder para el rol de prueba
const seederRole = {
nombre: 'Administrador',
slug: 'administrador',
descripcion: 'Rol con todos los permisos',
permisos: [new mongoose.Types.ObjectId().toHexString()],
};
beforeAll(async () => {
mongoServer = await MongoMemoryServer.create();
const uri = mongoServer.getUri();
await mongoose.connect(uri);
roleModel = mongoose.model('Role', RoleSchema);
});
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,
}),
}),
RoleModule,
],
}).compile();
// Crear rol de prueba en la base de datos
role = await roleModel.create(seederRole);
app = moduleRef.createNestApplication();
await app.init();
});
afterEach(async () => {
// Limpiar la base de datos después de cada prueba
await roleModel.deleteMany({});
if (app) await app.close();
});
describe('GET /roles/:id', () => {
it('debe retornar un rol por su ID', async () => {
const expectedResponse = {
data: {
_id: role._id.toString(),
nombre: role.nombre,
slug: role.slug,
descripcion: role.descripcion,
permisos: role.permisos,
},
message: 'Consulta exitosa',
summary: 'El elemento fue encontrado',
};
const response = await request(app.getHttpServer())
.get(`/roles/${role._id}`)
.set({
'Content-Type': 'application/json',
Accept: 'application/json',
})
.expect(200);
expect(response.body).toEqual(expectedResponse);
});
});
});