From 40c10402a8713f0656c7de02b057a0a96f16afc6 Mon Sep 17 00:00:00 2001 From: Petar Hristov <hristov@itc.rwth-aachen.de> Date: Fri, 30 May 2025 13:35:10 +0000 Subject: [PATCH] Refactor: Integrate ProjectCacheService into Resource and User Reporting tests, replacing direct API calls with cached project retrieval --- .../ResourceReportingTests.cs | 41 +++++++------------ src/KpiGenerator.Tests/UserReportingTests.cs | 24 +++-------- .../Reportings/Project/ProjectReporting.cs | 6 +-- 3 files changed, 20 insertions(+), 51 deletions(-) diff --git a/src/KpiGenerator.Tests/ResourceReportingTests.cs b/src/KpiGenerator.Tests/ResourceReportingTests.cs index ebd6030..652e4c9 100644 --- a/src/KpiGenerator.Tests/ResourceReportingTests.cs +++ b/src/KpiGenerator.Tests/ResourceReportingTests.cs @@ -26,7 +26,7 @@ public class ResourceReportingTests private IOptionsMonitor<ReportingConfiguration> _reportingConfiguration = null!; private IAdminApi _adminApi = null!; - + private IProjectCacheService _projectCacheService = null!; private ResourceReporting _resourceReporting = null!; // System Under Test [SetUp] @@ -68,8 +68,9 @@ public class ResourceReportingTests }; _reportingConfiguration = Substitute.For<IOptionsMonitor<ReportingConfiguration>>(); _reportingConfiguration.CurrentValue.Returns(reportingConfig); - + _adminApi = Substitute.For<IAdminApi>(); + _projectCacheService = Substitute.For<IProjectCacheService>(); } #region GenerateReportingAsync Tests @@ -81,18 +82,9 @@ public class ResourceReportingTests var projects = TestData.ProjectAdminDtos; var resources = TestData.ResourceAdminDtos; - _adminApi - .GetAllProjectsAsync( - includeDeleted: Arg.Any<bool>(), - pageNumber: Arg.Any<int>(), - pageSize: Arg.Any<int>() - ) - .Returns(ci => - { - // Return the test projects data, single page - var pagination = new Pagination(currentPage: 1, pageSize: 2, totalCount: 2, totalPages: 1); - return Task.FromResult(new ProjectAdminDtoPagedResponse(data: projects, pagination: pagination, statusCode: 200, traceId: "dummy-trace-id")); - }); + _projectCacheService + .GetAllProjectsAsync() + .Returns(ci => Task.FromResult(projects)); _adminApi .GetAllResourcesAsync( includeDeleted: Arg.Any<bool>(), @@ -106,7 +98,7 @@ public class ResourceReportingTests var pagination = new Pagination(currentPage: 1, pageSize: 2, totalCount: 2, totalPages: 1); return Task.FromResult(new ResourceAdminDtoPagedResponse(data: resources, pagination: pagination, statusCode: 200, traceId: "dummy-trace-id")); }); - _resourceReporting = new ResourceReporting(_mapper, _logger, _gitlabStorageService, _localStorageService, _kpiConfiguration, _reportingConfiguration, _adminApi); + _resourceReporting = new ResourceReporting(_mapper, _logger, _gitlabStorageService, _localStorageService, _kpiConfiguration, _reportingConfiguration, _adminApi, _projectCacheService); // Act var result = await _resourceReporting.GenerateReportingAsync(); @@ -130,14 +122,9 @@ public class ResourceReportingTests public async Task GenerateReportingAsync_ReturnsOnlyGeneralFile_WhenNoProjects() { // Arrange - _adminApi + _projectCacheService .GetAllProjectsAsync() - .Returns(ci => - { - // No projects, empty data - var pagination = new Pagination(currentPage: 1, pageSize: 0, totalCount: 0, totalPages: 1); - return Task.FromResult(new ProjectAdminDtoPagedResponse(data: [], pagination: pagination, statusCode: 200, traceId: "dummy-trace-id")); - }); + .Returns(ci => Task.FromResult(new List<ProjectAdminDto>())); _adminApi .GetAllResourcesAsync() .Returns(ci => @@ -146,7 +133,7 @@ public class ResourceReportingTests var pagination = new Pagination(currentPage: 1, pageSize: 0, totalCount: 0, totalPages: 1); return Task.FromResult(new ResourceAdminDtoPagedResponse(data: [], pagination: pagination, statusCode: 200, traceId: "dummy-trace-id")); }); - _resourceReporting = new ResourceReporting(_mapper, _logger, _gitlabStorageService, _localStorageService, _kpiConfiguration, _reportingConfiguration, _adminApi); + _resourceReporting = new ResourceReporting(_mapper, _logger, _gitlabStorageService, _localStorageService, _kpiConfiguration, _reportingConfiguration, _adminApi, _projectCacheService); // Act var result = await _resourceReporting.GenerateReportingAsync(); @@ -173,7 +160,7 @@ public class ResourceReportingTests }; // We want to ensure that GenerateReportingAsync returns some test objects - _resourceReporting = Substitute.ForPartsOf<ResourceReporting>(_mapper, _logger, _gitlabStorageService, _localStorageService, _kpiConfiguration, _reportingConfiguration, _adminApi); + _resourceReporting = Substitute.ForPartsOf<ResourceReporting>(_mapper, _logger, _gitlabStorageService, _localStorageService, _kpiConfiguration, _reportingConfiguration, _adminApi, _projectCacheService); _resourceReporting .Configure() .GenerateReportingAsync() @@ -213,7 +200,7 @@ public class ResourceReportingTests }; // Partial mock to override GenerateReportingAsync - _resourceReporting = Substitute.ForPartsOf<ResourceReporting>(_mapper, _logger, _gitlabStorageService, _localStorageService, _kpiConfiguration, _reportingConfiguration, _adminApi); + _resourceReporting = Substitute.ForPartsOf<ResourceReporting>(_mapper, _logger, _gitlabStorageService, _localStorageService, _kpiConfiguration, _reportingConfiguration, _adminApi, _projectCacheService); _resourceReporting .Configure() .GenerateReportingAsync() @@ -253,7 +240,7 @@ public class ResourceReportingTests }; // Partial mock to override GenerateReportingAsync - _resourceReporting = Substitute.ForPartsOf<ResourceReporting>(_mapper, _logger, _gitlabStorageService, _localStorageService, _kpiConfiguration, _reportingConfiguration, _adminApi); + _resourceReporting = Substitute.ForPartsOf<ResourceReporting>(_mapper, _logger, _gitlabStorageService, _localStorageService, _kpiConfiguration, _reportingConfiguration, _adminApi, _projectCacheService); _resourceReporting .Configure() .GenerateReportingAsync() @@ -290,7 +277,7 @@ public class ResourceReportingTests }; // Partial mock - _resourceReporting = Substitute.ForPartsOf<ResourceReporting>(_mapper, _logger, _gitlabStorageService, _localStorageService, _kpiConfiguration, _reportingConfiguration, _adminApi); + _resourceReporting = Substitute.ForPartsOf<ResourceReporting>(_mapper, _logger, _gitlabStorageService, _localStorageService, _kpiConfiguration, _reportingConfiguration, _adminApi, _projectCacheService); _resourceReporting .Configure() .GenerateReportingAsync() diff --git a/src/KpiGenerator.Tests/UserReportingTests.cs b/src/KpiGenerator.Tests/UserReportingTests.cs index ec78546..e17434c 100644 --- a/src/KpiGenerator.Tests/UserReportingTests.cs +++ b/src/KpiGenerator.Tests/UserReportingTests.cs @@ -85,18 +85,9 @@ public class UserReportingTests var users = TestData.UserDtos; var roles = TestData.RoleDtos; - _adminApi - .GetAllProjectsAsync( - includeDeleted: Arg.Any<bool>(), - pageNumber: Arg.Any<int>(), - pageSize: Arg.Any<int>() - ) - .Returns(ci => - { - // Return the test projects data, single page - var pagination = new Pagination(currentPage: 1, pageSize: 2, totalCount: 2, totalPages: 1); - return Task.FromResult(new ProjectAdminDtoPagedResponse(data: projects, pagination: pagination, statusCode: 200, traceId: "dummy-trace-id")); - }); + _projectCacheService + .GetAllProjectsAsync() + .Returns(ci => Task.FromResult(projects)); _adminApi .GetAllUsersAsync( tosAccepted: Arg.Any<bool>(), @@ -144,14 +135,9 @@ public class UserReportingTests public async Task GenerateReportingAsync_ReturnsOnlyGeneralFile_WhenNoProjects() { // Arrange - _adminApi + _projectCacheService .GetAllProjectsAsync() - .Returns(ci => - { - // No projects, empty data - var pagination = new Pagination(currentPage: 1, pageSize: 0, totalCount: 0, totalPages: 1); - return Task.FromResult(new ProjectAdminDtoPagedResponse(data: [], pagination: pagination, statusCode: 200, traceId: "dummy-trace-id")); - }); + .Returns(ci => Task.FromResult(new List<ProjectAdminDto>())); _adminApi .GetAllUsersAsync() .Returns(ci => diff --git a/src/KpiGenerator/Reportings/Project/ProjectReporting.cs b/src/KpiGenerator/Reportings/Project/ProjectReporting.cs index 876926b..08787f7 100644 --- a/src/KpiGenerator/Reportings/Project/ProjectReporting.cs +++ b/src/KpiGenerator/Reportings/Project/ProjectReporting.cs @@ -86,11 +86,7 @@ public class ProjectReporting _logger.LogDebug("Working on projects asynchronously..."); var projects = await _projectCacheService.GetAllProjectsAsync(); _logger.LogInformation("Found {count} projects.", projects.Count); - if (projects.Count == 0) - { - _logger.LogWarning("No projects found. Exiting project reporting generation."); - return []; - } + // Filter out projects that are deleted projects = [.. projects.Where(p => !p.Deleted)]; _logger.LogInformation("Filtered out deleted projects. Remaining projects: {count}", projects.Count); -- GitLab