From f365e56b757fb06bc0e7bb3a29319062d7681fbc Mon Sep 17 00:00:00 2001 From: Michael Olund Date: Thu, 8 Oct 2020 14:35:14 -0700 Subject: [PATCH] Fixed completeness checks for aliases --- edivorce/apps/core/tests/test_logic.py | 6 +-- edivorce/apps/core/utils/conditional_logic.py | 39 ++++++++++++++++++- 2 files changed, 40 insertions(+), 5 deletions(-) diff --git a/edivorce/apps/core/tests/test_logic.py b/edivorce/apps/core/tests/test_logic.py index ef05a79b..f1319fad 100644 --- a/edivorce/apps/core/tests/test_logic.py +++ b/edivorce/apps/core/tests/test_logic.py @@ -32,13 +32,13 @@ class ConditionalLogicTestCase(TestCase): self.assertIsNone(logic.get_cleaned_response_value(' ')) self.assertIsNone(logic.get_cleaned_response_value('[]')) self.assertIsNone(logic.get_cleaned_response_value('[[""," "]]')) - self.assertIsNone(logic.get_cleaned_response_value('[["also known as",""]]')) - self.assertIsNone(logic.get_cleaned_response_value('[["also known as",""],["also known as",""]]')) + self.assertIsNone(logic.get_cleaned_response_value('[["also known as","","","",""]]')) + self.assertIsNone(logic.get_cleaned_response_value('[["also known as","","","",""],["also known as","","","",""]]')) def test_get_cleaned_response_with_value(self): self.assertIsNotNone(logic.get_cleaned_response_value('0')) self.assertIsNotNone(logic.get_cleaned_response_value('["hi"]')) - self.assertIsNotNone(logic.get_cleaned_response_value('[["also known as","a"]]')) + self.assertIsNotNone(logic.get_cleaned_response_value('[["also known as","a","b","",""]]')) def test_num_children(self): # No children diff --git a/edivorce/apps/core/utils/conditional_logic.py b/edivorce/apps/core/utils/conditional_logic.py index 49859454..0c2fa0ac 100644 --- a/edivorce/apps/core/utils/conditional_logic.py +++ b/edivorce/apps/core/utils/conditional_logic.py @@ -194,7 +194,42 @@ def get_cleaned_response_value(response): if response is None: return None response = response.strip() - search_text = response.replace('also known as', '') - if re.search(r'\w+', search_text): + + if response.startswith('[["also known as","'): + return __get_cleaned_aka(response) + + if re.search(r'\w+', response): return response return None + + +def __get_cleaned_aka(response): + """Checks is other_name_you and other_name_spouse (a.k.a. fields) are valid, and + containt both a first name and a last name""" + try: + aka = json.loads(response) + except: + return None + + if len(aka) == 0 or len(aka[0]) != 5: + return None + + has_lastname1 = re.search(r'\w+', aka[0][1]) + has_firstname1 = re.search(r'\w+', aka[0][2]) + + if has_lastname1 and has_firstname1: + if len(aka) == 1: + return response + + has_lastname2 = re.search(r'\w+', aka[1][1]) + has_firstname2 = re.search(r'\w+', aka[1][2]) + + # firstname and lastname can both be blank or both have values + # but you can't have a value for one and not the other. + if has_lastname2 and has_firstname2: + return response + + if not has_lastname2 and not has_firstname2: + return response + + return None