def test_get_email_from_first_form(self): # no fit quiz but the user entered the email before messing up view = InquiryApplyWizard() email = '*****@*****.**' # yapf: disable self.assertEqual( view._get_email({'email': email, 'password1': 'testpassword1'}, 'first'), email )
def test_send_wizard_step_segment_event(self): view = InquiryApplyWizard() step_data = { 'first': (InquiryFirstForm, FIRST_FORM_EXAMPLE_DATA), 'home': (InquiryHomeForm, HOME_FORM_EXAMPLE_DATA), } email = FIRST_FORM_EXAMPLE_DATA['email'] for step, (form_class, form_data) in step_data.items(): form = form_class(data=form_data) self.assertTrue(form.is_valid()) view._send_wizard_step_segment_event(step, form, email, 'submitted')
def test_get_email_from_fit_quiz(self): # user filled a fit quiz view = InquiryApplyWizard() view.initial_dict = {} # add the fit quiz email cookie to the session email = '*****@*****.**' request = self._get_request() request.session['fit_email'] = email request.session.save() view.request = request self.assertEqual(view._get_email({}, 'first'), email)
def test_vet_based_on_form(self): view = InquiryApplyWizard() view.request = self._get_request() mocked_form = mock.Mock() with mock.patch.object(mocked_form, 'cleaned_data', { 'state': 'MA', 'zip_code': '02138' }): (outcome_slug, url_name, vetted_message) = view._vet_based_on_form( 'first', mocked_form ) # yapf: disable self.assertIsNone(outcome_slug) self.assertEqual(url_name, '') self.assertEqual(vetted_message, '')
def test_get_email_from_first_form_not_fit_quiz(self): # user filled a fit quiz but changed the email in the first step view = InquiryApplyWizard() request = self._get_request() fit_quiz_email = '*****@*****.**' request.session['fit_email'] = fit_quiz_email request.session.save() view.request = request first_email = '*****@*****.**' # yapf: disable self.assertEqual( view._get_email({'email': first_email, 'password1': 'testpassword1'}, 'first'), first_email )
def test_fill_form_initial(self): session = { 'not_fit_test': 'not_fit_test', FIT_QUIZ_SESSION_DATA_PREFIX + 'test': 'fit_test', } initial = {} InquiryApplyWizard.fill_form_initial(session, initial) self.assertEqual(initial, {'test': 'fit_test'}) initial = {'something': 'something'} InquiryApplyWizard.fill_form_initial(session, initial) self.assertEqual(initial, { 'test': 'fit_test', 'something': 'something', })
def test_vet_based_on_form_not_first_step(self): """ tests that only the first step vets based on state """ view = InquiryApplyWizard() view.request = self._get_request() mocked_form = mock.Mock() for form in ['home', 'homeowner', 'signup']: with mock.patch.object(mocked_form, 'cleaned_data', { 'state': 'MT', 'zip_code': '01234' }): (outcome_slug, url_name, vetted_message) = view._vet_based_on_form(form, mocked_form) self.assertIsNone(outcome_slug) self.assertEqual(url_name, '') self.assertEqual(vetted_message, '')
def test_vet_based_on_form_expansion_state(self): view = InquiryApplyWizard() view.request = self._get_request() mocked_form = mock.Mock() for state in EXPANSION_STATES: with mock.patch.object(mocked_form, 'cleaned_data', { 'state': state, 'zip_code': '01234' }): (outcome_slug, url_name, vetted_message) = view._vet_based_on_form( 'first', mocked_form) self.assertEqual(outcome_slug, INQUIRY_OUTCOME_SLUG_MAP['2_expansion_states']) self.assertEqual(url_name, 'inquiry:outcome') self.assertEqual(vetted_message, 'rejected expansion states')
def test_get_wizard_step_event_data_first(self): exported_fields = [ 'street', 'unit', 'city', 'state', 'zip_code', 'use_case_debts', 'use_case_education', 'use_case_diversify', 'use_case_buy_home', 'use_case_renovate', 'use_case_other', 'use_case_business', 'use_case_emergency', 'use_case_retirement', 'email', ] data = InquiryApplyWizard._get_wizard_step_event_data( {'street': 'One First Street'}, exported_fields, 'first', 'submitted') self.assertEqual( data, { 'street': 'One First Street', 'tracking_status': 'first screen submitted' })
def test_vet_based_on_form_calls_get_state_zip_code_outcome_key( self, mocked_get_state_zip_code_outcome_key): view = InquiryApplyWizard() view.request = self._get_request() mocked_get_state_zip_code_outcome_key.return_value = (None, '') mocked_form = mock.Mock() with mock.patch.object(mocked_form, 'cleaned_data', { 'state': 'MA', 'zip_code': '02138' }): (outcome_slug, url_name, vetted_message) = view._vet_based_on_form( 'first', mocked_form ) # yapf: disable cleaned_data = mocked_form.cleaned_data mocked_get_state_zip_code_outcome_key.assert_called_once_with( cleaned_data['state'], cleaned_data['zip_code'])
def test_vet_based_on_form_undesirable_zip_code(self): view = InquiryApplyWizard() view.request = self._get_request() mocked_form = mock.Mock() for undesirable_zip_code in UNDESIRABLE_ZIP_CODES: with mock.patch.object(mocked_form, 'cleaned_data', { 'state': 'MA', 'zip_code': undesirable_zip_code }): (outcome_slug, url_name, vetted_message) = view._vet_based_on_form( 'first', mocked_form) self.assertEqual( outcome_slug, INQUIRY_OUTCOME_SLUG_MAP['3_undesirable_zip_code']) self.assertEqual(url_name, 'inquiry:outcome') self.assertEqual(vetted_message, 'rejected undesirable zip code')
def test_get_wizard_step_event_data_home(self): exported_fields = [ 'property_type', 'primary_residence', 'rent_type', 'ten_year_duration_prediction', 'home_value', 'household_debt' ] data = InquiryApplyWizard._get_wizard_step_event_data({'fake': 'fake'}, exported_fields, 'home', 'submitted') self.assertEqual(data, {'tracking_status': 'home screen submitted'})
def test_send_wizard_step_segment_event_first( self, mocked_segment_event, mocked_get_wizard_step_event_data): view = InquiryApplyWizard() form = InquiryFirstForm(data=FIRST_FORM_EXAMPLE_DATA) self.assertTrue(form.is_valid()) data = dict(FIRST_FORM_EXAMPLE_DATA, **{'tracking_status': 'first screen submitted'}) mocked_get_wizard_step_event_data.return_value = data view._send_wizard_step_segment_event( 'first', form, form.cleaned_data['email'], 'submitted' ) # yapf: disable exported_fields = [ 'street', 'unit', 'city', 'state', 'zip_code', 'use_case_debts', 'use_case_education', 'use_case_diversify', 'use_case_buy_home', 'use_case_renovate', 'use_case_other', 'use_case_business', 'use_case_emergency', 'use_case_retirement', 'email', ] cleaned_data = form.cleaned_data mocked_get_wizard_step_event_data.assert_called_once_with( cleaned_data, exported_fields, 'first', 'submitted') mocked_segment_event.assert_called_once_with( cleaned_data['email'], 'investment inquiry - first screen submitted', data)
def test_get_wizard_step_event_data_signup(self): """ should not include the passwords """ cleaned_data = { 'phone_number': '617-399-0604', 'password1': 'testpassword1', 'password2': 'testpassword1', 'sms_opt_in': 'on', 'agree_to_terms': 'on', } exported_fields = ['phone_number', 'sms_opt_in', 'agree_to_terms'] data = InquiryApplyWizard._get_wizard_step_event_data( cleaned_data, exported_fields, 'signup', 'submitted') cleaned_data.pop('password1') cleaned_data.pop('password2') cleaned_data.update({'tracking_status': 'signup screen submitted'}) self.assertDictEqual(data, cleaned_data)
from django.urls import path from django.views.generic import RedirectView from inquiry.views import InquiryApplyWizard, InquirySubmitted, InquiryOutcomeView app_name = 'inquiry' inquiry_wizard = InquiryApplyWizard.as_view(InquiryApplyWizard.form_list, url_name='inquiry:inquiry_step') urlpatterns = [ path('data/<step>/', inquiry_wizard, name='inquiry_step'), path('data/', inquiry_wizard, name='apply'), path('apply/', RedirectView.as_view(url='/inquiry/', permanent=True)), path('results/<slug:slug>/', InquiryOutcomeView.as_view(), name='outcome'), path('submitted/', InquirySubmitted.as_view(), name='submitted'), path('', RedirectView.as_view(url='/inquiry/data/', permanent=True)), ]
def test_fill_form_initial_empty(self): session = {} initial = {} InquiryApplyWizard.fill_form_initial(session, initial) self.assertEqual(initial, {})
def test_get_wizard_step_event_data_empty(self): data = InquiryApplyWizard._get_wizard_step_event_data({}, [], 'first', 'submitted') self.assertEqual(data, {'tracking_status': 'first screen submitted'})
def test_get_email_no_client_session_or_form(self): # no fit quiz and the user messed up on the first step view = InquiryApplyWizard() view.initial_dict = {} view.request = self._get_request() self.assertEqual(view._get_email({}, 'first'), '')