Skip to content
This repository was archived by the owner on Jul 28, 2025. It is now read-only.

Commit 67bec63

Browse files
test: Added unit tests for BSSelectFunctions
1 parent 28bdb0a commit 67bec63

File tree

9 files changed

+508
-31
lines changed

9 files changed

+508
-31
lines changed

src/ServiceLayer.API/Functions/BSSelectFunctions.cs

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,9 @@
22
using System.Text.Json;
33
using Azure.Messaging;
44
using Azure.Messaging.EventGrid;
5-
using Microsoft.AspNetCore.Http;
65
using Microsoft.AspNetCore.Mvc;
76
using Microsoft.Azure.Functions.Worker;
7+
using Microsoft.Azure.Functions.Worker.Http;
88
using Microsoft.Extensions.Logging;
99
using ServiceLayer.API.Models;
1010
using ServiceLayer.API.Shared;
@@ -14,17 +14,18 @@ namespace ServiceLayer.API.Functions;
1414
public class BSSelectFunctions(ILogger<BSSelectFunctions> logger, EventGridPublisherClient eventGridPublisherClient)
1515
{
1616
[Function("CreateEpisodeEvent")]
17-
public async Task<IActionResult> CreateEpisodeEvent([HttpTrigger(AuthorizationLevel.Anonymous, "post", Route = "bsselect/episodes")] HttpRequest req)
17+
public async Task<IActionResult> CreateEpisodeEvent([HttpTrigger(AuthorizationLevel.Anonymous, "post", Route = "bsselect/episodes")] HttpRequestData req)
1818
{
19-
BSSelectEpisodeEvent? bssEpisodeEvent;
19+
BSSelectEpisode? bssEpisodeEvent;
2020

2121
try
2222
{
23-
bssEpisodeEvent = await JsonSerializer.DeserializeAsync<BSSelectEpisodeEvent>(req.Body);
23+
bssEpisodeEvent = await JsonSerializer.DeserializeAsync<BSSelectEpisode>(req.Body);
2424

2525
if (bssEpisodeEvent == null)
2626
{
27-
return new BadRequestObjectResult("Deserialization resulted in null.");
27+
logger.LogError("Deserialization returned null");
28+
return new BadRequestObjectResult("Deserialization returned null");
2829
}
2930

3031
var validationResults = new List<ValidationResult>();
@@ -42,16 +43,17 @@ public async Task<IActionResult> CreateEpisodeEvent([HttpTrigger(AuthorizationLe
4243
{
4344
var createPathwayEnrolment = new CreatePathwayParticipantDto
4445
{
45-
NhsNumber = bssEpisodeEvent.NhsNumber,
46-
DOB = bssEpisodeEvent.DateOfBirth,
47-
Name = $"{bssEpisodeEvent.FirstGivenName} {bssEpisodeEvent.FamilyName}",
46+
PathwayTypeId = new Guid("11111111-1111-1111-1111-111111111113"),
47+
PathwayTypeName = "Breast Screening Routine",
4848
ScreeningName = "Breast Screening",
49-
PathwayTypeName = "Breast Screening Routine"
49+
NhsNumber = bssEpisodeEvent.NhsNumber!,
50+
DOB = (DateOnly)bssEpisodeEvent.DateOfBirth!,
51+
Name = $"{bssEpisodeEvent.FirstGivenName} {bssEpisodeEvent.FamilyName}",
5052
};
5153

5254
var cloudEvent = new CloudEvent(
5355
"ServiceLayer",
54-
"CreateBrestScreeningPathwayEnrolment",
56+
"CreatePathwayEnrolment",
5557
createPathwayEnrolment
5658
);
5759

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
using System.ComponentModel.DataAnnotations;
2+
using System.Text.Json.Serialization;
3+
4+
namespace ServiceLayer.API.Models;
5+
6+
public class BSSelectEpisode
7+
{
8+
[JsonPropertyName("episode_id")]
9+
[Required(ErrorMessage = "The episode_id is required")]
10+
public string? EpisodeId { get; set; }
11+
12+
[JsonPropertyName("nhs_number")]
13+
[Required(ErrorMessage = "The nhs_number is required")]
14+
[RegularExpression(@"^\d{10}$", ErrorMessage = "The nhs_number must be exactly 10 digits")]
15+
public string? NhsNumber { get; set; }
16+
17+
[JsonPropertyName("date_of_birth")]
18+
[Required(ErrorMessage = "The date_of_birth is required")]
19+
public DateOnly? DateOfBirth { get; set; }
20+
21+
[JsonPropertyName("first_given_name")]
22+
[Required(ErrorMessage = "The first_given_name is required")]
23+
public string? FirstGivenName { get; set; }
24+
25+
[JsonPropertyName("family_name")]
26+
[Required(ErrorMessage = "The family_name is required")]
27+
public string? FamilyName { get; set; }
28+
}

src/ServiceLayer.API/Models/BSSelectEpisodeEvent.cs

Lines changed: 0 additions & 20 deletions
This file was deleted.

src/ServiceLayer.API/Shared/CreatePathwayParticipantDto.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,10 @@ namespace ServiceLayer.API.Shared;
22

33
public class CreatePathwayParticipantDto
44
{
5+
public required Guid PathwayTypeId { get; set; }
56
public required string PathwayTypeName { get; set; }
67
public required string ScreeningName { get; set; }
7-
public DateOnly DOB { get; set; }
88
public required string NhsNumber { get; set; }
9+
public required DateOnly DOB { get; set; }
910
public required string Name { get; set; }
1011
}

src/ServiceLayer.sln

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,54 @@
1+
12
Microsoft Visual Studio Solution File, Format Version 12.00
23
# Visual Studio Version 17
34
VisualStudioVersion = 17.5.2.0
45
MinimumVisualStudioVersion = 10.0.40219.1
56
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ServiceLayer.API", "ServiceLayer.API\ServiceLayer.API.csproj", "{B56B41FF-FA39-0FDE-E266-6EC09B268DFB}"
67
EndProject
8+
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tests", "Tests", "{0AB3BF05-4346-4AA6-1389-037BE0695223}"
9+
EndProject
10+
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ServiceLayer.API.Tests", "..\tests\ServiceLayer.API.Tests\ServiceLayer.API.Tests.csproj", "{BA052DAE-6FD1-483A-A0AF-DCBCF9E38C72}"
11+
EndProject
712
Global
813
GlobalSection(SolutionConfigurationPlatforms) = preSolution
914
Debug|Any CPU = Debug|Any CPU
15+
Debug|x64 = Debug|x64
16+
Debug|x86 = Debug|x86
1017
Release|Any CPU = Release|Any CPU
18+
Release|x64 = Release|x64
19+
Release|x86 = Release|x86
1120
EndGlobalSection
1221
GlobalSection(ProjectConfigurationPlatforms) = postSolution
1322
{B56B41FF-FA39-0FDE-E266-6EC09B268DFB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
1423
{B56B41FF-FA39-0FDE-E266-6EC09B268DFB}.Debug|Any CPU.Build.0 = Debug|Any CPU
24+
{B56B41FF-FA39-0FDE-E266-6EC09B268DFB}.Debug|x64.ActiveCfg = Debug|Any CPU
25+
{B56B41FF-FA39-0FDE-E266-6EC09B268DFB}.Debug|x64.Build.0 = Debug|Any CPU
26+
{B56B41FF-FA39-0FDE-E266-6EC09B268DFB}.Debug|x86.ActiveCfg = Debug|Any CPU
27+
{B56B41FF-FA39-0FDE-E266-6EC09B268DFB}.Debug|x86.Build.0 = Debug|Any CPU
1528
{B56B41FF-FA39-0FDE-E266-6EC09B268DFB}.Release|Any CPU.ActiveCfg = Release|Any CPU
1629
{B56B41FF-FA39-0FDE-E266-6EC09B268DFB}.Release|Any CPU.Build.0 = Release|Any CPU
30+
{B56B41FF-FA39-0FDE-E266-6EC09B268DFB}.Release|x64.ActiveCfg = Release|Any CPU
31+
{B56B41FF-FA39-0FDE-E266-6EC09B268DFB}.Release|x64.Build.0 = Release|Any CPU
32+
{B56B41FF-FA39-0FDE-E266-6EC09B268DFB}.Release|x86.ActiveCfg = Release|Any CPU
33+
{B56B41FF-FA39-0FDE-E266-6EC09B268DFB}.Release|x86.Build.0 = Release|Any CPU
34+
{BA052DAE-6FD1-483A-A0AF-DCBCF9E38C72}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
35+
{BA052DAE-6FD1-483A-A0AF-DCBCF9E38C72}.Debug|Any CPU.Build.0 = Debug|Any CPU
36+
{BA052DAE-6FD1-483A-A0AF-DCBCF9E38C72}.Debug|x64.ActiveCfg = Debug|Any CPU
37+
{BA052DAE-6FD1-483A-A0AF-DCBCF9E38C72}.Debug|x64.Build.0 = Debug|Any CPU
38+
{BA052DAE-6FD1-483A-A0AF-DCBCF9E38C72}.Debug|x86.ActiveCfg = Debug|Any CPU
39+
{BA052DAE-6FD1-483A-A0AF-DCBCF9E38C72}.Debug|x86.Build.0 = Debug|Any CPU
40+
{BA052DAE-6FD1-483A-A0AF-DCBCF9E38C72}.Release|Any CPU.ActiveCfg = Release|Any CPU
41+
{BA052DAE-6FD1-483A-A0AF-DCBCF9E38C72}.Release|Any CPU.Build.0 = Release|Any CPU
42+
{BA052DAE-6FD1-483A-A0AF-DCBCF9E38C72}.Release|x64.ActiveCfg = Release|Any CPU
43+
{BA052DAE-6FD1-483A-A0AF-DCBCF9E38C72}.Release|x64.Build.0 = Release|Any CPU
44+
{BA052DAE-6FD1-483A-A0AF-DCBCF9E38C72}.Release|x86.ActiveCfg = Release|Any CPU
45+
{BA052DAE-6FD1-483A-A0AF-DCBCF9E38C72}.Release|x86.Build.0 = Release|Any CPU
1746
EndGlobalSection
1847
GlobalSection(SolutionProperties) = preSolution
1948
HideSolutionNode = FALSE
2049
EndGlobalSection
2150
GlobalSection(NestedProjects) = preSolution
51+
{BA052DAE-6FD1-483A-A0AF-DCBCF9E38C72} = {0AB3BF05-4346-4AA6-1389-037BE0695223}
2252
EndGlobalSection
2353
GlobalSection(ExtensibilityGlobals) = postSolution
2454
SolutionGuid = {EEE06B13-019F-4618-A6EB-FD834B6EA7D7}

tests/.gitkeep

Whitespace-only changes.

0 commit comments

Comments
 (0)