From e912306b1d3257c4d296b3dc2b04041129fd970b Mon Sep 17 00:00:00 2001 From: Sudip Mondal Date: Mon, 11 Aug 2025 13:20:58 +0100 Subject: [PATCH 1/3] DTOSS-10107 fix rule 30 --- .../Breast_Screening_staticRules.json | 4 +-- .../Shared/Common/ValidationHelper.cs | 8 +++--- .../StaticTests/ValidationHelperTests.cs | 25 +++++++++++++++++++ 3 files changed, 30 insertions(+), 7 deletions(-) diff --git a/application/CohortManager/src/Functions/ScreeningValidationService/StaticValidation/Breast_Screening_staticRules.json b/application/CohortManager/src/Functions/ScreeningValidationService/StaticValidation/Breast_Screening_staticRules.json index b4635a11ff..430e7c80a8 100644 --- a/application/CohortManager/src/Functions/ScreeningValidationService/StaticValidation/Breast_Screening_staticRules.json +++ b/application/CohortManager/src/Functions/ScreeningValidationService/StaticValidation/Breast_Screening_staticRules.json @@ -97,7 +97,7 @@ "Rules": [ { "RuleName": "30.Postcode.NBO.NonFatal", - "Expression": "string.IsNullOrEmpty(participant.Postcode) OR ValidationHelper.ValidatePostcode(participant.Postcode)", + "Expression": "string.IsNullOrEmpty(participant.Postcode) OR ValidationHelper.ValidatePostcode(participant.Postcode) OR participant.Postcode == \"ZZZSECUR\" OR participant.Postcode == \"ZZ99\"", "Actions": { "OnFailure": { "Name": "OutputExpression", @@ -182,7 +182,7 @@ "Expression": "\"Address is missing\"" } } - } + } } ] }, diff --git a/application/CohortManager/src/Functions/Shared/Common/ValidationHelper.cs b/application/CohortManager/src/Functions/Shared/Common/ValidationHelper.cs index 131de111ba..9c71573343 100644 --- a/application/CohortManager/src/Functions/Shared/Common/ValidationHelper.cs +++ b/application/CohortManager/src/Functions/Shared/Common/ValidationHelper.cs @@ -88,14 +88,12 @@ public static bool ValidateNHSNumber(string nhsNumber) public static bool ValidatePostcode(string postcode) { string validPostcodePattern = "^([A-Za-z][A-Ha-hJ-Yj-y]?[0-9][A-Za-z0-9]? ?[0-9][A-Za-z]{2}|[Gg][Ii][Rr] ?0[Aa]{2})$"; - string dummyPostcodePattern1 = "^ZZ99 ?[0-9][A-Z]{2}$"; - string dummyPostcodePattern2 = "^ZZZSECUR$"; + string dummyPostcodePattern = "^ZZ99 ?[0-9][A-Z]{2}$"; Match validPostcodeMatch = Regex.Match(postcode, validPostcodePattern, RegexOptions.IgnoreCase, TimeSpan.FromSeconds(2)); - Match dummyPostcodeMatch1 = Regex.Match(postcode, dummyPostcodePattern1, RegexOptions.IgnoreCase, TimeSpan.FromSeconds(2)); - Match dummyPostcodeMatch2 = Regex.Match(postcode, dummyPostcodePattern2, RegexOptions.IgnoreCase, TimeSpan.FromSeconds(2)); + Match dummyPostcodeMatch = Regex.Match(postcode, dummyPostcodePattern, RegexOptions.IgnoreCase, TimeSpan.FromSeconds(2)); - if (validPostcodeMatch.Success || dummyPostcodeMatch1.Success || dummyPostcodeMatch2.Success) + if (validPostcodeMatch.Success || dummyPostcodeMatch.Success) return true; return false; diff --git a/tests/UnitTests/StaticTests/ValidationHelperTests.cs b/tests/UnitTests/StaticTests/ValidationHelperTests.cs index bf8ccb33db..878c0160cc 100644 --- a/tests/UnitTests/StaticTests/ValidationHelperTests.cs +++ b/tests/UnitTests/StaticTests/ValidationHelperTests.cs @@ -73,4 +73,29 @@ public void ValidatePastDate_InvalidPastDateAlwaysFuture_ReturnsFalse() Assert.IsFalse(result); } + + [TestMethod] + [DataRow("B33 8TH")] // Valid postcode format + [DataRow("SW1A 1AA")] // Valid postcode format + [DataRow("SM1 1AA")] // Valid postcode format + [DataRow("ZZ99 3CZ")] // dummy postcode format + public void ValidatePostcode_ValidPostcode_ReturnsTrue(string postCode) + { + var result = ValidationHelper.ValidatePostcode(postCode); + + Assert.IsTrue(result); + } + + [TestMethod] + [DataRow("A1")] + [DataRow("ABCDE 123")] + [DataRow("123 ABC")] + [DataRow("W1A")] + [DataRow("SW1A1AAA")] + public void ValidatePostcode_InvalidPostcode_ReturnsFalse(string postCode) + { + var result = ValidationHelper.ValidatePostcode(postCode); + + Assert.IsFalse(result); + } } From 3e58a98d87f68c1cf6877a78d26e02845ee34eb1 Mon Sep 17 00:00:00 2001 From: Sudip Mondal Date: Mon, 11 Aug 2025 14:41:54 +0100 Subject: [PATCH 2/3] DTOSS-10107 unit test added --- .../StaticValidation/StaticValidationTests.cs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tests/UnitTests/ScreeningValidationServiceTests/StaticValidation/StaticValidationTests.cs b/tests/UnitTests/ScreeningValidationServiceTests/StaticValidation/StaticValidationTests.cs index 95c022b6df..889bd74d94 100644 --- a/tests/UnitTests/ScreeningValidationServiceTests/StaticValidation/StaticValidationTests.cs +++ b/tests/UnitTests/ScreeningValidationServiceTests/StaticValidation/StaticValidationTests.cs @@ -210,6 +210,8 @@ public async Task Run_DelRecord_DoNotRunCommonRules() [DataRow("ZZ99 9FZ")] [DataRow("ZZ999FZ")] [DataRow("ZZ99 3WZ")] + [DataRow("ZZ99")] + [DataRow("ZZZSECUR")] public async Task Run_ValidPostcode_ReturnNoContent(string postcode) { // Arrange From 829ccc78a3616ce341d39a6749cc644caa371871 Mon Sep 17 00:00:00 2001 From: Sudip Mondal Date: Mon, 11 Aug 2025 15:36:24 +0100 Subject: [PATCH 3/3] DTOSS-10107 resolve PR comments --- .../StaticValidation/Breast_Screening_staticRules.json | 2 +- .../StaticValidation/StaticValidationTests.cs | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/application/CohortManager/src/Functions/ScreeningValidationService/StaticValidation/Breast_Screening_staticRules.json b/application/CohortManager/src/Functions/ScreeningValidationService/StaticValidation/Breast_Screening_staticRules.json index 430e7c80a8..bd82528f6a 100644 --- a/application/CohortManager/src/Functions/ScreeningValidationService/StaticValidation/Breast_Screening_staticRules.json +++ b/application/CohortManager/src/Functions/ScreeningValidationService/StaticValidation/Breast_Screening_staticRules.json @@ -97,7 +97,7 @@ "Rules": [ { "RuleName": "30.Postcode.NBO.NonFatal", - "Expression": "string.IsNullOrEmpty(participant.Postcode) OR ValidationHelper.ValidatePostcode(participant.Postcode) OR participant.Postcode == \"ZZZSECUR\" OR participant.Postcode == \"ZZ99\"", + "Expression": "string.IsNullOrEmpty(participant.Postcode) OR ValidationHelper.ValidatePostcode(participant.Postcode) OR participant.Postcode == \"ZZZSECUR\"", "Actions": { "OnFailure": { "Name": "OutputExpression", diff --git a/tests/UnitTests/ScreeningValidationServiceTests/StaticValidation/StaticValidationTests.cs b/tests/UnitTests/ScreeningValidationServiceTests/StaticValidation/StaticValidationTests.cs index 889bd74d94..d05c072da8 100644 --- a/tests/UnitTests/ScreeningValidationServiceTests/StaticValidation/StaticValidationTests.cs +++ b/tests/UnitTests/ScreeningValidationServiceTests/StaticValidation/StaticValidationTests.cs @@ -210,7 +210,6 @@ public async Task Run_DelRecord_DoNotRunCommonRules() [DataRow("ZZ99 9FZ")] [DataRow("ZZ999FZ")] [DataRow("ZZ99 3WZ")] - [DataRow("ZZ99")] [DataRow("ZZZSECUR")] public async Task Run_ValidPostcode_ReturnNoContent(string postcode) {