From 8ed0c1257f10eed5fbfc960875591cb10bf7c10d Mon Sep 17 00:00:00 2001 From: Erik Harding Date: Wed, 8 May 2024 10:11:03 +0200 Subject: [PATCH] Hardcode get_content_search_term --- rp_yal/tests/test_utils.py | 37 ++++++++- rp_yal/utils.py | 152 +++++++++++++++++++------------------ 2 files changed, 115 insertions(+), 74 deletions(-) diff --git a/rp_yal/tests/test_utils.py b/rp_yal/tests/test_utils.py index a5d2870..ec328f9 100644 --- a/rp_yal/tests/test_utils.py +++ b/rp_yal/tests/test_utils.py @@ -347,7 +347,7 @@ def test_get_content_search_term_high_risk_all_completed(self): "gender_attitude_content_complete": "true", } search_term = utils.get_content_search_term(fields) - self.assertEqual(search_term, "") + self.assertIsNone(search_term) def test_get_content_search_term_high_risk_with_last_topic(self): """ @@ -357,6 +357,41 @@ def test_get_content_search_term_high_risk_with_last_topic(self): search_term = utils.get_content_search_term(fields) self.assertEqual(search_term, "body image high-risk") + def test_get_content_search_term_last_topic_depression_not_complete(self): + """ + If last topic is set we start looping from there + """ + fields = {"last_topic_sent": "gender attitudes"} + search_term = utils.get_content_search_term(fields) + self.assertEqual(search_term, "depression high-risk") + + def test_get_content_search_term_last_topic_depression_completed(self): + """ + If the last topic is gender attitudes and depression is completed return + connectedness high-risk + """ + fields = { + "last_topic_sent": "gender attitudes", + "depression_content_complete": "true", + } + search_term = utils.get_content_search_term(fields) + self.assertEqual(search_term, "connectedness high-risk") + + def test_get_content_search_term_last_topic_all_completed(self): + """ + If the last topic is gender attitudes and all sets are completed return None + """ + fields = { + "last_topic_sent": "gender attitudes", + "depression_content_complete": "true", + "connectedness_content_complete": "true", + "body_image_content_complete": "true", + "selfperceived_healthcare_complete": "true", + "gender_attitude_content_complete": "true", + } + search_term = utils.get_content_search_term(fields) + self.assertIsNone(search_term) + class SearchOrderedContentSetsTestcase(TestCase): def setUp(self): diff --git a/rp_yal/utils.py b/rp_yal/utils.py index 8ede2fa..2f6bba2 100644 --- a/rp_yal/utils.py +++ b/rp_yal/utils.py @@ -70,84 +70,90 @@ def get_gender(rp_gender): return rp_gender.replace("_", "-").lower() -def get_content_search_term(fields): - last_topic_sent = fields.get("last_topic_sent", "") +def get_content_search_term(fields, last_topic_sent=None): + if not last_topic_sent: + last_topic_sent = fields.get("last_topic_sent", "") + + risks = { + "depression": "depression_and_anxiety_risk", + "gender attitudes": "gender_attitude_risk", + "self perceived healthcare": "selfperceived_healthcare_risk", + "body image": "body_image_risk", + "connectedness": "connectedness_risk", + } + + def all_complete(): + return ( + fields.get("depression_content_complete", "") == "true" + and fields.get("gender_attitude_content_complete", "") == "true" + and fields.get("selfperceived_healthcare_complete", "") == "true" + and fields.get("body_image_content_complete", "") == "true" + and fields.get("connectedness_content_complete", "") == "true" + ) if fields.get("depression_and_anxiety_risk", "") == "low_risk": - flow = { - "depression": { - "complete": "depression_content_complete", - "next": "gender attitudes", - "risk": "depression_and_anxiety_risk", - }, - "gender attitudes": { - "complete": "gender_attitude_content_complete", - "next": "self perceived healthcare", - "risk": "gender_attitude_risk", - }, - "self perceived healthcare": { - "complete": "selfperceived_healthcare_complete", - "next": "body image", - "risk": "selfperceived_healthcare_risk", - }, - "body image": { - "complete": "body_image_content_complete", - "next": "connectedness", - "risk": "body_image_risk", - }, - "connectedness": { - "complete": "connectedness_content_complete", - "next": "", - "risk": "connectedness_risk", - }, - } - else: - flow = { - "depression": { - "complete": "depression_content_complete", - "next": "connectedness", - "risk": "depression_and_anxiety_risk", - }, - "connectedness": { - "complete": "connectedness_content_complete", - "next": "body image", - "risk": "connectedness_risk", - }, - "body image": { - "complete": "body_image_content_complete", - "next": "self perceived healthcare", - "risk": "body_image_risk", - }, - "self perceived healthcare": { - "complete": "selfperceived_healthcare_complete", - "next": "gender attitudes", - "risk": "selfperceived_healthcare_risk", - }, - "gender attitudes": { - "complete": "gender_attitude_content_complete", - "next": "", - "risk": "gender_attitude_risk", - }, - } - - def get_next_topic_and_risk(last): - if not last: - next = "depression" + if last_topic_sent == "depression": + if fields.get("gender_attitude_content_complete", "") == "true": + return get_content_search_term(fields, "gender attitudes") + else: + next_topic = "gender attitudes" + elif last_topic_sent == "gender attitudes": + if fields.get("selfperceived_healthcare_complete", "") == "true": + return get_content_search_term(fields, "self perceived healthcare") + else: + return "self perceived healthcare" + elif last_topic_sent == "self perceived healthcare": + if fields.get("body_image_content_complete", "") == "true": + return get_content_search_term(fields, "body image") + else: + next_topic = "body image" + elif last_topic_sent == "body image": + if fields.get("connectedness_content_complete", "") == "true": + return get_content_search_term(fields, "connectedness") + else: + next_topic = "connectedness" else: - next = flow[last]["next"] - - if not next: - return "" - - if fields.get(flow[next]["complete"], "") == "true": - return get_next_topic_and_risk(next) + if fields.get("depression_content_complete", "") == "true": + if all_complete(): + return None + else: + return get_content_search_term(fields, "depression") + else: + next_topic = "depression" + else: + if last_topic_sent == "self perceived healthcare": + if fields.get("gender_attitude_content_complete", "") == "true": + return get_content_search_term(fields, "gender attitudes") + else: + next_topic = "gender attitudes" + elif last_topic_sent == "body image": + if fields.get("selfperceived_healthcare_complete", "") == "true": + return get_content_search_term(fields, "self perceived healthcare") + else: + return "self perceived healthcare" + elif last_topic_sent == "connectedness": + if fields.get("body_image_content_complete", "") == "true": + return get_content_search_term(fields, "body image") + else: + next_topic = "body image" + elif last_topic_sent == "depression": + if fields.get("connectedness_content_complete", "") == "true": + return get_content_search_term(fields, "connectedness") + else: + next_topic = "connectedness" else: - risk_label = "high-risk" - if "low" in fields.get(flow[next]["risk"], ""): - risk_label = "mandatory" - return f"{next} {risk_label}" + if fields.get("depression_content_complete", "") == "true": + if all_complete(): + return None + else: + return get_content_search_term(fields, "depression") + else: + next_topic = "depression" - return get_next_topic_and_risk(last_topic_sent) + risk_label = "high-risk" + if "low" in fields.get(risks[next_topic], ""): + risk_label = "mandatory" + return f"{next_topic} {risk_label}" def search_ordered_content_sets(org, search_term):