Skip to content
Snippets Groups Projects
Commit 40c10402 authored by Petar Hristov's avatar Petar Hristov :speech_balloon:
Browse files

Refactor: Integrate ProjectCacheService into Resource and User Reporting...

Refactor: Integrate ProjectCacheService into Resource and User Reporting tests, replacing direct API calls with cached project retrieval
parent 40dc29cc
No related branches found
No related tags found
1 merge request!46Fix: ProjectReporting to fetch project quotas individually and update API
Pipeline #1721129 passed
...@@ -26,7 +26,7 @@ public class ResourceReportingTests ...@@ -26,7 +26,7 @@ public class ResourceReportingTests
private IOptionsMonitor<ReportingConfiguration> _reportingConfiguration = null!; private IOptionsMonitor<ReportingConfiguration> _reportingConfiguration = null!;
private IAdminApi _adminApi = null!; private IAdminApi _adminApi = null!;
private IProjectCacheService _projectCacheService = null!;
private ResourceReporting _resourceReporting = null!; // System Under Test private ResourceReporting _resourceReporting = null!; // System Under Test
[SetUp] [SetUp]
...@@ -70,6 +70,7 @@ public class ResourceReportingTests ...@@ -70,6 +70,7 @@ public class ResourceReportingTests
_reportingConfiguration.CurrentValue.Returns(reportingConfig); _reportingConfiguration.CurrentValue.Returns(reportingConfig);
_adminApi = Substitute.For<IAdminApi>(); _adminApi = Substitute.For<IAdminApi>();
_projectCacheService = Substitute.For<IProjectCacheService>();
} }
#region GenerateReportingAsync Tests #region GenerateReportingAsync Tests
...@@ -81,18 +82,9 @@ public class ResourceReportingTests ...@@ -81,18 +82,9 @@ public class ResourceReportingTests
var projects = TestData.ProjectAdminDtos; var projects = TestData.ProjectAdminDtos;
var resources = TestData.ResourceAdminDtos; var resources = TestData.ResourceAdminDtos;
_adminApi _projectCacheService
.GetAllProjectsAsync( .GetAllProjectsAsync()
includeDeleted: Arg.Any<bool>(), .Returns(ci => Task.FromResult(projects));
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"));
});
_adminApi _adminApi
.GetAllResourcesAsync( .GetAllResourcesAsync(
includeDeleted: Arg.Any<bool>(), includeDeleted: Arg.Any<bool>(),
...@@ -106,7 +98,7 @@ public class ResourceReportingTests ...@@ -106,7 +98,7 @@ public class ResourceReportingTests
var pagination = new Pagination(currentPage: 1, pageSize: 2, totalCount: 2, totalPages: 1); 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")); 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 // Act
var result = await _resourceReporting.GenerateReportingAsync(); var result = await _resourceReporting.GenerateReportingAsync();
...@@ -130,14 +122,9 @@ public class ResourceReportingTests ...@@ -130,14 +122,9 @@ public class ResourceReportingTests
public async Task GenerateReportingAsync_ReturnsOnlyGeneralFile_WhenNoProjects() public async Task GenerateReportingAsync_ReturnsOnlyGeneralFile_WhenNoProjects()
{ {
// Arrange // Arrange
_adminApi _projectCacheService
.GetAllProjectsAsync() .GetAllProjectsAsync()
.Returns(ci => .Returns(ci => Task.FromResult(new List<ProjectAdminDto>()));
{
// 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"));
});
_adminApi _adminApi
.GetAllResourcesAsync() .GetAllResourcesAsync()
.Returns(ci => .Returns(ci =>
...@@ -146,7 +133,7 @@ public class ResourceReportingTests ...@@ -146,7 +133,7 @@ public class ResourceReportingTests
var pagination = new Pagination(currentPage: 1, pageSize: 0, totalCount: 0, totalPages: 1); 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")); 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 // Act
var result = await _resourceReporting.GenerateReportingAsync(); var result = await _resourceReporting.GenerateReportingAsync();
...@@ -173,7 +160,7 @@ public class ResourceReportingTests ...@@ -173,7 +160,7 @@ public class ResourceReportingTests
}; };
// We want to ensure that GenerateReportingAsync returns some test objects // 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 _resourceReporting
.Configure() .Configure()
.GenerateReportingAsync() .GenerateReportingAsync()
...@@ -213,7 +200,7 @@ public class ResourceReportingTests ...@@ -213,7 +200,7 @@ public class ResourceReportingTests
}; };
// Partial mock to override GenerateReportingAsync // 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 _resourceReporting
.Configure() .Configure()
.GenerateReportingAsync() .GenerateReportingAsync()
...@@ -253,7 +240,7 @@ public class ResourceReportingTests ...@@ -253,7 +240,7 @@ public class ResourceReportingTests
}; };
// Partial mock to override GenerateReportingAsync // 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 _resourceReporting
.Configure() .Configure()
.GenerateReportingAsync() .GenerateReportingAsync()
...@@ -290,7 +277,7 @@ public class ResourceReportingTests ...@@ -290,7 +277,7 @@ public class ResourceReportingTests
}; };
// Partial mock // 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 _resourceReporting
.Configure() .Configure()
.GenerateReportingAsync() .GenerateReportingAsync()
......
...@@ -85,18 +85,9 @@ public class UserReportingTests ...@@ -85,18 +85,9 @@ public class UserReportingTests
var users = TestData.UserDtos; var users = TestData.UserDtos;
var roles = TestData.RoleDtos; var roles = TestData.RoleDtos;
_adminApi _projectCacheService
.GetAllProjectsAsync( .GetAllProjectsAsync()
includeDeleted: Arg.Any<bool>(), .Returns(ci => Task.FromResult(projects));
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"));
});
_adminApi _adminApi
.GetAllUsersAsync( .GetAllUsersAsync(
tosAccepted: Arg.Any<bool>(), tosAccepted: Arg.Any<bool>(),
...@@ -144,14 +135,9 @@ public class UserReportingTests ...@@ -144,14 +135,9 @@ public class UserReportingTests
public async Task GenerateReportingAsync_ReturnsOnlyGeneralFile_WhenNoProjects() public async Task GenerateReportingAsync_ReturnsOnlyGeneralFile_WhenNoProjects()
{ {
// Arrange // Arrange
_adminApi _projectCacheService
.GetAllProjectsAsync() .GetAllProjectsAsync()
.Returns(ci => .Returns(ci => Task.FromResult(new List<ProjectAdminDto>()));
{
// 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"));
});
_adminApi _adminApi
.GetAllUsersAsync() .GetAllUsersAsync()
.Returns(ci => .Returns(ci =>
......
...@@ -86,11 +86,7 @@ public class ProjectReporting ...@@ -86,11 +86,7 @@ public class ProjectReporting
_logger.LogDebug("Working on projects asynchronously..."); _logger.LogDebug("Working on projects asynchronously...");
var projects = await _projectCacheService.GetAllProjectsAsync(); var projects = await _projectCacheService.GetAllProjectsAsync();
_logger.LogInformation("Found {count} projects.", projects.Count); _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 // Filter out projects that are deleted
projects = [.. projects.Where(p => !p.Deleted)]; projects = [.. projects.Where(p => !p.Deleted)];
_logger.LogInformation("Filtered out deleted projects. Remaining projects: {count}", projects.Count); _logger.LogInformation("Filtered out deleted projects. Remaining projects: {count}", projects.Count);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment