Skip to content

Commit feecf63

Browse files
fix: Adding proper row count logic to retrieve cohort distribution (#1157)
* Adding proper rowcount logic * adressing comments
1 parent 5a5c3ff commit feecf63

File tree

3 files changed

+40
-11
lines changed

3 files changed

+40
-11
lines changed

application/CohortManager/src/Functions/CohortDistributionServices/RetrieveCohortDistribution/RetrieveCohortDistribution.cs

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,15 @@
11
namespace NHS.CohortManager.CohortDistributionDataServices;
22

33
using System.Net;
4-
using System.Reflection.Metadata.Ecma335;
54
using System.Text.Json;
65
using System.Threading.Tasks;
76
using Common;
87
using Common.Interfaces;
9-
using Data.Database;
10-
using DataServices.Client;
118
using Microsoft.Azure.Functions.Worker;
129
using Microsoft.Azure.Functions.Worker.Http;
10+
using Microsoft.EntityFrameworkCore.Diagnostics;
1311
using Microsoft.Extensions.Logging;
14-
using Model;
15-
using Microsoft.Identity.Client;
12+
using Microsoft.Extensions.Options;
1613
using Model.DTO;
1714

1815
/// <summary>
@@ -35,15 +32,22 @@ public class RetrieveCohortDistributionData
3532
private readonly ICreateResponse _createResponse;
3633
private readonly ICreateCohortDistributionData _createCohortDistributionData;
3734
private readonly IExceptionHandler _exceptionHandler;
35+
private readonly RetrieveCohortDistributionConfig _config;
3836

3937

4038

41-
public RetrieveCohortDistributionData(ILogger<RetrieveCohortDistributionData> logger, ICreateCohortDistributionData createCohortDistributionData, ICreateResponse createResponse, IExceptionHandler exceptionHandler)
39+
public RetrieveCohortDistributionData(ILogger<RetrieveCohortDistributionData> logger,
40+
ICreateCohortDistributionData createCohortDistributionData,
41+
ICreateResponse createResponse,
42+
IExceptionHandler exceptionHandler,
43+
IOptions<RetrieveCohortDistributionConfig> config
44+
)
4245
{
4346
_logger = logger;
4447
_createCohortDistributionData = createCohortDistributionData;
4548
_createResponse = createResponse;
4649
_exceptionHandler = exceptionHandler;
50+
_config = config.Value;
4751
}
4852

4953
[Function(nameof(RetrieveCohortDistributionData))]
@@ -53,9 +57,10 @@ public async Task<HttpResponseData> Run([HttpTrigger(AuthorizationLevel.Anonymou
5357
try
5458
{
5559

56-
if (string.IsNullOrEmpty(req.Query["rowCount"]) || !int.TryParse(req.Query["rowCount"], out int rowCount))
60+
int rowCount = _config.MaxRowCount;
61+
if (!string.IsNullOrEmpty(req.Query["rowCount"]) && int.TryParse(req.Query["rowCount"], out int rowCountParam))
5762
{
58-
return _createResponse.CreateHttpResponse(HttpStatusCode.BadRequest, req);
63+
rowCount = Math.Min(rowCount, rowCountParam);
5964
}
6065

6166
//If no requestID is provided we send back a batch of unextracted participants

application/CohortManager/src/Functions/CohortDistributionServices/RetrieveCohortDistribution/RetrieveCohortDistributionConfig.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,5 +11,6 @@ public class RetrieveCohortDistributionConfig
1111
public string CohortDistributionDataServiceURL { get; set; }
1212
[Required]
1313
public string BsSelectRequestAuditDataService { get; set; }
14+
public int MaxRowCount { get; set; } = 1_000;
1415

1516
}

tests/UnitTests/CohortDistributionTests/RetrieveCohortDistributionTests/RetrieveCohortDistributionTests.cs

Lines changed: 26 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
using DataServices.Client;
1010
using Microsoft.Azure.Functions.Worker.Http;
1111
using Microsoft.Extensions.Logging;
12+
using Microsoft.Extensions.Options;
1213
using Model;
1314
using Moq;
1415
using NHS.CohortManager.CohortDistributionDataServices;
@@ -27,11 +28,14 @@ public class RetrieveCohortDistributionTests
2728
private readonly Mock<IDataServiceClient<BsSelectRequestAudit>> _requestAuditDistributionDataClient = new();
2829
private readonly Mock<ICreateResponse> _createResponse = new();
2930
private readonly Mock<IExceptionHandler> _exceptionHandler = new();
31+
private readonly Mock<IOptions<RetrieveCohortDistributionConfig>> _config = new();
3032

3133
public RetrieveCohortDistributionTests()
3234
{
35+
36+
_config.Setup(i => i.Value).Returns(new RetrieveCohortDistributionConfig());
3337
_createCohortDistribution = new CreateCohortDistributionData(_createCohortLogger.Object, _cohortDistributionDataClient.Object, _requestAuditDistributionDataClient.Object);
34-
_sut = new RetrieveCohortDistributionData(_retrieveCohortLogger.Object, _createCohortDistribution, _createResponse.Object, _exceptionHandler.Object);
38+
_sut = new RetrieveCohortDistributionData(_retrieveCohortLogger.Object, _createCohortDistribution, _createResponse.Object, _exceptionHandler.Object, _config.Object);
3539

3640
_createResponse.Setup(x => x.CreateHttpResponse(It.IsAny<HttpStatusCode>(), It.IsAny<HttpRequestData>(), It.IsAny<string?>()))
3741
.Returns((HttpStatusCode statusCode, HttpRequestData req, string? ResponseBody) =>
@@ -118,17 +122,36 @@ public async Task Run_GetBatchBadRequestId_ReturnsBadRequest()
118122

119123
}
120124
[TestMethod]
121-
public async Task Run_GetBatchNoRowCountOrRequestId_ReturnsBadRequest()
125+
public async Task Run_GetBatchNoRowCountOrRequestId_ReturnsOkData()
122126
{
123127
// arrange
124128
NameValueCollection urlQueryItems = new NameValueCollection();
125129
var req = _setupRequest.Setup(null, urlQueryItems);
126130

131+
var cohortDistributionParticipant = new CohortDistribution { NHSNumber = 123456789 };
132+
var participantsList = new List<CohortDistribution>
133+
{
134+
cohortDistributionParticipant
135+
};
136+
137+
_cohortDistributionDataClient
138+
.Setup(x => x.GetByFilter(It.IsAny<Expression<Func<CohortDistribution, bool>>>()))
139+
.ReturnsAsync(participantsList);
140+
141+
_cohortDistributionDataClient
142+
.Setup(x => x.GetSingle(It.IsAny<string>()))
143+
.ReturnsAsync(cohortDistributionParticipant);
144+
145+
_cohortDistributionDataClient
146+
.Setup(x => x.Update(It.IsAny<CohortDistribution>()))
147+
.ReturnsAsync(true);
148+
149+
127150
// act
128151
var result = await _sut.Run(req.Object);
129152

130153
// assert
131-
Assert.AreEqual(HttpStatusCode.BadRequest, result.StatusCode);
154+
Assert.AreEqual(HttpStatusCode.OK, result.StatusCode);
132155

133156
}
134157
[TestMethod]

0 commit comments

Comments
 (0)