Ejemplo n.º 1
0
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()
Ejemplo n.º 2
0
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"
Ejemplo n.º 3
0
    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()
Ejemplo n.º 4
0
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