Example #1
0
    def test_fails_if_not_authenticated(self):
        f, user, request = self.make_request(False)

        decorators.permission_required('foo.bar')(f)(request, namespace='wat', project='wat')

        self.assertEqual(f.call_count, 0, "f should not be called")
        self.assertEqual(user.user_has_permission.call_count, 0, "user_has_permission should not be called")
Example #2
0
    def test_looks_up_project(self, mock_get_object_or_404):
        f, user, request = self.make_request()

        decorators.permission_required('foo.bar')(f)(
            request, namespace='namespace', project='project')
        mock_get_object_or_404.assert_called_once_with(
            Project, namespace__name='namespace', name='project')
Example #3
0
    def test_always_throws_exception_if_logged_in(self):
        f, user, request = self.make_request()

        with self.assertRaises(PermissionDenied):
            decorators.permission_required('fail', raise_exception=False)(f)(request, namespace='wat', project='wat')

        self.assertEqual(f.call_count, 0, "f should not be called")
        self.assertEqual(user.user_has_permission.call_count, 0, "user_has_permission should not be called")
Example #4
0
    def test_fails_if_fail_requested(self):
        f, user, request = self.make_request()

        with self.assertRaises(PermissionDenied):
            decorators.permission_required('fail')(f)(request, namespace='wat', project='wat')

        self.assertEqual(f.call_count, 0, "f should not be called")
        self.assertEqual(user.user_has_permission.call_count, 0, "user_has_permission should not be called")
Example #5
0
    def test_looks_up_namespace(self, mock_namespace, mock_get_object_or_404):
        f, user, request = self.make_request()

        mock_select_subclasses_qs = Mock()
        mock_namespace.objects.select_subclasses.return_value = mock_select_subclasses_qs

        decorators.permission_required('foo.bar')(f)(request, namespace='namespace')
        mock_get_object_or_404.assert_called_once_with(mock_select_subclasses_qs, name='namespace')
Example #6
0
    def test_checks_multiple_permissions_if_specified(self, mock_get_object_or_404):
        f, user, request = self.make_request()

        project = Mock()
        mock_get_object_or_404.return_value = project
        project.user_has_permission.return_value = True

        decorators.permission_required(('foo.bar', 'baz.fern'))(f)(request, namespace='namespace')

        project.user_has_permission.assert_has_calls([call(user, 'foo.bar'), call(user, 'baz.fern')])
Example #7
0
    def test_fails_if_any_permission_missing(self, mock_get_object_or_404):
        f, user, request = self.make_request()

        project = Mock()
        mock_get_object_or_404.return_value = project
        project.user_has_permission.side_effect = [True, False]

        with self.assertRaises(PermissionDenied):
            decorators.permission_required(('foo.bar', 'baz.fern'))(f)(request, namespace='namespace')

        project.user_has_permission.assert_has_calls([call(user, 'foo.bar'), call(user, 'baz.fern')])
Example #8
0
 def dispatch(self, request, *args, **kwargs):
     return decorators.permission_required(
         self.get_permissions(request, *args,
                              **kwargs))(super(RequiresPermissionMixin,
                                               self).dispatch)(request,
                                                               *args,
                                                               **kwargs)
Example #9
0
    def test_returns_redirect_on_fail_if_not_logged_in(self):
        f, user, request = self.make_request(False)

        resp = decorators.permission_required('fail')(f)(request, namespace='wat', project='wat')

        self.assertIsInstance(resp, HttpResponseRedirect, "should return a redirect")
        self.assertTrue(resp['Location'].startswith('/accounts/login/'), "redirect should be to /accounts/login/")
Example #10
0
    def test_returns_value_from_wrapped_function(self, mock_get_object_or_404):
        f, user, request = self.make_request()

        project = Mock()
        mock_get_object_or_404.return_value = project
        project.user_has_permission.return_value = True

        resp = decorators.permission_required('foo.bar', raise_exception=True)(f)(request, namespace='wat', project='wat')

        self.assertEquals(resp, f())
Example #11
0
    def test_succeeds_if_has_permission(self, mock_get_object_or_404):
        f, user, request = self.make_request()

        project = Mock()
        mock_get_object_or_404.return_value = project
        project.user_has_permission.return_value = True

        resp = decorators.permission_required('foo.bar', raise_exception=True)(f)(request, namespace='wat', project='wat')

        f.assert_called_with(request, namespace='wat', project='wat')
        project.user_has_permission.assert_called_once_with(user, 'foo.bar')
Example #12
0
    def test_fails_if_does_not_have_permission(self, mock_get_object_or_404):
        f, user, request = self.make_request()

        project = Mock()
        mock_get_object_or_404.return_value = project
        project.user_has_permission.return_value = False

        with self.assertRaises(PermissionDenied):
            resp = decorators.permission_required('foo.bar', raise_exception=True)(f)(request, namespace='wat', project='wat')

        self.assertEqual(f.call_count, 0, "f should not be called")
        project.user_has_permission.assert_called_once_with(user, 'foo.bar')
Example #13
0
 def dispatch(self, request, *args, **kwargs):
     return decorators.permission_required(
         self.get_permissions()
     )(
         super(RequiresPermissionMixin, self).dispatch
     )(request, *args, **kwargs)