From 29c680ca048214fbfc8b09caaa3cacc42d514aaa Mon Sep 17 00:00:00 2001 From: subhamkumarr Date: Wed, 17 Jan 2024 16:26:59 +0530 Subject: [PATCH 1/9] TRUNK-6030 The allergy field in the Allergy UI allows the user to enter a numeric value, considering allergies cannot have numeric name, we must validate the input string before allowing the user to procced further --- .../main/java/org/openmrs/validator/AllergyValidator.java | 5 +++++ api/src/main/resources/messages.properties | 1 + .../java/org/openmrs/validator/AllergyValidatorTest.java | 8 ++++++++ 3 files changed, 14 insertions(+) diff --git a/api/src/main/java/org/openmrs/validator/AllergyValidator.java b/api/src/main/java/org/openmrs/validator/AllergyValidator.java index 9153eaa81a55..40114f968bbb 100644 --- a/api/src/main/java/org/openmrs/validator/AllergyValidator.java +++ b/api/src/main/java/org/openmrs/validator/AllergyValidator.java @@ -63,6 +63,11 @@ public void validate(Object target, Errors errors) { ValidationUtils.rejectIfEmpty(errors, "patient", "allergyapi.patient.required"); Allergy allergy = (Allergy) target; + + // Additional validation: Ensure allergen does not contain numeric values + if (allergy.getAllergen() != null && StringUtils.isNumeric(allergy.getAllergen().getNonCodedAllergen())) { + errors.rejectValue("allergen", "error.allergyapi.allergy.Allergen.cannotContainNumeric"); + } if (allergy.getReactionNonCoded() != null) { if (NumberUtils.isParsable(allergy.getReactionNonCoded())) { diff --git a/api/src/main/resources/messages.properties b/api/src/main/resources/messages.properties index 7d5561d5118a..dc46660f4e42 100644 --- a/api/src/main/resources/messages.properties +++ b/api/src/main/resources/messages.properties @@ -94,6 +94,7 @@ error.email.alreadyInUse=Email address is already assigned to another user accou error.activationkey.invalid =Invalid user activation Key error.usernameOrEmail.notNullOrBlank =Username Or email cannot be null or blank error.allergyapi.allergy.ReactionNonCoded.cannotBeNumeric=Reaction Non-coded must not be only a number +error.allergyapi.allergen.nonCodedAllergen.cannotBeNumeric=Non-coded Allergen must not be only a number general.at=at general.with=with diff --git a/api/src/test/java/org/openmrs/validator/AllergyValidatorTest.java b/api/src/test/java/org/openmrs/validator/AllergyValidatorTest.java index 9b1d57d03eb3..f7348d665ab9 100644 --- a/api/src/test/java/org/openmrs/validator/AllergyValidatorTest.java +++ b/api/src/test/java/org/openmrs/validator/AllergyValidatorTest.java @@ -191,4 +191,12 @@ public void validate_shouldRejectNumericReactionValue() { validator.validate(allergy, errors); assertTrue(errors.hasErrors()); } + @Test + public void validate_shouldRejectNumericAllergenValue() { + Allergen allergen = new Allergen(AllergenType.DRUG, null , "45" ); + allergy.setAllergen(allergen); + Errors errors = new BindException(allergy,"allergy"); + validator.validate(allergy, errors); + assertTrue(errors.hasErrors()); + } } From c6877eaf3f5026f8f89040686a0dd1f53b2f5a38 Mon Sep 17 00:00:00 2001 From: subhamkumarr Date: Wed, 17 Jan 2024 17:24:06 +0530 Subject: [PATCH 2/9] TRUNK-6030 moved `if` inside the `else` block --- .../java/org/openmrs/validator/AllergyValidator.java | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/api/src/main/java/org/openmrs/validator/AllergyValidator.java b/api/src/main/java/org/openmrs/validator/AllergyValidator.java index 40114f968bbb..c91e46b4698f 100644 --- a/api/src/main/java/org/openmrs/validator/AllergyValidator.java +++ b/api/src/main/java/org/openmrs/validator/AllergyValidator.java @@ -63,11 +63,6 @@ public void validate(Object target, Errors errors) { ValidationUtils.rejectIfEmpty(errors, "patient", "allergyapi.patient.required"); Allergy allergy = (Allergy) target; - - // Additional validation: Ensure allergen does not contain numeric values - if (allergy.getAllergen() != null && StringUtils.isNumeric(allergy.getAllergen().getNonCodedAllergen())) { - errors.rejectValue("allergen", "error.allergyapi.allergy.Allergen.cannotContainNumeric"); - } if (allergy.getReactionNonCoded() != null) { if (NumberUtils.isParsable(allergy.getReactionNonCoded())) { @@ -87,6 +82,11 @@ public void validate(Object target, Errors errors) { } else if (!allergen.isCoded() && StringUtils.isBlank(allergen.getNonCodedAllergen())) { errors.rejectValue("allergen", "allergyapi.allergen.nonCodedAllergen.required"); } + + // Additional validation: Ensure allergen does not contain numeric values + if (allergy.getAllergen() != null && StringUtils.isNumeric(allergy.getAllergen().getNonCodedAllergen())) { + errors.rejectValue("allergen", "error.allergyapi.allergy.Allergen.cannotContainNumeric"); + } if (allergy.getAllergyId() == null && allergy.getPatient() != null) { Allergies existingAllergies = patientService.getAllergies(allergy.getPatient()); From 4ea96dc45d054ca37a32f18b51b1d17fdbb8b017 Mon Sep 17 00:00:00 2001 From: subhamkumarr Date: Wed, 17 Jan 2024 17:40:38 +0530 Subject: [PATCH 3/9] TRUNK-6030 Removed `allergy.getAllergen() != null &&` as it has already been checked --- api/src/main/java/org/openmrs/validator/AllergyValidator.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/api/src/main/java/org/openmrs/validator/AllergyValidator.java b/api/src/main/java/org/openmrs/validator/AllergyValidator.java index c91e46b4698f..0fbc88f7b887 100644 --- a/api/src/main/java/org/openmrs/validator/AllergyValidator.java +++ b/api/src/main/java/org/openmrs/validator/AllergyValidator.java @@ -84,7 +84,7 @@ public void validate(Object target, Errors errors) { } // Additional validation: Ensure allergen does not contain numeric values - if (allergy.getAllergen() != null && StringUtils.isNumeric(allergy.getAllergen().getNonCodedAllergen())) { + if (StringUtils.isNumeric(allergy.getAllergen().getNonCodedAllergen())) { errors.rejectValue("allergen", "error.allergyapi.allergy.Allergen.cannotContainNumeric"); } From e97ebe66099138b37bf322606c16d241d4c9c8ae Mon Sep 17 00:00:00 2001 From: subhamkumarr Date: Wed, 17 Jan 2024 17:42:30 +0530 Subject: [PATCH 4/9] TRUNK-6030 Comment removed --- api/src/main/java/org/openmrs/validator/AllergyValidator.java | 1 - 1 file changed, 1 deletion(-) diff --git a/api/src/main/java/org/openmrs/validator/AllergyValidator.java b/api/src/main/java/org/openmrs/validator/AllergyValidator.java index 0fbc88f7b887..a76a0794106e 100644 --- a/api/src/main/java/org/openmrs/validator/AllergyValidator.java +++ b/api/src/main/java/org/openmrs/validator/AllergyValidator.java @@ -83,7 +83,6 @@ public void validate(Object target, Errors errors) { errors.rejectValue("allergen", "allergyapi.allergen.nonCodedAllergen.required"); } - // Additional validation: Ensure allergen does not contain numeric values if (StringUtils.isNumeric(allergy.getAllergen().getNonCodedAllergen())) { errors.rejectValue("allergen", "error.allergyapi.allergy.Allergen.cannotContainNumeric"); } From 22c9a462f077a3ec71b91d4b6914ee2f5f29d766 Mon Sep 17 00:00:00 2001 From: subhamkumarr Date: Wed, 17 Jan 2024 19:35:25 +0530 Subject: [PATCH 5/9] Update AllergyValidator.java TRUNK-6030: validate the input string --- .../main/java/org/openmrs/validator/AllergyValidator.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/api/src/main/java/org/openmrs/validator/AllergyValidator.java b/api/src/main/java/org/openmrs/validator/AllergyValidator.java index a76a0794106e..0a0c4d12d0c7 100644 --- a/api/src/main/java/org/openmrs/validator/AllergyValidator.java +++ b/api/src/main/java/org/openmrs/validator/AllergyValidator.java @@ -83,9 +83,9 @@ public void validate(Object target, Errors errors) { errors.rejectValue("allergen", "allergyapi.allergen.nonCodedAllergen.required"); } - if (StringUtils.isNumeric(allergy.getAllergen().getNonCodedAllergen())) { - errors.rejectValue("allergen", "error.allergyapi.allergy.Allergen.cannotContainNumeric"); - } + if (StringUtils.isNumeric(allergen.getNonCodedAllergen())) { + errors.rejectValue("allergen", "error.allergyapi.allergy.Allergen.cannotContainNumeric"); + } if (allergy.getAllergyId() == null && allergy.getPatient() != null) { Allergies existingAllergies = patientService.getAllergies(allergy.getPatient()); From 19764d31bc2d8708702c9f7d54d1c75b9837752c Mon Sep 17 00:00:00 2001 From: subhamkumarr Date: Thu, 18 Jan 2024 00:13:16 +0530 Subject: [PATCH 6/9] Update AllergyValidatorTest.java TRUNK-6030 : validate the input string --- .../test/java/org/openmrs/validator/AllergyValidatorTest.java | 1 + 1 file changed, 1 insertion(+) diff --git a/api/src/test/java/org/openmrs/validator/AllergyValidatorTest.java b/api/src/test/java/org/openmrs/validator/AllergyValidatorTest.java index f7348d665ab9..e349c422c53a 100644 --- a/api/src/test/java/org/openmrs/validator/AllergyValidatorTest.java +++ b/api/src/test/java/org/openmrs/validator/AllergyValidatorTest.java @@ -198,5 +198,6 @@ public void validate_shouldRejectNumericAllergenValue() { Errors errors = new BindException(allergy,"allergy"); validator.validate(allergy, errors); assertTrue(errors.hasErrors()); + assertThat(errors.getFieldError("allergen").getCode(), is("your_expected_error_code_here")); } } From e4b53264ccd45f9b8e01302fc7abf2905f07ca64 Mon Sep 17 00:00:00 2001 From: subhamkumarr Date: Thu, 18 Jan 2024 00:20:03 +0530 Subject: [PATCH 7/9] Update AllergyValidatorTest.java TRUNK-6030 : validate the input string --- .../test/java/org/openmrs/validator/AllergyValidatorTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/api/src/test/java/org/openmrs/validator/AllergyValidatorTest.java b/api/src/test/java/org/openmrs/validator/AllergyValidatorTest.java index e349c422c53a..8a4658ed44f4 100644 --- a/api/src/test/java/org/openmrs/validator/AllergyValidatorTest.java +++ b/api/src/test/java/org/openmrs/validator/AllergyValidatorTest.java @@ -198,6 +198,6 @@ public void validate_shouldRejectNumericAllergenValue() { Errors errors = new BindException(allergy,"allergy"); validator.validate(allergy, errors); assertTrue(errors.hasErrors()); - assertThat(errors.getFieldError("allergen").getCode(), is("your_expected_error_code_here")); + assertThat(errors.getFieldError("allergen").getCode(), is("Allergen cannot be numeric value")); } } From 78742afe9fa4dc2ff7423e1cd0632244bbfc6c68 Mon Sep 17 00:00:00 2001 From: subhamkumarr Date: Thu, 18 Jan 2024 00:29:36 +0530 Subject: [PATCH 8/9] TRUNK-6030 TRUNK-6030: validate the input string --- api/src/main/java/org/openmrs/validator/AllergyValidator.java | 2 +- .../test/java/org/openmrs/validator/AllergyValidatorTest.java | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/api/src/main/java/org/openmrs/validator/AllergyValidator.java b/api/src/main/java/org/openmrs/validator/AllergyValidator.java index 0a0c4d12d0c7..d17e23cd30a0 100644 --- a/api/src/main/java/org/openmrs/validator/AllergyValidator.java +++ b/api/src/main/java/org/openmrs/validator/AllergyValidator.java @@ -84,7 +84,7 @@ public void validate(Object target, Errors errors) { } if (StringUtils.isNumeric(allergen.getNonCodedAllergen())) { - errors.rejectValue("allergen", "error.allergyapi.allergy.Allergen.cannotContainNumeric"); + errors.rejectValue("allergen", ".allergyapi.allergy.Allergen.cannotContainNumeric"); } if (allergy.getAllergyId() == null && allergy.getPatient() != null) { diff --git a/api/src/test/java/org/openmrs/validator/AllergyValidatorTest.java b/api/src/test/java/org/openmrs/validator/AllergyValidatorTest.java index 8a4658ed44f4..703f3b3bae29 100644 --- a/api/src/test/java/org/openmrs/validator/AllergyValidatorTest.java +++ b/api/src/test/java/org/openmrs/validator/AllergyValidatorTest.java @@ -198,6 +198,6 @@ public void validate_shouldRejectNumericAllergenValue() { Errors errors = new BindException(allergy,"allergy"); validator.validate(allergy, errors); assertTrue(errors.hasErrors()); - assertThat(errors.getFieldError("allergen").getCode(), is("Allergen cannot be numeric value")); - } + assertTrue(errors.getAllErrors().stream() + .anyMatch(error -> "allergyapi.allergy.Allergen.cannotContainNumeric".equals(error.getCode()))); } } From 339f7eb63fb12d01663994f362de4ed545e97558 Mon Sep 17 00:00:00 2001 From: subhamkumarr Date: Thu, 18 Jan 2024 08:32:14 +0530 Subject: [PATCH 9/9] Update AllergyValidator.java TRUNK-6030 : validate the input string --- api/src/main/java/org/openmrs/validator/AllergyValidator.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/api/src/main/java/org/openmrs/validator/AllergyValidator.java b/api/src/main/java/org/openmrs/validator/AllergyValidator.java index d17e23cd30a0..3f52f6620256 100644 --- a/api/src/main/java/org/openmrs/validator/AllergyValidator.java +++ b/api/src/main/java/org/openmrs/validator/AllergyValidator.java @@ -84,7 +84,7 @@ public void validate(Object target, Errors errors) { } if (StringUtils.isNumeric(allergen.getNonCodedAllergen())) { - errors.rejectValue("allergen", ".allergyapi.allergy.Allergen.cannotContainNumeric"); + errors.rejectValue("allergen", "allergyapi.allergy.Allergen.cannotContainNumeric"); } if (allergy.getAllergyId() == null && allergy.getPatient() != null) {