HEX
Server: Apache/2.4.52 (Ubuntu)
System: Linux ip-172-31-4-197 6.8.0-1036-aws #38~22.04.1-Ubuntu SMP Fri Aug 22 15:44:33 UTC 2025 x86_64
User: ubuntu (1000)
PHP: 7.4.33
Disabled: pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare,
Upload Files
File: /var/www/api-management/test/permisos/permiso.controller.update.e2e-spec.ts
import * as request from 'supertest';
import { Test } from '@nestjs/testing';
import { INestApplication } from '@nestjs/common';
import { PermisoModule } from '../../src/app/permisos/permiso.module';
import { PermisoSchema } from '../../src/app/permisos/schemas/permiso.schema';
import mongoose from 'mongoose';
import { MongoMemoryServer } from 'mongodb-memory-server';
import { MongooseModule } from '@nestjs/mongoose';

jest.setTimeout(30000);

describe('PermisoController (e2e)', () => {
  let app: INestApplication;
  let mongoServer;
  let permisoModel = mongoose.model('Permiso', PermisoSchema);
  let permiso;

  const seederPermiso = {
    codigo: 'permiso-test',
    nombre: 'Permiso test',
    descripcion: 'Descripción de permiso test',
    slug: 'permiso-test-slug',
    modulo: {
      _id: new mongoose.Types.ObjectId().toHexString(),
      codigo: 'modulo-test',
      nombre: 'Módulo test',
      icon: { codigo: 'icon-test' },
      posicion: 1,
      showMenu: true,
    },
    area: {
      _id: new mongoose.Types.ObjectId().toHexString(),
      codigo: 'area-test',
      nombre: 'Área test',
      icon: { codigo: 'icon-area-test' },
      posicion: 1,
      showMenu: true,
    },
  };

  beforeAll(async () => {
    mongoServer = await MongoMemoryServer.create();
    const uri = mongoServer.getUri();
    await mongoose.connect(uri);
    permisoModel = mongoose.model('Permiso', PermisoSchema);
  });

  afterAll(async () => {
    await mongoose.disconnect();
    await mongoServer.stop();
  });

  beforeEach(async () => {
    const moduleRef = await Test.createTestingModule({
      imports: [
        MongooseModule.forRootAsync({
          useFactory: () => ({
            uri: mongoServer.getUri(),
          }),
        }),
        PermisoModule,
      ],
    }).compile();

    permiso = await permisoModel.create(seederPermiso);
    app = moduleRef.createNestApplication();
    await app.init();
  });

  afterEach(async () => {
    await permisoModel.deleteMany({});
    if (app) await app.close();
  });

  describe('PUT /permisos/:id', () => {
    it('debe retornar un error 400 si no se envían datos', async () => {
      const expectResponse = {
        message: [
          'modulo debe ser un objeto.',
          'modulo no debe estar vacío.',
          'area debe ser un objeto.',
          'area no debe estar vacío.',
          'nombre no debe exceder los 250 caracteres.',
          'nombre no debe estar vacío.',
          'nombre debe ser una cadena de texto.',
          'slug no debe exceder los 260 caracteres.',
          'slug no debe estar vacío.',
          'slug 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('/permisos')
        .set({
          'Content-Type': 'application/json',
          Accept: 'application/json',
        })
        .send({})
        .expect(400);

      expect(response.body).toEqual(expectResponse);
    });

    it('debe actualizar un permiso correctamente', async () => {
      const payload = {
        _id: permiso._id,
        nombre: 'Permiso test editado',
        descripcion: 'Descripción de permiso editada',
        slug: 'permiso-test-slug-editado',
        modulo: {
          _id: permiso.modulo._id,
          codigo: 'modulo-editado',
          nombre: 'Módulo editado',
          icon: { codigo: 'icon-editado' },
          posicion: 1,
          showMenu: true,
        },
        area: {
          _id: permiso.area._id,
          codigo: 'area-editada',
          nombre: 'Área editada',
          icon: { codigo: 'icon-area-editada' },
          posicion: 1,
          showMenu: true,
        },
      };

      const response = await request(app.getHttpServer())
        .put(`/permisos/${permiso._id}`)
        .set({
          'Content-Type': 'application/json',
          Accept: 'application/json',
        })
        .send(payload)
        .expect(200);

      const data = response.body.data;

      expect(data._id).toEqual(permiso._id.toString());
      expect(data.nombre).toEqual(payload.nombre);
      expect(data.descripcion).toEqual(payload.descripcion);
      expect(data.slug).toEqual(payload.slug);
      expect(data.modulo._id).toEqual(payload.modulo._id);
      expect(data.area._id).toEqual(payload.area._id);
      expect(data.deletedAt).toBeNull();
      expect(data.createdAt).toEqual(permiso['createdAt'].toISOString());
      expect(response.body.message).toEqual('Registro exitoso');
      expect(response.body.summary).toEqual('El elemento fue editado');
    });
  });
});