A Spring Boot 3 RESTful API for managing departments and employees. Features include CRUD operations, Excel/PDF reporting with JasperReport, async email sending with Thymeleaf, Dockerized PostgreSQL, and database migrations with Flyway. Enhanced with Swagger documentation, and tested using JUnit 5, Mockito, and Testcontainers.
The ReportServiceImplTest class in the src/test/java/com/ainigma100/departmentapi/service/impl/ directory has two disabled unit tests.
The first test, givenNoInput_whenGenerateAndZipReports_thenReturnFileDTO, is meant to verify that the method generates and zips reports correctly when there is data available. It sets up mock data and mock behavior for the dependencies and asserts that the resulting FileDTO object is not null and contains the expected file content. The verification is done using various verify statements to ensure that the dependencies are invoked with the expected arguments.
The second test, givenNoInput_whenGenerateAndZipReports_thenReturnFileDTOWithEmptyContent, is meant to verify the behavior when there is no data available for the reports. It sets up mock data and behavior to simulate an empty result from the repository and asserts that the resulting FileDTO object is not null but has a null file content. Similarly, the dependencies' invocations are verified using verify statements.
The ReportControllerIntegrationTest class in the src/test/java/com/ainigma100/departmentapi/integration/ directory is missing verification steps for the generated reports. The tests currently only check the HTTP response status, but they do not verify the content or correctness of the reports themselves. JasperReport libraries were used to generate the reports.
Steps to Reproduce
Set up the project and execute the ReportControllerIntegrationTest class.
Review the tests givenNoInput_whenGenerateDepartmentsExcelReport, givenNoInput_whenGenerateEmployeesExcelReport, givenNoInput_whenGeneratePdfFullReport, givenNoInput_whenGenerateAndZipReports, and givenNoInput_whenGenerateMultiSheetExcelReport.
Notice that the tests only verify the HTTP response status and do not perform any assertions on the actual report content.
Expected Behavior
The integration tests for generating reports should include assertions to verify that the generated reports, created using the JasperReport libraries (version 6.20.5), contain the correct values, ensuring their accuracy and integrity.
Proposed Solution
To fix this issue, we need to modify the ReportControllerIntegrationTest class and add appropriate assertions to verify the content of the generated reports. This may involve using the JasperReport API to extract the report data from the response, parsing it, and asserting on specific values or structures.