File: /var/www/api-parametros/test/proyectos/proyecto.controller.create.e2e-spec.ts
import * as request from 'supertest';
import { Test } from '@nestjs/testing';
import { INestApplication } from '@nestjs/common';
import { ProyectoModule } from '../../src/app/proyectos/proyecto.module';
import { ProyectoSchema } from '../../src/app/proyectos/schemas/proyecto.schema';
import mongoose from 'mongoose';
import { MongoMemoryServer } from 'mongodb-memory-server';
import { MongooseModule } from '@nestjs/mongoose';
jest.setTimeout(30000);
describe('ProyectoController.create', () => {
let app: INestApplication;
let mongoServer;
let proyectoModel = mongoose.model('Proyecto', ProyectoSchema);
const seederProyecto = {
nombre: 'Proyecto test',
descripcion: 'Este es un proyecto de test',
};
beforeAll(async () => {
mongoServer = await MongoMemoryServer.create();
const uri = mongoServer.getUri();
await mongoose.connect(uri);
proyectoModel = mongoose.model('Proyecto', ProyectoSchema);
});
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,
}),
}),
ProyectoModule,
],
}).compile();
app = moduleRef.createNestApplication();
await app.init();
});
afterEach(async () => {
await proyectoModel.deleteMany({});
if (app) await app.close();
});
describe('POST proyectos', () => {
it('debe retornar un error 400 si no se envían datos', async () => {
const expectResponse = {
message: [
'nombre no debe exceder los 60 caracteres.',
'nombre no debe estar vacío.',
'nombre debe ser una cadena de texto.',
'descripcion no debe exceder los 700 caracteres.',
'descripcion no debe estar vacío.',
'descripcion debe ser una cadena de texto.',
],
error: 'Bad Request',
statusCode: 400,
};
const response = await request(app.getHttpServer())
.post('/proyectos')
.set({
'Content-Type': 'application/json',
Accept: 'application/json',
})
.send({})
.expect(400);
expect(response.body).toEqual(expectResponse);
});
it('debe crear un proyecto correctamente', async () => {
const payload = seederProyecto;
const response = await request(app.getHttpServer())
.post('/proyectos')
.set({
'Content-Type': 'application/json',
Accept: 'application/json',
})
.send(payload)
.expect(201);
const data = response.body.data;
expect(data.nombre).toEqual(payload.nombre);
expect(data.descripcion).toEqual(payload.descripcion);
expect(response.body.message).toEqual('Registro exitoso');
expect(response.body.summary).toEqual('El elemento fue creado');
});
});
});