udistrital / core_documentacion

0 stars 0 forks source link

Ajustar pruebas unitarias en firma electrónica. #126

Closed diagutierrezro closed 1 month ago

diagutierrezro commented 2 months ago

Se requiere realizar ajustes a las pruebas unitarias para que estas se creen sobre cada función y usando mocks para no afectar otros sistemas ni generar registros de esta ejecución de pruebas, para esto se deben primero crear los mocks que simulen las respuestas de las apis.

Sub Tareas

Criterios de aceptación

Requerimientos

No aplica

Definition of Ready - DoR

Definition of Done - DoD - Desarrollo

Skyrus1203 commented 2 months ago

ACTUALIZACIÓN 26/08/24

Se inicia con el ajuste de las pruebas unitarias. Para poder crear los Mocks es necesario utilizar una librería nativa de python que se llama unittest, la cual se realiza la importación:

image

Posteriormente, para motivos de practicidad sólo se dejará sin comentarear una función de prueba unitaria de postVerify hasta que se confirme que la adición de los mocks funcione correctamente y se pueda implementar en las demás pruebas. Se agrega un decorador a la prueba y se indica el tipo de respuesta que debe tener:

image

Sin embargo se genera un error que se está tratando de arreglar

image

Queda pendiente la revisión de este error, la confirmación de que los mocks funcionan y la implementación en las demás pruebas unitarias.

Skyrus1203 commented 2 months ago

ACTUALIZACIÓN 27/08/24

Se corrige el error presentado el día anterior, se estaba referenciando de forma incorrecta el método:

image

Se corrigió la referenciación y se corrió la prueba dando un resultado satisfactorio:

image

Sin embargo, al momento de implementar las demás pruebas, se recibían errores 500 y según los logs, se estaban realizando intentos de conexiones a la API en vez de utilizar los Mocks:

image image

Investigando se encontró que era necesario también crear los mocks de las peticiones internas del método de firma electrónica y de verificación (post, get, put, etc), por lo que se comienza a realizar esta implementación

Skyrus1203 commented 2 months ago

ACTUALIZACIÓN 29/08/24

Se logró encontrar el modo de mockear las peticiones internas. Por el momento se está probando sólo los casos de éxito de postVerify.

Primero se deben mockear las variables de entorno involucradas:

image

Ahora se debe simular la respuesta, capturando primero todas las consultas request (en este caso sólo get), para luego con el propósito de mockear las respuestas se genera un json dummy acorde a la respuesta real de la api para cada uno de los distintos códigos de verificación omitiendo las clave valor que no necesite el método para funcionar:

image

Se modifica el código de la prueba para poder implementar estos cambios:

image

Sin embargo al momento de ejecutar se registra este error:

image

El motivo de dicho error radica en esta línea del método postVerify:

image

Al parecer el mock a pesar de tener la estructura correcta del json, esta debe tener un formato distinto, por lo que se debe agregar este mock con la respuesta real de la API sin formatear (cosa que no se puede ver en postman), sin embargo la ejecución local para poder observar esta información no es posible por temas del computador en el que se está realizando el desarrollo. Por lo tanto se centrarán los esfuerzos en volver a habilitar las peticiones locales para poder resolver este apartado y que puedan funcionar las pruebas unitarias

Skyrus1203 commented 1 month ago

ACTUALIZACIÓN 01/09/24

Se termina de realizar el ajuste a las pruebas unitarias. En primera instancia se logró resolver el problema del equipo en el que se estaba desarrollando.

Gracias a lo anterior se pudieron rescatar las respuestas originales de las apis para poder realizar el proceso de mocking, quedando el método de verificación así:

image

Como se evidencia ahora las respuestas son simuladas cono un bytearray.

Para firma electrónica el proceso de ajuste fué bastante extenso, ya que habían más respuestas de distintos tipos que mockear. Sin embargo se logró realizar el ajuste, agregando las respuestas de las APIs en formato byteArray, además de configurar por separado los mocks de los get, post y put, quedando la función de prueba unitaria de la siguiente manera:

image image

Con las pruebas de fallo correcto de firma electrónica el proceso fué similar, agregando al decorador de parámetros las respuestas configuradas del método de respuesta normal, siendo el resto muy similar al anterior expuesto:

image image

Como resultado final no se crean registros en la base de datos ni en Nuxeo si no que las pruebas unitarias son realizadas correctamente (los warnings son relativos a versiones de algunos métodos de bibliotecas):

image

Por tanto se coloca en in review

diagutierrezro commented 1 month ago

Muy buen trabajo Andres.