diff --git a/edivorce/apps/core/tests/test_efiling_hub.py b/edivorce/apps/core/tests/test_efiling_hub.py index b289fe91..fd34ef39 100644 --- a/edivorce/apps/core/tests/test_efiling_hub.py +++ b/edivorce/apps/core/tests/test_efiling_hub.py @@ -1,5 +1,4 @@ import json -import requests from unittest import mock from django.contrib.sessions.middleware import SessionMiddleware diff --git a/edivorce/apps/core/tests/test_filing.py b/edivorce/apps/core/tests/test_filing.py new file mode 100644 index 00000000..b87f8db9 --- /dev/null +++ b/edivorce/apps/core/tests/test_filing.py @@ -0,0 +1,151 @@ +from django.test import TestCase + +from edivorce.apps.core.models import BceidUser, Document, UserResponse +from edivorce.apps.core.utils.cso_filing import forms_to_file +from edivorce.apps.core.utils.user_response import get_data_for_user + + +class FilingLogic(TestCase): + fixtures = ['Question.json'] + + def setUp(self): + self.user = BceidUser.objects.create(user_guid='1234') + self.create_response('how_to_file', 'Online') + + def create_response(self, question, value): + response, _ = UserResponse.objects.get_or_create(bceid_user=self.user, question_id=question) + response.value = value + response.save() + + @property + def questions_dict(self): + return get_data_for_user(self.user) + + def test_forms_to_file_initial_together_in_person(self): + def assert_package_1_needed(uploaded, generated): + self.assertEqual(len(uploaded), 3) + self.assertIn({'doc_type': doc_type("proof of marriage"), 'party_code': 0}, uploaded) + self.assertIn({'doc_type': doc_type("affidavit of translation"), 'party_code': 0}, uploaded) + self.assertIn({'doc_type': doc_type("joint divorce proceedings"), 'party_code': 0}, uploaded) + + self.assertEqual(len(generated), 1) + self.assertIn({'doc_type': doc_type("notice of joint family claim"), 'form_number': 1}, generated) + + self.create_response('how_to_sign', 'Together') + self.create_response('signing_location', 'In-person') + + uploaded, generated = forms_to_file(self.questions_dict, initial=True) + assert_package_1_needed(uploaded, generated) + + self.create_response('how_to_sign', 'Separately') + self.create_response('signing_location_you', 'In-person') + self.create_response('signing_location_spouse', 'In-person') + + uploaded, generated = forms_to_file(self.questions_dict, initial=True) + assert_package_1_needed(uploaded, generated) + + self.create_response('how_to_sign', 'Separately') + self.create_response('signing_location_you', 'In-person') + self.create_response('signing_location_spouse', 'Virtual') + + uploaded, generated = forms_to_file(self.questions_dict, initial=True) + assert_package_1_needed(uploaded, generated) + + def test_forms_to_file_both_virtual(self): + def assert_package_1_2_3_needed(with_efss_spouse=False): + # No conditional forms + self.create_response('children_of_marriage', 'NO') + self.create_response('name_change_you', 'NO') + self.create_response('name_change_spouse', 'NO') + + uploaded, generated = forms_to_file(self.questions_dict, initial=True) + + doc_count = len(uploaded) + if with_efss_spouse: + self.assertEqual(doc_count, 6) + else: + self.assertEqual(doc_count, 5) + self.assertIn({'doc_type': doc_type("proof of marriage"), 'party_code': 0}, uploaded) + self.assertIn({'doc_type': doc_type("affidavit of translation"), 'party_code': 0}, uploaded) + self.assertIn({'doc_type': doc_type("draft final order"), 'party_code': 0}, uploaded) + self.assertIn({'doc_type': doc_type("joint divorce proceedings"), 'party_code': 0}, uploaded) + self.assertIn({'doc_type': doc_type("electronic filing"), 'party_code': 1}, uploaded) + if with_efss_spouse: + self.assertIn({'doc_type': doc_type("electronic filing"), 'party_code': 2}, uploaded) + + self.assertEqual(len(generated), 3) + self.assertIn({'doc_type': doc_type("notice of joint family claim"), 'form_number': 1}, generated) + self.assertIn({'doc_type': doc_type("requisition form"), 'form_number': 35}, generated) + self.assertIn({'doc_type': doc_type("certificate of pleadings"), 'form_number': 36}, generated) + + # Conditional forms + self.create_response('children_of_marriage', 'YES') + self.create_response('has_children_under_19', 'YES') + uploaded, generated = forms_to_file(self.questions_dict, initial=True) + self.assertEqual(len(uploaded), doc_count+1) + self.assertIn({'doc_type': doc_type("agreement as to annual income"), 'party_code': 0}, uploaded) + + self.create_response('want_which_orders', '["Other orders"]') + self.create_response('name_change_you', 'YES') + uploaded, generated = forms_to_file(self.questions_dict, initial=True) + self.assertEqual(len(uploaded), doc_count + 2) + self.assertIn({'doc_type': doc_type("identification of applicant"), 'party_code': 1}, uploaded) + + self.create_response('name_change_spouse', 'YES') + uploaded, generated = forms_to_file(self.questions_dict, initial=True) + self.assertEqual(len(uploaded), doc_count + 3) + self.assertIn({'doc_type': doc_type("identification of applicant"), 'party_code': 2}, uploaded) + + self.create_response('how_to_sign', 'Together') + self.create_response('signing_location', 'Virtual') + + assert_package_1_2_3_needed() + + self.create_response('how_to_sign', 'Separately') + self.create_response('signing_location_you', 'Virtual') + self.create_response('signing_location_spouse', 'Virtual') + + assert_package_1_2_3_needed(with_efss_spouse=True) + + def test_forms_to_file_you_virtual_spouse_in_person(self): + def assert_package_1_2_needed(): + uploaded, generated = forms_to_file(self.questions_dict, initial=True) + + self.assertEqual(len(uploaded), 5) + self.assertIn({'doc_type': doc_type("proof of marriage"), 'party_code': 0}, uploaded) + self.assertIn({'doc_type': doc_type("affidavit of translation"), 'party_code': 0}, uploaded) + self.assertIn({'doc_type': doc_type("draft final order"), 'party_code': 0}, uploaded) + self.assertIn({'doc_type': doc_type("joint divorce proceedings"), 'party_code': 0}, uploaded) + self.assertIn({'doc_type': doc_type("electronic filing"), 'party_code': 1}, uploaded) + + self.assertEqual(len(generated), 3) + self.assertIn({'doc_type': doc_type("notice of joint family claim"), 'form_number': 1}, generated) + self.assertIn({'doc_type': doc_type("requisition form"), 'form_number': 35}, generated) + self.assertIn({'doc_type': doc_type("certificate of pleadings"), 'form_number': 36}, generated) + + # Conditional forms + self.create_response('children_of_marriage', 'YES') + self.create_response('has_children_under_19', 'YES') + uploaded, generated = forms_to_file(self.questions_dict, initial=True) + self.assertEqual(len(uploaded), 6) + self.assertIn({'doc_type': doc_type("agreement as to annual income"), 'party_code': 0}, uploaded) + + self.create_response('want_which_orders', '["Other orders"]') + self.create_response('name_change_you', 'YES') + self.create_response('name_change_spouse', 'YES') + uploaded, generated = forms_to_file(self.questions_dict, initial=True) + self.assertEqual(len(uploaded), 7) + self.assertIn({'doc_type': doc_type("identification of applicant"), 'party_code': 1}, uploaded) + + self.create_response('how_to_sign', 'Separately') + self.create_response('signing_location_you', 'Virtual') + self.create_response('signing_location_spouse', 'In-person') + + assert_package_1_2_needed() + + +def doc_type(text): + for doc_type, name in Document.form_types.items(): + if text.lower() in name.lower(): + return doc_type + raise ValueError(f"Couldn't find doc with name that contains '{text}'") \ No newline at end of file diff --git a/edivorce/apps/core/utils/cso_filing.py b/edivorce/apps/core/utils/cso_filing.py index a67f5438..67e8ff18 100644 --- a/edivorce/apps/core/utils/cso_filing.py +++ b/edivorce/apps/core/utils/cso_filing.py @@ -64,61 +64,62 @@ def forms_to_file(responses_dict, initial=False): derived = responses_dict.get('derived', get_derived_data(responses_dict)) + name_change_you = derived['wants_other_orders'] and responses_dict.get('name_change_you') == 'YES' + name_change_spouse = derived['wants_other_orders'] and responses_dict.get('name_change_spouse') == 'YES' + has_children = derived['has_children_of_marriage'] + if initial: generated.append({'doc_type': 'NJF', 'form_number': 1}) uploaded.append({'doc_type': 'MC', 'party_code': 0}) + uploaded.append({'doc_type': 'AFTL', 'party_code': 0}) if signing_location_both == 'In-person' or signing_location_you == 'In-person': - # at least one claimant is signing with a commissioner - uploaded.append({'doc_type': 'AFTL', 'party_code': 0}) + # claimant 1 is signing with a commissioner uploaded.append({'doc_type': 'RDP', 'party_code': 0}) elif signing_location_you == 'Virtual' and signing_location_spouse == 'In-person': # claimant 1 is signing virtually and claimant 2 is not generated.append({'doc_type': 'RFO', 'form_number': 35}) generated.append({'doc_type': 'RCP', 'form_number': 36}) - uploaded.append({'doc_type': 'AFTL', 'party_code': 0}) uploaded.append({'doc_type': 'OFI', 'party_code': 0}) uploaded.append({'doc_type': 'EFSS', 'party_code': 1}) uploaded.append({'doc_type': 'RDP', 'party_code': 0}) - if derived['has_children_of_marriage']: + if has_children: uploaded.append({'doc_type': 'AAI', 'party_code': 0}) - if derived['wants_other_orders'] and responses_dict.get('name_change_you') == 'YES': + if name_change_you: uploaded.append({'doc_type': 'NCV', 'party_code': 1}) elif signing_location_both == 'Virtual' or (signing_location_you == 'Virtual' and signing_location_spouse == 'Virtual'): # both parties (either together or separately) are signing virtually generated.append({'doc_type': 'RFO', 'form_number': 35}) generated.append({'doc_type': 'RCP', 'form_number': 36}) - uploaded.append({'doc_type': 'AFTL', 'party_code': 0}) uploaded.append({'doc_type': 'OFI', 'party_code': 0}) uploaded.append({'doc_type': 'EFSS', 'party_code': 1}) - uploaded.append({'doc_type': 'EFSS', 'party_code': 2}) + if how_to_sign == 'Separately': + uploaded.append({'doc_type': 'EFSS', 'party_code': 2}) uploaded.append({'doc_type': 'RDP', 'party_code': 0}) - if derived['has_children_of_marriage']: + if has_children: uploaded.append({'doc_type': 'AAI', 'party_code': 0}) - if derived['wants_other_orders'] and responses_dict.get('name_change_you') == 'YES': + if name_change_you: uploaded.append({'doc_type': 'NCV', 'party_code': 1}) - if derived['wants_other_orders'] and responses_dict.get('name_change_spouse') == 'YES': + if name_change_spouse: uploaded.append({'doc_type': 'NCV', 'party_code': 2}) - else: - return ([], []) + return [], [] else: # Final Filing - if signing_location_both == 'Virtual': # if both parties have signed virtually and signing together - if derived['has_children_of_marriage']: + if has_children: uploaded.append({'doc_type': 'CSA', 'party_code': 0}) uploaded.append({'doc_type': 'AFDO', 'party_code': 0}) elif signing_location_you == 'Virtual' and signing_location_spouse == 'Virtual': # both parties have signed virtually and signing separately - if derived['has_children_of_marriage']: + if has_children: uploaded.append({'doc_type': 'CSA', 'party_code': 1}) uploaded.append({'doc_type': 'AFDO', 'party_code': 1}) - if derived['has_children_of_marriage']: + if has_children: uploaded.append({'doc_type': 'CSA', 'party_code': 2}) uploaded.append({'doc_type': 'AFDO', 'party_code': 2}) @@ -126,19 +127,18 @@ def forms_to_file(responses_dict, initial=False): # at least one party has signed with a commissioner and Filing Online generated.append({'doc_type': 'RFO', 'form_number': 35}) generated.append({'doc_type': 'RCP', 'form_number': 36}) - if derived['has_children_of_marriage']: + if has_children: uploaded.append({'doc_type': 'CSA', 'party_code': 0}) uploaded.append({'doc_type': 'AFDO', 'party_code': 0}) uploaded.append({'doc_type': 'OFI', 'party_code': 0}) uploaded.append({'doc_type': 'EFSS', 'party_code': 1}) uploaded.append({'doc_type': 'EFSS', 'party_code': 2}) uploaded.append({'doc_type': 'AII', 'party_code': 0}) - if derived['wants_other_orders'] and responses_dict.get('name_change_you') == 'YES': + if name_change_you: uploaded.append({'doc_type': 'NCV', 'party_code': 1}) - if derived['wants_other_orders'] and responses_dict.get('name_change_spouse') == 'YES': + if name_change_spouse: uploaded.append({'doc_type': 'NCV', 'party_code': 2}) - else: - return ([], []) + return [], [] - return (uploaded, generated) + return uploaded, generated diff --git a/edivorce/apps/core/views/main.py b/edivorce/apps/core/views/main.py index 3bb54a7f..af576244 100644 --- a/edivorce/apps/core/views/main.py +++ b/edivorce/apps/core/views/main.py @@ -188,8 +188,8 @@ def dashboard_nav(request, nav_step): responses_dict['derived'] = get_derived_data(responses_dict) if nav_step == 'initial_filing': - forms = forms_to_file(responses_dict, initial=True) - responses_dict['form_types'] = forms + uploaded, generated = forms_to_file(responses_dict, initial=True) + responses_dict['form_types'] = uploaded if request.GET.get('cancelled'): messages.add_message(request, messages.ERROR, 'You have cancelled the filing of your documents. '