{"id":19047869,"url":"https://github.com/yracnet/uagrm-m4-junit-course","last_synced_at":"2025-09-06T14:51:50.896Z","repository":{"id":195104975,"uuid":"691062487","full_name":"yracnet/uagrm-m4-junit-course","owner":"yracnet","description":"JUnit Tutorial","archived":false,"fork":false,"pushed_at":"2023-09-18T05:49:52.000Z","size":157,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-07-25T04:44:11.193Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/yracnet.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-09-13T12:31:22.000Z","updated_at":"2023-09-16T00:12:04.000Z","dependencies_parsed_at":null,"dependency_job_id":"fe0ea241-ebe2-4bd3-8dd4-da2930f959ac","html_url":"https://github.com/yracnet/uagrm-m4-junit-course","commit_stats":null,"previous_names":["yracnet/uagrm-m4-junit-course"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/yracnet/uagrm-m4-junit-course","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yracnet%2Fuagrm-m4-junit-course","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yracnet%2Fuagrm-m4-junit-course/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yracnet%2Fuagrm-m4-junit-course/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yracnet%2Fuagrm-m4-junit-course/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/yracnet","download_url":"https://codeload.github.com/yracnet/uagrm-m4-junit-course/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yracnet%2Fuagrm-m4-junit-course/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":273919930,"owners_count":25191207,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-09-06T02:00:13.247Z","response_time":2576,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-08T23:03:16.344Z","updated_at":"2025-09-06T14:51:50.875Z","avatar_url":"https://github.com/yracnet.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Módulo : Pruebas de Software\n\n## Grupo 2\n\n## Integrantes\n\n- Alejandra Murillo\n- Willyams Yujra\n\n## Tutorial de JUnit\n\nURL del proyecto: [https://github.com/yracnet/uagrm-m4-junit-course](https://github.com/yracnet/uagrm-m4-junit-course)\n\n## Requisitos\n\nEste proyecto requiere la configuración del siguiente entorno en Linux o Windows:\n\n- **NetBeans 16** o superior\n- **JDK 11** o superior\n- **Maven 3.8.X** o superior\n- **GIT 2.39.x** o superior\n\n## Ramas\n\nEl proyecto tiene las siguientes ramas:\n\n- **main**: Rama principal\n- **p1-init**: Rama inicial, donde se encuentra el proyecto sin pruebas unitarias\n- **p2-test**: Rama de pruebas, donde se encuentra el proyecto con pruebas unitarias\n\n## Instalación\n\nEjecute el siguiente comando para construir el proyecto:\n\n```bash\nmvn clean install\n```\n\n\u003e **NOTA**\n\u003e Este comando instalará las dependencias necesarias del proyecto. Se requiere una conexión a Internet.\n\n## Proyecto Biblioteca\n\n### Objetivo\n\nEste proyecto es una implementación de una biblioteca para la venta de libros nuevos y antiguos. Incluye:\n\n- Un catálogo de libros segun ISBN.\n- Precios del libro según la edición y el formato.\n- Ventas de libros con promociones (descuentos) aplicados a ejemplares de libros en un rango de fechas.\n\n### Descripción\n\nEl proyecto incluye los archivos **libro-store.json**, **libro-precio-store.json** y **libro-promocion-store.json**, que almacenan la información de libros, precios y promociones.\n\n### Diseño\n\n#### Tabla de Libros (**libro-store.json**)\n\n| ISBN | Título           | Autor                    | Descripción                                                   |\n| ---- | ---------------- | ------------------------ | ------------------------------------------------------------- |\n| 1000 | El Principito    | Antoine de Saint-Exupéry | Viaje del Principito por asteroides. Lecciones sobre la vida. |\n| 1001 | Hábitos Atómicos | Antoine de Saint-Exupéry | Aprenda a desarrollar buenos hábitos y eliminar malos.        |\n\n#### Tabla de Precios (**libro-precio-store.json**)\n\n| ISBN | Edición | Formato     | Precio Unitario | Moneda |\n| ---- | ------- | ----------- | --------------- | ------ |\n| 1000 | 2019    | TAPA_DURA   | 350.0           | USD    |\n| 1000 | 2005    | TAPA_DURA   | 330.0           | USD    |\n| 1000 | 2010    | TAPA_BLANDA | 200.0           | USD    |\n| 1000 | 2010    | TAPA_DURA   | 350.0           | USD    |\n| 1001 | 2023    | TAPA_DURA   | 550.0           | USD    |\n| 1001 | 2005    | TAPA_BLANDA | 330.0           | USD    |\n| 1001 | 1989    | TAPA_BLANDA | 300.0           | BOB    |\n| 1001 | 2001    | TAPA_DURA   | 300.0           | BOB    |\n| 1001 | 2001    | TAPA_BLANDA | 300.0           | BOB    |\n\n#### Tabla de Promociones (**libro-promocion-store.json**)\n\n| id  | tipo    | isbn | edicion | formato     | fechaDesde | fechaHasta | descuento (%) |\n| --- | ------- | ---- | ------- | ----------- | ---------- | ---------- | ------------- |\n| 1   | NUEVO   | 1000 | 2019    | TAPA_DURA   | 2023-01-17 | 2023-06-17 | 0.01          |\n| 2   | ANTIGUO | 1000 | 2005    | TAPA_DURA   | 2023-06-18 | 2023-12-31 | 0.10          |\n| 3   | NUEVO   | 1000 | 2010    | TAPA_BLANDA | 2023-01-01 | 2023-03-30 | 0.01          |\n| 4   | NUEVO   | 1000 | 2010    | TAPA_DURA   | 2023-01-01 | 2023-12-30 | 0.5           |\n| 5   | ANTIGUO | 1000 | 2019    | TAPA_DURA   | 2023-06-17 | 2023-12-31 | 0.10          |\n| 6   | ANTIGUO | 1001 | 2003    | TAPA_DURA   | 2023-01-01 | 2023-12-31 | 0.25          |\n| 7   | NUEVO   | 1001 | 2022    | TAPA_BLANDA | 2023-01-01 | 2023-12-31 | 0.15          |\n| 8   | ANTIGUO | 1001 | 1989    | TAPA_BLANDA | 2023-06-05 | 2023-12-15 | 0.30          |\n| 9   | NUEVO   | 1001 | 1989    | TAPA_BLANDA | 2023-06-05 | 2023-12-15 | 0.05          |\n| 10  | ANTIGUO | 1001 | 2001    | TAPA_DURA   | 2023-06-05 | 2023-12-15 | 0.10          |\n| 11  | ANTIGUO | 1001 | 2001    | TAPA_BLANDA | 2023-06-05 | 2023-12-15 | 0.15          |\n\n### Metodo Principal: Calcular Descuento\n\nEl proyecto incluye una clase llamada `CarritoVentaManager`, que permite calcular descuentos (**calcularDecuento**) en un libro según el **ISBN**, **EDICIÓN**, **FORMATO** y **TIPO**. Realiza lo siguiente:\n\n- Busca el libro por el ISBN.\n- Busca el precio por el ISBN, EDICIÓN y FORMATO.\n- Busca el descuento por la ISBN, EDICIÓN, FORMATO, TIPO y FECHA de venta.\n- Retorna el **Valor de Descuento** del libro.\n\n## Pruebas Unitarias\n\nLas pruebas unitarias se aplicarán al método **calcularDescuento** para verificar que devuelva el precio de un libro con el descuento válido en los siguientes casos:\n\n- Cuando sea un **Libro Nuevo** (cuando el descuento sea por libro nuevo).\n- Cuando sea un **Libro Antiguo** (cuando el descuento sea por una edición antigua).\n- Cuando sea por un **Precio Diferente** (cuando el libro tenga un formato diferente).\n\n**Ejemplos**:\n\n- Desde el 01 de septiembre de 2023 hasta el 30 de septiembre de 2023, hay un descuento del 5% en un libro por el mes aniversario de la biblioteca.\n- Desde el 01 de enero de 2023 hasta el 29 de febrero de 2024, hay un descuento del 2% en un libro debido a la edición 2023 (Libro nuevo).\n- A partir del 01 de marzo de 2024, hay un descuento del 10% en un libro debido a la edición 2023 (Libro antiguo, ya que salió la edición 2024).\n\n### Pseudo-Codigo de las Pruebas\n\n```java\n// Pseudo-Codigo para un Libro Nuevo\nBEGIN testCalcularDescuentoLibroNuevo\n    // Crear instancia de la clase CarritoVentaManager\n    var instancia = new CarritoVentaManager();\n\n    // definir fecha de Venta para la venta de libros\n    instancia.setFechaVenta(\"2023-02-07\");\n\n    //definimos los valores a utilizar en la prueba\n    var edicion = 2019;\n    var formato = \"TAPA_DURA\";\n    var isbn = \"1000\";\n    var tipoPromo = \"NUEVO\";\n\n    //definimos el valor esperado\n    var expResult = 346.50;\n\n    //invocamos al metodo calcularDescuento\n    var respValorDescuento = instancia.calcularDescuento(isbn, edicion, formato, tipo);\n\n    //obtenemos el valor total a pagar (valor obtenido)\n    var result = respValorDescuento.getTotal();\n\n    //evaluamos la igualdad entre el valor obtenido contra el valor esperado\n    verificarIgualdad(expResult, result);\n\n    //imprimimos los valores para visualizar\n    print(\"Valor esperado = \", expResult);\n    print(\"valor obtenido = \", result);\nEND\n```\n\n### Configuraciones\n\n#### Dependencias\n\nAñade las siguientes dependencias a tu proyecto en el archivo `pom.xml`:\n\n```xml\n\u003cdependency\u003e\n    \u003cgroupId\u003eorg.junit.jupiter\u003c/groupId\u003e\n    \u003cartifactId\u003ejunit-jupiter-api\u003c/artifactId\u003e\n    \u003cversion\u003e5.6.0\u003c/version\u003e\n    \u003cscope\u003etest\u003c/scope\u003e\n\u003c/dependency\u003e\n\u003cdependency\u003e\n    \u003cgroupId\u003eorg.junit.jupiter\u003c/groupId\u003e\n    \u003cartifactId\u003ejunit-jupiter-params\u003c/artifactId\u003e\n    \u003cversion\u003e5.6.0\u003c/version\u003e\n    \u003cscope\u003etest\u003c/scope\u003e\n\u003c/dependency\u003e\n\u003cdependency\u003e\n    \u003cgroupId\u003eorg.junit.jupiter\u003c/groupId\u003e\n    \u003cartifactId\u003ejunit-jupiter-engine\u003c/artifactId\u003e\n    \u003cversion\u003e5.6.0\u003c/version\u003e\n    \u003cscope\u003etest\u003c/scope\u003e\n\u003c/dependency\u003e\n```\n\n\u003e **NOTA**: Estas dependencias pertenecen a JUnit 5.\n\n#### Plugins\n\nAñade los siguientes plugins a tu proyecto en el archivo `pom.xml`:\n\n```xml\n\u003cplugin\u003e\n    \u003cgroupId\u003eorg.apache.maven.plugins\u003c/groupId\u003e\n    \u003cartifactId\u003emaven-surefire-plugin\u003c/artifactId\u003e\n    \u003cversion\u003e3.0.0\u003c/version\u003e\n\u003c/plugin\u003e\n\u003cplugin\u003e\n    \u003cgroupId\u003ecom.hiskasoft.maven\u003c/groupId\u003e\n    \u003cartifactId\u003ehiska-maven-plugin\u003c/artifactId\u003e\n    \u003cversion\u003e1.0.3\u003c/version\u003e\n    \u003cexecutions\u003e\n        \u003cexecution\u003e\n            \u003cphase\u003eprocess-resources\u003c/phase\u003e\n            \u003cgoals\u003e\n                \u003cgoal\u003eprocess\u003c/goal\u003e\n            \u003c/goals\u003e\n        \u003c/execution\u003e\n    \u003c/executions\u003e\n    \u003cconfiguration\u003e\n        \u003cskipLicence\u003efalse\u003c/skipLicence\u003e\n        \u003cskipFormat\u003efalse\u003c/skipFormat\u003e\n        \u003cskipAnalyzer\u003efalse\u003c/skipAnalyzer\u003e\n    \u003c/configuration\u003e\n\u003c/plugin\u003e\n```\n\n\u003e **NOTA**:\n\u003e\n\u003e - `maven-surefire-plugin`: Ejecuta y genera las pruebas unitarias.\n\u003e - `hiska-maven-plugin`: Formatea, agrega licencia y analiza el código del proyecto.\n\n### Ejecución\n\nPara ejecutar las pruebas unitarias, utiliza el siguiente comando:\n\n```bash\nmvn clean test\n```\n\n\u003e **NOTA**: Este comando ejecuta las pruebas unitarias en todo el proyecto.\n\nPara generar un informe de pruebas unitarias en formato HTML, ejecuta el siguiente comando:\n\n```bash\nmvn surefire-report:report\n```\n\n\u003e **NOTA**: Este comando genera un informe de pruebas unitarias en formato HTML.\n\n### Screenshots\n\n![Surefire Report](/screenshots/img01.png)\n![Summary Report](/screenshots/img02.png)\n![Test Report](/screenshots/img03.png)\n\n## Definiciones\n\n- **ISBN**: Número de identificación internacional asignado a los libros.\n- **EDICIÓN**: Una publicación periódica/anual del libro original, con cambios y actualizaciones.\n- **FORMATO**: Presentación del libro, considerando solo los formatos TAPA DURA y TAPA BLANDA.\n- **TIPO**: Tipo de Promocion, libro NUEVO o libro ANTIGUO.\n- **PROMOCIONES**: Descuentos válidos entre fechas para un determinado libro.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fyracnet%2Fuagrm-m4-junit-course","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fyracnet%2Fuagrm-m4-junit-course","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fyracnet%2Fuagrm-m4-junit-course/lists"}