Exemplo n.º 1
0
 def _test_valid(self, candidate):
     user = UserFactory.create(profile=None)
     data = self._data(preferred_candidate=candidate)
     form = LandingPageForm(data=data)
     self.assertTrue(form.is_valid())
     form.save(user)
     self.assertEqual(user.profile.preferred_candidate, candidate)
Exemplo n.º 2
0
 def test_save_update_name_user_only(self):
     user = UserFactory.create(profile=None)
     data = self._data()
     form = LandingPageForm(data=data)
     self.assertTrue(form.is_valid())
     form.save(user)
     user = get_user_model().objects.get(id=user.id)
     self.assertEqual(user.get_full_name(), user.profile.fb_name)
Exemplo n.º 3
0
 def test_emoji_reason(self):
     poo = u"💩"
     user = UserFactory.create(profile=None)
     data = self._data(reason=poo)
     form = LandingPageForm(data=data)
     self.assertTrue(form.is_valid())
     form.save(user)
     self.assertEqual(user.profile.reason_decoded, poo)
Exemplo n.º 4
0
def confirm_signup(request):
    try:
        _attach_signup_info(request)
    except:
        pass
    logger.info("Facebook login successful, creating profile")
    # This happens after logging in, now we can get their friends
    data = request.session.get('landing_page_form', None)
    if not data:
        logger.error("No session data, redirect to signup page")
        return HttpResponseRedirect(reverse('signup'))
    logger.info("Data in confirm_signup is %s" % data)

    try:
        if request.user.profile.fb_id:
            try:
                del request.session['landing_page_form']
            except KeyError:
                pass
            logger.info(("%s's profile already exists. They clicked join "
                         "instead of login. Redirecting to their profile"),
                        request.user)
            # Skip sign up, they probably clicked "Join" on accident
            return HttpResponseRedirect(reverse('users:profile'))
    except:
        pass

    form = LandingPageForm(data=data)
    try:
        if form.is_valid():
            form.save(request.user)
            try:
                signupinfo = request.session.get('signupinfo')
                if signupinfo:
                    SignUpLog.objects.create(
                        user=request.user,
                        referer=signupinfo.referer,
                        ip=signupinfo.ip)
            except Exception as e:
                logger.exception("Failed to use signupinfo")
                pass
            logger.info("Created profile for user %s", request.user)
            _add_facebook_friends_for_user(request.user)
            return HttpResponseRedirect(reverse('users:new_profile'))
        else:
            logger.error("LandingPageForm invalid for user %s: %s",
                         request.user, form.errors)
    except Exception as e:
        logger.exception("Signup failed: %s", e)
        return HttpResponseServerError("Signup failed: %s" % e)
    finally:
        try:
            del request.session['landing_page_form']
        except KeyError:
            pass
    logger.error("Sign up failed for unknown reasons. No extra data to report")
    return HttpResponseServerError("Unknown server error")
Exemplo n.º 5
0
 def test_save_update_name_user_and_profile(self):
     profile_fb_name = "foobar"
     user = UserFactory.create(profile__fb_name=profile_fb_name)
     data = self._data()
     form = LandingPageForm(data=data)
     self.assertTrue(form.is_valid())
     form.save(user)
     user = get_user_model().objects.get(id=user.id)
     self.assertNotEqual(user.get_full_name(), user.profile.fb_name)
     self.assertEqual(user.profile.fb_name, profile_fb_name)
Exemplo n.º 6
0
 def test_save_update_name_user_and_profile_unlinked(self):
     fb_id = 1234
     user = UserFactory.create(profile=None, social_auth__uid=fb_id)
     profile = ProfileFactory.create(fb_id=fb_id)
     data = self._data()
     form = LandingPageForm(data=data)
     self.assertTrue(form.is_valid())
     form.save(user)
     user = get_user_model().objects.get(id=user.id)
     self.assertNotEqual(user.get_full_name(), user.profile.fb_name)
     self.assertEqual(user.profile, profile)
Exemplo n.º 7
0
    def test_allow_random(self):
        user = UserFactory.create(profile=None)
        data = self._data(allow_random=1)
        form = LandingPageForm(data=data)
        self.assertTrue(form.is_valid())
        form.save(user)
        self.assertEqual(user.profile.allow_random, True)

        user = UserFactory.create(profile=None)
        data = self._data(allow_random=True)
        form = LandingPageForm(data=data)
        self.assertTrue(form.is_valid())
        form.save(user)
        self.assertEqual(user.profile.allow_random, True)
Exemplo n.º 8
0
 def test_dont_delete_profile(self):
     """From a bug where the user's profile was deleted after updating."""
     user = UserFactory.create(profile__fb_id=1, social_auth__uid=1)
     profile = user.profile
     # Add a friend
     friend = UserFactory.create(profile__fb_id=2, social_auth__uid=2)
     profile.friends.add(friend.profile)
     data = self._data()
     form = LandingPageForm(data=data)
     self.assertTrue(form.is_valid())
     form.save(user)
     user = get_user_model().objects.get(id=user.id)
     self.assertEqual(user.profile.id, profile.id)
     self.assertEqual(profile.friends.get(), friend.profile)
