예제 #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."""
        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.')
예제 #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)
        # account overview page
        response = http_get_response(reverse('accounts'),
                                     views.AccountsView.as_view())
        eq_(response.status_code, 302)
        # profile page
        request_factory = RequestFactory()
        request = request_factory.get(self.user.profile.get_absolute_url())
        request = mock_middleware(request)
        request.user = AnonymousUser()
        response = views.ProfileView.as_view()(request,
                                               username=self.user.username)
        eq_(response.status_code, 200)

    def test_unallowed_views(self):
        """Private URLs should redirect logged-out users to the log in page"""
        # my profile
        get, post = http_get_post(
            reverse('acct-my-profile'),
            login_required(views.ProfileView.as_view()),
            {},
        )
        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.ProfileSettings.as_view(), {})
        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.')

    @patch('stripe.Customer.retrieve')
    def test_auth_views(self, mock_stripe):
        """Test private views while logged in"""
        # pylint: disable=unused-argument
        response = http_get_response(reverse('acct-my-profile'),
                                     views.ProfileView.as_view(), self.user)
        eq_(response.status_code, 302,
            'Logged in user may view their own profile.')
        response = http_get_response(
            reverse('acct-settings'),
            views.ProfileSettings.as_view(),
            self.user,
        )
        eq_(response.status_code, 200,
            'Logged in user may view their own settings.')

    @patch('stripe.Customer.retrieve')
    def test_settings_view(self, mock_stripe):
        """Test the account settings view"""
        # pylint: disable=unused-argument
        profile = self.user.profile
        profile_data = {'action': 'profile', 'twitter': 'allanlasser'}
        email_data = {'action': 'email', 'email_pref': 'hourly'}
        settings_url = reverse('acct-settings')
        http_post_response(settings_url, views.ProfileSettings.as_view(),
                           profile_data, self.user)
        http_post_response(settings_url, views.ProfileSettings.as_view(),
                           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():
            eq_(val, getattr(profile, key))
예제 #3
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"""
        # give the user a composer so they have a public profile
        FOIAComposerFactory(user=self.user, status="submitted")
        # account overview page
        response = http_get_response(reverse("accounts"),
                                     views.AccountsView.as_view())
        eq_(response.status_code, 302)
        # profile page
        request_factory = RequestFactory()
        request = request_factory.get(self.user.profile.get_absolute_url())
        request = mock_middleware(request)
        request.user = AnonymousUser()
        response = views.ProfileView.as_view()(request,
                                               username=self.user.username)
        eq_(response.status_code, 200)

    @raises(Http404)
    def test_private_profile(self):
        """Test public views while not logged in"""
        # account overview page
        response = http_get_response(reverse("accounts"),
                                     views.AccountsView.as_view())
        eq_(response.status_code, 302)
        # profile page
        request_factory = RequestFactory()
        request = request_factory.get(self.user.profile.get_absolute_url())
        request = mock_middleware(request)
        request.user = AnonymousUser()
        response = views.ProfileView.as_view()(request,
                                               username=self.user.username)

    def test_unallowed_views(self):
        """Private URLs should redirect logged-out users to the log in page"""
        # my profile
        get, post = http_get_post(reverse("acct-my-profile"),
                                  login_required(views.ProfileView.as_view()),
                                  {})
        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.ProfileSettings.as_view(), {})
        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.")

    @patch("stripe.Customer.retrieve")
    def test_auth_views(self, mock_stripe):
        """Test private views while logged in"""
        # pylint: disable=unused-argument
        response = http_get_response(reverse("acct-my-profile"),
                                     views.ProfileView.as_view(), self.user)
        eq_(response.status_code, 302,
            "Logged in user may view their own profile.")
        response = http_get_response(reverse("acct-settings"),
                                     views.ProfileSettings.as_view(),
                                     self.user)
        eq_(response.status_code, 200,
            "Logged in user may view their own settings.")

    @patch("stripe.Customer.retrieve")
    def test_settings_view(self, mock_stripe):
        """Test the account settings view"""
        # pylint: disable=unused-argument
        profile = self.user.profile
        org_data = {"action": "org", "org_share": True}
        email_data = {"action": "email", "email_pref": "hourly"}
        settings_url = reverse("acct-settings")
        http_post_response(settings_url, views.ProfileSettings.as_view(),
                           org_data, self.user)
        http_post_response(settings_url, views.ProfileSettings.as_view(),
                           email_data, self.user)
        self.user.refresh_from_db()
        profile.refresh_from_db()
        all_data = {}
        all_data.update(org_data)
        all_data.update(email_data)
        all_data.pop("action")
        for key, val in all_data.items():
            eq_(val, getattr(profile, key))