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)
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)
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)
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")
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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())
def test_preferred_candidate_major_party(self): form = LandingPageForm( data=self._data(preferred_candidate=CANDIDATE_CLINTON)) self.assertTrue(form.is_valid())