From 3bfd178a805bd571d080be8d282cc98770b199bc Mon Sep 17 00:00:00 2001 From: Oneeb <258801025+oneeb-nhs@users.noreply.github.com> Date: Wed, 8 Apr 2026 09:36:09 +0100 Subject: [PATCH 1/4] added status_text_override constant and tests --- src/eligibility_signposting_api/config/constants.py | 1 + src/eligibility_signposting_api/model/eligibility_status.py | 1 + tests/unit/config/test_config.py | 5 +++++ 3 files changed, 7 insertions(+) diff --git a/src/eligibility_signposting_api/config/constants.py b/src/eligibility_signposting_api/config/constants.py index 813a12b19..9423a637e 100644 --- a/src/eligibility_signposting_api/config/constants.py +++ b/src/eligibility_signposting_api/config/constants.py @@ -9,3 +9,4 @@ CONSUMER_MAPPING_FILE_NAME = "consumer_mapping_config.json" CACHE_TTL_SECONDS = int(os.getenv("CONFIG_CACHE_TTL_SECONDS", "1800")) +STATUS_TEXT_OVERRIDE_ACTION_TYPE = "norender_StatusTextOverride" \ No newline at end of file diff --git a/src/eligibility_signposting_api/model/eligibility_status.py b/src/eligibility_signposting_api/model/eligibility_status.py index 89b73828b..f7096a08d 100644 --- a/src/eligibility_signposting_api/model/eligibility_status.py +++ b/src/eligibility_signposting_api/model/eligibility_status.py @@ -151,6 +151,7 @@ class MatchedActionDetail: rule_name: campaign_config.RuleName | None = None rule_priority: campaign_config.RulePriority | None = None actions: list[SuggestedAction] | None = None + status_text_override: StatusText | None = None @dataclass diff --git a/tests/unit/config/test_config.py b/tests/unit/config/test_config.py index 1deefbb87..d85cc5ed9 100644 --- a/tests/unit/config/test_config.py +++ b/tests/unit/config/test_config.py @@ -3,6 +3,7 @@ import pytest from yarl import URL +from eligibility_signposting_api.config.constants import STATUS_TEXT_OVERRIDE_ACTION_TYPE from eligibility_signposting_api.config.config import LOG_LEVEL, AwsAccessKey, AwsRegion, AwsSecretAccessKey, config from eligibility_signposting_api.repos.campaign_repo import BucketName from eligibility_signposting_api.repos.person_repo import TableName @@ -48,3 +49,7 @@ def test_config_without_env_variable(): assert config_data_without_env["s3_endpoint"] == URL("http://localhost:4566") assert config_data_without_env["rules_bucket_name"] == BucketName("test-rules-bucket") assert config_data_without_env["log_level"] == LOG_LEVEL + + +def test_status_text_override_action_type_constant_value(): + assert STATUS_TEXT_OVERRIDE_ACTION_TYPE == "norender_StatusTextOverride" From 9701cfa843ca613866df522926a90dc0ae2d73d1 Mon Sep 17 00:00:00 2001 From: Oneeb <258801025+oneeb-nhs@users.noreply.github.com> Date: Wed, 8 Apr 2026 11:37:48 +0100 Subject: [PATCH 2/4] added tests to test_status --- tests/unit/model/test_status.py | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/tests/unit/model/test_status.py b/tests/unit/model/test_status.py index 8c07b9511..f6d2300ca 100644 --- a/tests/unit/model/test_status.py +++ b/tests/unit/model/test_status.py @@ -1,4 +1,6 @@ +from eligibility_signposting_api.model.campaign_config import RuleName, RulePriority from eligibility_signposting_api.model.eligibility_status import ConditionName, RuleType, Status, StatusText +from eligibility_signposting_api.model.eligibility_status import MatchedActionDetail, SuggestedAction class TestStatus: @@ -45,3 +47,26 @@ def test_get_action_rule_type(self): assert Status.not_actionable.get_action_rule_type() == RuleType(RuleType.not_actionable_actions) assert Status.actionable.get_action_rule_type() == RuleType(RuleType.redirect) + + +def test_matched_action_detail_default_status_text_override_is_none(): + action_detail = MatchedActionDetail() + + assert action_detail.status_text_override is None + + +def test_matched_action_detail_stores_status_text_override_value(): + action_detail = MatchedActionDetail(status_text_override=StatusText("X")) + + assert action_detail.status_text_override == StatusText("X") + + +def test_matched_action_detail_existing_constructor_still_works_with_three_args(): + actions: list[SuggestedAction] = [] + + action_detail = MatchedActionDetail(RuleName("RuleA"), RulePriority(1), actions) + + assert action_detail.rule_name == RuleName("RuleA") + assert action_detail.rule_priority == RulePriority(1) + assert action_detail.actions == actions + assert action_detail.status_text_override is None From fb5a53b7821909ee1e4eb75a8c2332380da19e98 Mon Sep 17 00:00:00 2001 From: Oneeb <258801025+oneeb-nhs@users.noreply.github.com> Date: Wed, 8 Apr 2026 12:11:15 +0100 Subject: [PATCH 3/4] created test to show override working --- .../config/constants.py | 2 +- tests/unit/config/test_config.py | 2 +- tests/unit/model/test_status.py | 23 +++++++++++++++++-- 3 files changed, 23 insertions(+), 4 deletions(-) diff --git a/src/eligibility_signposting_api/config/constants.py b/src/eligibility_signposting_api/config/constants.py index 9423a637e..a05aca48e 100644 --- a/src/eligibility_signposting_api/config/constants.py +++ b/src/eligibility_signposting_api/config/constants.py @@ -9,4 +9,4 @@ CONSUMER_MAPPING_FILE_NAME = "consumer_mapping_config.json" CACHE_TTL_SECONDS = int(os.getenv("CONFIG_CACHE_TTL_SECONDS", "1800")) -STATUS_TEXT_OVERRIDE_ACTION_TYPE = "norender_StatusTextOverride" \ No newline at end of file +STATUS_TEXT_OVERRIDE_ACTION_TYPE = "norender_StatusTextOverride" diff --git a/tests/unit/config/test_config.py b/tests/unit/config/test_config.py index d85cc5ed9..d7f6b033e 100644 --- a/tests/unit/config/test_config.py +++ b/tests/unit/config/test_config.py @@ -3,8 +3,8 @@ import pytest from yarl import URL -from eligibility_signposting_api.config.constants import STATUS_TEXT_OVERRIDE_ACTION_TYPE from eligibility_signposting_api.config.config import LOG_LEVEL, AwsAccessKey, AwsRegion, AwsSecretAccessKey, config +from eligibility_signposting_api.config.constants import STATUS_TEXT_OVERRIDE_ACTION_TYPE from eligibility_signposting_api.repos.campaign_repo import BucketName from eligibility_signposting_api.repos.person_repo import TableName diff --git a/tests/unit/model/test_status.py b/tests/unit/model/test_status.py index f6d2300ca..e8fd10314 100644 --- a/tests/unit/model/test_status.py +++ b/tests/unit/model/test_status.py @@ -1,6 +1,12 @@ from eligibility_signposting_api.model.campaign_config import RuleName, RulePriority -from eligibility_signposting_api.model.eligibility_status import ConditionName, RuleType, Status, StatusText -from eligibility_signposting_api.model.eligibility_status import MatchedActionDetail, SuggestedAction +from eligibility_signposting_api.model.eligibility_status import ( + ConditionName, + MatchedActionDetail, + RuleType, + Status, + StatusText, + SuggestedAction, +) class TestStatus: @@ -70,3 +76,16 @@ def test_matched_action_detail_existing_constructor_still_works_with_three_args( assert action_detail.rule_priority == RulePriority(1) assert action_detail.actions == actions assert action_detail.status_text_override is None + + +def test_matched_action_detail_existing_constructor_works_with_four_args(): + actions: list[SuggestedAction] = [] + + action_detail = MatchedActionDetail( + RuleName("RuleA"), RulePriority(1), actions, status_text_override=StatusText("Override") + ) + + assert action_detail.rule_name == RuleName("RuleA") + assert action_detail.rule_priority == RulePriority(1) + assert action_detail.actions == actions + assert action_detail.status_text_override == StatusText("Override") From 0a11f09c29149bbd2854fb7ca68d16fd7f8c13ab Mon Sep 17 00:00:00 2001 From: Oneeb <258801025+oneeb-nhs@users.noreply.github.com> Date: Wed, 8 Apr 2026 16:12:49 +0100 Subject: [PATCH 4/4] updated tests to use hamcrest --- tests/unit/model/test_status.py | 32 ++++++++++++++++++++++---------- 1 file changed, 22 insertions(+), 10 deletions(-) diff --git a/tests/unit/model/test_status.py b/tests/unit/model/test_status.py index e8fd10314..4419542f0 100644 --- a/tests/unit/model/test_status.py +++ b/tests/unit/model/test_status.py @@ -1,3 +1,5 @@ +from hamcrest import assert_that, has_properties + from eligibility_signposting_api.model.campaign_config import RuleName, RulePriority from eligibility_signposting_api.model.eligibility_status import ( ConditionName, @@ -58,13 +60,13 @@ def test_get_action_rule_type(self): def test_matched_action_detail_default_status_text_override_is_none(): action_detail = MatchedActionDetail() - assert action_detail.status_text_override is None + assert_that(action_detail, has_properties(status_text_override=None)) def test_matched_action_detail_stores_status_text_override_value(): action_detail = MatchedActionDetail(status_text_override=StatusText("X")) - assert action_detail.status_text_override == StatusText("X") + assert_that(action_detail, has_properties(status_text_override=StatusText("X"))) def test_matched_action_detail_existing_constructor_still_works_with_three_args(): @@ -72,10 +74,15 @@ def test_matched_action_detail_existing_constructor_still_works_with_three_args( action_detail = MatchedActionDetail(RuleName("RuleA"), RulePriority(1), actions) - assert action_detail.rule_name == RuleName("RuleA") - assert action_detail.rule_priority == RulePriority(1) - assert action_detail.actions == actions - assert action_detail.status_text_override is None + assert_that( + action_detail, + has_properties( + rule_name=RuleName("RuleA"), + rule_priority=RulePriority(1), + actions=actions, + status_text_override=StatusText(None), + ), + ) def test_matched_action_detail_existing_constructor_works_with_four_args(): @@ -85,7 +92,12 @@ def test_matched_action_detail_existing_constructor_works_with_four_args(): RuleName("RuleA"), RulePriority(1), actions, status_text_override=StatusText("Override") ) - assert action_detail.rule_name == RuleName("RuleA") - assert action_detail.rule_priority == RulePriority(1) - assert action_detail.actions == actions - assert action_detail.status_text_override == StatusText("Override") + assert_that( + action_detail, + has_properties( + rule_name=RuleName("RuleA"), + rule_priority=RulePriority(1), + actions=actions, + status_text_override=StatusText("Override"), + ), + )