def test_blank_fields_work(db): user = UserFactory() oi = OnboardingInfo( user=user, signup_intent="LOC", address="123 Boop Ave.", state="NY", can_we_sms=False, ) oi.full_clean()
def test_save_sets_geographic_metadata(db, requests_mock, settings): requests_mock.get(settings.GEOCODING_SEARCH_URL, json=EXAMPLE_SEARCH) user = UserFactory() oi = OnboardingInfo( user=user, signup_intent="LOC", address="150 court st", address_verified=True, borough="BROOKLYN", state="NY", can_we_sms=True, ) oi.full_clean() oi.save() assert oi.geocoded_point is not None assert oi.zipcode == "11201"
def perform_mutate(cls, form: forms.OnboardingStep4Form, info: ResolveInfo): request = info.context phone_number = form.cleaned_data['phone_number'] password = form.cleaned_data['password'] or None prev_steps = cls.__extract_all_step_session_data(request) if prev_steps is None: cls.log( info, "User has not completed previous steps, aborting mutation.") return cls.make_error( "You haven't completed all the previous steps yet.") with transaction.atomic(): user = JustfixUser.objects.create_user( username=JustfixUser.objects.generate_random_username(), first_name=prev_steps['first_name'], last_name=prev_steps['last_name'], phone_number=phone_number, password=password, ) oi = OnboardingInfo(user=user, **pick_model_fields(OnboardingInfo, **prev_steps, **form.cleaned_data)) oi.full_clean() oi.save() user.send_sms_async( f"Welcome to {get_site_name()}, {user.first_name}! " f"We'll be sending you notifications from this phone number.", ) slack.sendmsg_async( f"{slack.hyperlink(text=user.first_name, href=user.admin_url)} " f"from {slack.escape(oi.borough_label)} has signed up!", is_safe=True) user.backend = settings.AUTHENTICATION_BACKENDS[0] login(request, user) for step in SESSION_STEPS: step.clear_from_request(request) return cls.mutation_success()
def complete_onboarding(request, info, password: Optional[str]) -> JustfixUser: with transaction.atomic(): user = JustfixUser.objects.create_user( username=JustfixUser.objects.generate_random_username(), first_name=info["first_name"], last_name=info["last_name"], preferred_first_name=info.get("preferred_first_name", ""), email=info["email"], phone_number=info["phone_number"], password=password, locale=translation.get_language_from_request(request, check_path=True), ) oi = OnboardingInfo(user=user, **pick_model_fields(OnboardingInfo, **info)) oi.full_clean() oi.save() partner = referral.get_partner(request) via = "" if partner: partner.users.add(user) via = f", via our partner {partner.name}" slack.sendmsg_async( f"{slack.hyperlink(text=user.best_first_name, href=user.admin_url)} " f"from {slack.escape(oi.city)}, {slack.escape(oi.state)} has signed up for " f"{slack.escape(SIGNUP_INTENT_CHOICES.get_label(oi.signup_intent))} in " f"{slack.escape(LOCALE_CHOICES.get_label(user.locale))}{via}!", is_safe=True, ) user.backend = settings.AUTHENTICATION_BACKENDS[0] login(request, user) return user