Example #1
0
class TestRegistrationCompletionView(TestCase):
    """The RegistrationCompletionView allows a user to verify their email,
    change their password, and update their email after creating an
    account through the miniregistration process."""
    def setUp(self):
        self.user = UserFactory()

    def test_login_required(self):
        """Only registered users may see the registration completion page."""
        # pylint: disable=no-self-use
        response = http_get_response(
            reverse('accounts-complete-registration'),
            views.RegistrationCompletionView.as_view())
        eq_(response.status_code, 302,
            'Logged out users should be redirected.')
        ok_(
            reverse('acct-login') in response.url,
            'Logged out users should be redirected to the login view.')

    def test_get_and_verify(self):
        """Getting the view with a verification key should verify the user's email."""
        key = self.user.profile.generate_confirmation_key()
        response = http_get_response(
            reverse('accounts-complete-registration') + '?key=' + key,
            views.RegistrationCompletionView.as_view(),
            user=self.user)
        self.user.profile.refresh_from_db()
        eq_(response.status_code, 200, 'The view should respond 200 OK')
        ok_(self.user.profile.email_confirmed,
            'The user\'s email address should be confirmed.')

    def test_update_username_password(self):
        """The user should be able to update their username and password after logging in."""
        username = '******'
        password = '******'
        form = RegistrationCompletionForm(
            self.user, {
                'username': username,
                'new_password1': password,
                'new_password2': password
            })
        ok_(form.is_valid(), 'The forms should validate.')
        http_post_response(
            reverse('accounts-complete-registration'),
            views.RegistrationCompletionView.as_view(),
            data=form.data,
            user=self.user,
        )
        self.user.refresh_from_db()
        eq_(self.user.username, username, 'The username should be updated.')
        ok_(self.user.check_password(password),
            'The password should be updated.')
Example #2
0
class TestAccountFunctional(TestCase):
    """Functional tests for account"""
    def setUp(self):
        self.user = UserFactory()

    def test_public_views(self):
        """Test public views while not logged in"""
        response = http_get_response(reverse('acct-login'), login)
        eq_(response.status_code, 200,
            'Login page should be publicly visible.')
        # account overview page
        response = http_get_response(reverse('accounts'),
                                     views.AccountsView.as_view())
        eq_(response.status_code, 200,
            'Top level accounts page should be publicly visible.')
        # profile page
        request_factory = RequestFactory()
        request = request_factory.get(self.user.profile.get_absolute_url())
        request = mock_middleware(request)
        request.user = AnonymousUser()
        response = views.profile(request, self.user.username)
        eq_(response.status_code, 200,
            'User profiles should be publicly visible.')

    def test_unallowed_views(self):
        """Private URLs should redirect logged-out users to the log in page"""
        # pylint:disable=no-self-use
        # my profile
        get, post = http_get_post(reverse('acct-my-profile'), views.profile,
                                  {})
        eq_(get.status_code, 302,
            'My profile link reponds with 302 to logged out user.')
        eq_(post.status_code, 302,
            'POST to my profile link responds with 302.')
        # settings
        get, post = http_get_post(reverse('acct-settings'),
                                  views.profile_settings, {})
        eq_(get.status_code, 302,
            'GET /profile responds with 302 to logged out user.')
        eq_(post.status_code, 302,
            'POST /settings reponds with 302 to logged out user.')

    def test_auth_views(self):
        """Test private views while logged in"""
        response = http_get_response(reverse('acct-my-profile'), views.profile,
                                     self.user)
        eq_(response.status_code, 302,
            'Logged in user may view their own profile.')
        response = http_get_response(reverse('acct-settings'),
                                     views.profile_settings, self.user)
        eq_(response.status_code, 200,
            'Logged in user may view their own settings.')

    def test_settings_view(self):
        """Test the account settings view"""
        profile = self.user.profile
        profile_data = {
            'action': 'profile',
            'first_name': 'Allan',
            'last_name': 'Lasser',
            'twitter': 'allanlasser'
        }
        email_data = {
            'action': 'email',
            'email': '*****@*****.**',
            'email_pref': 'hourly'
        }
        settings_url = reverse('acct-settings')
        http_post_response(settings_url, views.profile_settings, profile_data,
                           self.user)
        http_post_response(settings_url, views.profile_settings, email_data,
                           self.user)
        self.user.refresh_from_db()
        profile.refresh_from_db()
        all_data = {}
        all_data.update(profile_data)
        all_data.update(email_data)
        all_data.pop('action')
        for key, val in all_data.iteritems():
            if key in ['first_name', 'last_name', 'email']:
                eq_(val, getattr(self.user, key))
            else:
                eq_(val, getattr(profile, key))