from django.test import TestCase from edivorce.apps.core.models import UserResponse, Question, BceidUser from edivorce.apps.core.utils.step_completeness import is_complete from edivorce.apps.core.utils.question_step_mapping import question_step_mapping # Create your tests here. from edivorce.apps.core.utils.user_response import get_data_for_user, get_step_responses class UserResponseTestCase(TestCase): fixtures = ['Question.json'] def setUp(self): self.user = BceidUser.objects.create(user_guid='1234') def check_completeness(self, step): responses_dict = get_data_for_user(self.user) responses_dict_by_step = get_step_responses(responses_dict) return is_complete(responses_dict_by_step[step])[0] def create_response(self, question, value): UserResponse.objects.create(bceid_user=self.user, question=Question.objects.get(key=question), value=value) def test_which_order(self): step = 'which_orders' # No response should be False self.assertEqual(self.check_completeness(step), False) # All required question self.create_response('want_which_orders', '["nothing"]') self.assertEqual(self.check_completeness(step), True) # Put empty response UserResponse.objects.filter(question_id='want_which_orders').update(value="[]") self.assertEqual(self.check_completeness(step), False) def test_your_info(self): step = 'your_information' # No response should be False self.assertEqual(self.check_completeness(step), False) # Testing required questions # Missing few required questions self.create_response('name_you', 'John Doe') self.create_response('last_name_before_married_you', 'Jackson') self.create_response('birthday_you', '11/11/1111') self.create_response('occupation_you', 'Plumber') self.assertEqual(self.check_completeness(step), False) # Few required questions with one checking question with hidden question not shown self.create_response('lived_in_bc_you', '11/11/1111') self.assertEqual(self.check_completeness(step), False) # All required questions with one checking question with hidden question not shown self.create_response('last_name_born_you', 'Jackson') self.assertEqual(self.check_completeness(step), False) UserResponse.objects.filter(question_id='lived_in_bc_you').update(value="Moved to B.C. on") self.assertEqual(self.check_completeness(step), False) # All required questions with one checking question with hidden question self.create_response('moved_to_bc_date_you', '12/12/1212') self.assertEqual(self.check_completeness(step), False) # All required questions with two checking question with one hidden and one shown self.create_response('any_other_name_you', 'NO') self.assertEqual(self.check_completeness(step), True) # All required questions with two checking question with one hidden question missing UserResponse.objects.filter(question_id='any_other_name_you').update(value="YES") self.assertEqual(self.check_completeness(step), False) # All required questions with all checking question with all hidden questions self.create_response('other_name_you', '[["also known as","Smith"]]') self.assertEqual(self.check_completeness(step), True) # Put empty response UserResponse.objects.filter(question_id='other_name_you').update(value='[["",""]]') self.assertEqual(self.check_completeness(step), False) def test_your_spouse(self): step = 'your_spouse' # No response should be False self.assertEqual(self.check_completeness(step), False) # Testing required questions # Missing few required questions self.create_response('name_spouse', 'John Doe') self.create_response('last_name_before_married_spouse', 'Jackson') self.create_response('birthday_spouse', '11/11/1111') self.create_response('occupation_spouse', 'Electrician') self.assertEqual(self.check_completeness(step), False) # Few required questions with one checking question with hidden question not shown self.create_response('any_other_name_spouse', 'NO') self.assertEqual(self.check_completeness(step), False) # All required questions with one checking question with hidden question not shown self.create_response('last_name_born_spouse', 'Jackson') self.assertEqual(self.check_completeness(step), False) # All required questions with one checking question with hidden question missing UserResponse.objects.filter(question_id='any_other_name_spouse').update(value="YES") self.assertEqual(self.check_completeness(step), False) # All required questions with one checking question with hidden question self.create_response('lived_in_bc_spouse', 'Since birth') self.assertEqual(self.check_completeness(step), False) # All required questions with two checking question with one hidden and one shown self.create_response('other_name_spouse', '[["also known as","Smith"]]') self.assertEqual(self.check_completeness(step), True) # All required questions with two checking question with one hidden question missing UserResponse.objects.filter(question_id='lived_in_bc_spouse').update(value="Moved to B.C. on") self.assertEqual(self.check_completeness(step), False) # All required questions with all checking question with all hidden questions self.create_response('moved_to_bc_date_spouse', '12/12/1212') self.assertEqual(self.check_completeness(step), True) # Put empty response UserResponse.objects.filter(question_id='name_spouse').update(value="") self.assertEqual(self.check_completeness(step), False) # Put empty response UserResponse.objects.filter(question_id='other_name_spouse').update(value='[["",""]]') self.assertEqual(self.check_completeness(step), False) def test_your_marriage(self): step = 'your_marriage' # No response should be False self.assertEqual(self.check_completeness(step), False) # Some required questions self.create_response('when_were_you_live_married_like', '12/12/2007') self.assertEqual(self.check_completeness(step), False) self.create_response('when_were_you_married', '12/12/2008') self.assertEqual(self.check_completeness(step), False) self.create_response('marital_status_before_you', 'Never married') self.assertEqual(self.check_completeness(step), False) self.create_response('marital_status_before_spouse', 'Widowed') self.assertEqual(self.check_completeness(step), False) self.create_response('where_were_you_married_city', 'Vancouver') self.assertEqual(self.check_completeness(step), False) self.create_response('where_were_you_married_prov', 'BC') self.assertEqual(self.check_completeness(step), False) # All required questions self.create_response('where_were_you_married_country', 'Canada') self.assertEqual(self.check_completeness(step), True) # All required questions but missing conditional question UserResponse.objects.filter(question_id='where_were_you_married_country').update(value="Other") self.assertEqual(self.check_completeness(step), False) # All required questions self.create_response('where_were_you_married_other_country', 'Peru') self.assertEqual(self.check_completeness(step), True) def test_your_separation(self): step = 'your_separation' # No response should be False self.assertEqual(self.check_completeness(step), False) # All required question self.create_response('no_reconciliation_possible', 'I agree') self.assertEqual(self.check_completeness(step), False) # Put empty response UserResponse.objects.filter(question_id='no_reconciliation_possible').update(value="") self.assertEqual(self.check_completeness(step), False) def test_spousal_support(self): step = 'spousal_support' # No response should be False self.assertEqual(self.check_completeness(step), False) # One required question self.create_response('spouse_support_details', 'I will support you') self.assertEqual(self.check_completeness(step), False) # Two required questions self.create_response('spouse_support_act', 'Family Law') self.assertEqual(self.check_completeness(step), True) # Remove first added required response to test the second required question UserResponse.objects.get(question_id='spouse_support_details').delete() self.assertEqual(self.check_completeness(step), False) # Put empty response UserResponse.objects.filter(question_id='spouse_support_details').update(value="") self.assertEqual(self.check_completeness(step), False) def test_property_and_debt(self): step = 'property_and_debt' # No response should be False self.assertEqual(self.check_completeness(step), False) # All required question with no hidden shown self.create_response('deal_with_property_debt', 'Equal division') self.assertEqual(self.check_completeness(step), True) # All required question with hidden shown but no response UserResponse.objects.filter(question_id='deal_with_property_debt').update(value="Unequal division") self.assertEqual(self.check_completeness(step), False) # Only one required question with hidden shown and answered self.create_response('how_to_divide_property_debt', 'Do not divide them') self.assertEqual(self.check_completeness(step), True) # All required question with optional fields self.create_response('other_property_claims', 'Want these property claims') self.assertEqual(self.check_completeness(step), True) # Put empty response UserResponse.objects.filter(question_id='want_other_property_claims').update(value="") self.assertEqual(self.check_completeness(step), True) def test_other_orders(self): step = 'other_orders' # No response should be False self.assertEqual(self.check_completeness(step), False) # All required question self.create_response('name_change_you', 'NO') self.assertEqual(self.check_completeness(step), False) self.create_response('name_change_spouse', 'NO') self.create_response('other_orders_detail', 'I want more orders') self.assertEqual(self.check_completeness(step), True) # make incomplete UserResponse.objects.filter(question_id='name_change_spouse').update(value="YES") self.assertEqual(self.check_completeness(step), False) self.create_response('name_change_spouse_fullname', 'new name') self.assertEqual(self.check_completeness(step), True) # Put empty response UserResponse.objects.filter(question_id='other_orders_detail').update(value="") self.assertEqual(self.check_completeness(step), True) def test_other_questions(self): step = 'other_questions' # No response should be False self.assertEqual(self.check_completeness(step), False) # Some required question self.create_response('address_to_send_official_document_street_you', '123 Cambie st') self.assertEqual(self.check_completeness(step), False) self.create_response('address_to_send_official_document_city_you', 'Vancouver') self.assertEqual(self.check_completeness(step), False) self.create_response('address_to_send_official_document_prov_you', 'BC') self.assertEqual(self.check_completeness(step), False) self.create_response('address_to_send_official_document_country_you', 'Canada') self.assertEqual(self.check_completeness(step), False) # All required questions for you self.create_response('address_to_send_official_document_postal_code_you', 'Canada') self.assertEqual(self.check_completeness(step), False) # One required question for spouse self.create_response('address_to_send_official_document_street_spouse', '123 Cambie st') self.assertEqual(self.check_completeness(step), False) # Two required question for spouse self.create_response('address_to_send_official_document_city_spouse', 'Vancouver') self.assertEqual(self.check_completeness(step), False) # Three required question for spouse self.create_response('address_to_send_official_document_prov_spouse', 'BC') self.assertEqual(self.check_completeness(step), False) # Four required question for spouse self.create_response('address_to_send_official_document_country_spouse', 'Canada') self.assertEqual(self.check_completeness(step), False) # All required questions self.create_response('divorce_take_effect_on', 'the 31st day after the date of this order') self.assertEqual(self.check_completeness(step), True) # Missing conditional required question UserResponse.objects.filter(question_id='divorce_take_effect_on').update(value="specific date") self.assertEqual(self.check_completeness(step), False) # All required questions self.create_response('divorce_take_effect_on_specific_date', '12/12/2018') self.assertEqual(self.check_completeness(step), True) # All required questions for spouse and you self.create_response('address_to_send_official_document_postal_code_spouse', 'Canada') self.assertEqual(self.check_completeness(step), True) # All required questions for spouse and you with empty email(optional so still true) self.create_response('address_to_send_official_document_email_you', 'a@example.com') self.assertEqual(self.check_completeness(step), True) # Testing other country missing UserResponse.objects.filter(question_id='address_to_send_official_document_country_spouse').update(value="Other") self.assertEqual(self.check_completeness(step), False) # All required questions self.create_response('address_to_send_official_document_other_country_spouse', 'Mexico') self.assertEqual(self.check_completeness(step), True) # Set Specific date on to empty UserResponse.objects.filter(question_id='divorce_take_effect_on_specific_date').update(value="") self.assertEqual(self.check_completeness(step), False) def test_filing_locations(self): step = 'filing_locations' # No response should be False self.assertEqual(self.check_completeness(step), False) # All required question self.create_response('court_registry_for_filing', 'Vancouver') self.assertEqual(self.check_completeness(step), True) # Put empty response UserResponse.objects.filter(question_id='court_registry_for_filing').update(value="") self.assertEqual(self.check_completeness(step), False)