Exemplo n.º 9
0
    def test_no_allow_random(self):
        user = UserFactory.create(profile=None)
        data = self._data(allow_random=0)
        form = LandingPageForm(data=data)
        self.assertTrue(form.is_valid())
        form.save(user)
        self.assertEqual(user.profile.allow_random, False)

        user = UserFactory.create(profile=None)
        data = self._data()
        if 'allow_random' in data:
            del data['allow_random']
        form = LandingPageForm(data=data)
        self.assertTrue(form.is_valid())
        form.save(user)
        self.assertEqual(user.profile.allow_random, False)
Exemplo n.º 10
0
 def test_save_no_profile(self):
     """Ensure saving the form creates a profile for a user."""
     user = UserFactory.create(profile=None)
     reason = 'because'
     data = self._data(
         preferred_candidate=CANDIDATE_JOHNSON,
         reason=reason)
     form = LandingPageForm(data=data)
     self.assertTrue(form.is_valid())
     form.save(user)
     user = get_user_model().objects.get(id=user.id)
     self.assertEqual(user.profile.state, data['state'])
     self.assertEqual(user.profile.preferred_candidate,
                      data['preferred_candidate'])
     self.assertEqual(user.profile.reason_decoded,
                      data['reason'])
     self.assertNotEqual(user.profile.fb_id, '')
     self.assertEqual(user.profile.fb_id, user.social_auth.get().uid)
Exemplo n.º 11
0
 def test_post(self):
     state = StateFactory()
     data = {'preferred_candidate': CANDIDATE_CLINTON,
             'state': state.name}
     request = self.request.post(reverse(landing_page), data=data)
     request.user = AnonymousUser()
     request.session = {}
     response = landing_page(request)
     self.assertTrue('landing_page_form' in request.session)
     form = LandingPageForm(data=data)
     self.assertTrue(form.is_valid())
     full_data = form.cleaned_data
     self.assertEqual(request.session['landing_page_form'], full_data)
     self.assertEqual(response.status_code, HTTP_REDIRECT)
     self.assertTrue(response.has_header('Location'))
     redirect_to = "{base}?next={next}".format(
         base=reverse('social:begin', args=['facebook']),
         next=reverse('confirm_signup'))
     self.assertEqual(response.get('Location'), redirect_to)
Exemplo n.º 12
0
    def test_save_profile(self):
        """A profile may exist for a FB user, without a db User.

        This *should* never happen in practice, but it might happen if the
        user sign up flow screws up. Or it may happen if I change the sign up
        flow to log in with facebook first, before declaring votes.
        """
        user = UserFactory.create(profile=None)
        self.assertFalse(getattr(user, 'profile', False))
        profile = ProfileFactory.create(fb_id=user.social_auth.get().uid)
        self.assertFalse(getattr(profile, 'user', False))
        data = self._data()
        form = LandingPageForm(data=data)
        self.assertTrue(form.is_valid())
        form.save(user)
        user = get_user_model().objects.get(id=user.id)
        profile = Profile.objects.get(id=profile.id)
        self.assertEqual(user.profile, profile)
        self.assertEqual(user.profile.fb_id, user.social_auth.get().uid)
Exemplo n.º 13
0
def signup(request):
    try:
        _attach_signup_info(request)
    except:
        pass
    logger.info("signup form")
    form = LandingPageForm()
    context = RequestContext(request, {'form': form})
    return render_to_response('sign_up.html',
                              context_instance=context)
Exemplo n.º 14
0
def landing_page(request, gary=False, ows=False, occupy=False):
    try:
        _attach_signup_info(request)
    except:
        pass
    if hasattr(request, 'user') and request.user.is_authenticated():
        logger.info("%s redirected from landing page to profile", request.user)
        return HttpResponseRedirect(reverse('users:profile'))

    if request.method == "POST":
        logger.info("posted to landing page")
        form = LandingPageForm(data=request.POST)
        if form.is_valid():
            # Save the data to session
            data = form.cleaned_data
            request.session['landing_page_form'] = data
            logger.info("Saved data to session: %s", data)
            # redirect to FB login, with '?next' set to send the user to
            # confirm_signup
            fb_login_url = "{base}?next={next}".format(
                base=reverse('social:begin', args=['facebook']),
                next=reverse(confirm_signup))
            logger.info("Redirecting landing page signup to facebook")
            return HttpResponseRedirect(fb_login_url)
    else:
        form = LandingPageForm()
    swing_states = list(State.objects.exclude(tipping_point_rank=-1).order_by(
        'tipping_point_rank').values_list('name', flat=True))[:6]
    swing_states[-1] = "or %s" % swing_states[-1]
    swing_states = ', '.join(swing_states)
    context = RequestContext(
        request,
        {'form': form,
         'swing_states': swing_states,
         'landing_page': True,
         'gary': gary or ('gary' in request.GET),
         'ows': ows or ('ows' in request.GET),
         'occupy': occupy or ('occupy' in request.GET)})
    return render_to_response('landing_page.html',
                              context_instance=context)
Exemplo n.º 15
0
 def test_major_party_swing(self):
     self.state.tipping_point_rank = 1
     self.state.save()
     form = LandingPageForm(
         data=self._data(preferred_candidate=CANDIDATE_CLINTON))
     self.assertTrue(form.is_valid())
Exemplo n.º 16
0
 def test_preferred_candidate_major_party(self):
     form = LandingPageForm(
         data=self._data(preferred_candidate=CANDIDATE_CLINTON))
     self.assertTrue(form.is_valid())