Skip to content

Commit bed3f63

Browse files
committed
Add some (mock based) tests for the auth decorator.
1 parent 4c10f55 commit bed3f63

2 files changed

Lines changed: 111 additions & 1 deletion

File tree

.travis.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ matrix:
1414
- python: "3.5"
1515
env: DJANGO_VERSION=2.1
1616
install:
17-
- pip install flake8
17+
- pip install flake8 mock
1818
- pip install -q Django==$DJANGO_VERSION
1919
- python setup.py install
2020
before_script:

codespeed/tests/test_auth.py

Lines changed: 110 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,110 @@
1+
# -*- coding: utf-8 -*-
2+
3+
import mock
4+
5+
from django.test import TestCase, override_settings
6+
from django.http import HttpResponse
7+
from django.contrib.auth.models import AnonymousUser
8+
9+
from codespeed.auth import basic_auth_required
10+
11+
12+
@override_settings(ALLOW_ANONYMOUS_POST=False)
13+
class AuthModuleTestCase(TestCase):
14+
@override_settings(ALLOW_ANONYMOUS_POST=True)
15+
def test_allow_anonymous_post_is_true(self):
16+
wrapped_function = mock.Mock()
17+
wrapped_function.__name__ = 'mock'
18+
wrapped_function.return_value = 'success'
19+
20+
request = mock.Mock()
21+
request.user = AnonymousUser()
22+
request.META = {}
23+
24+
res = basic_auth_required()(wrapped_function)(request=request)
25+
self.assertEqual(wrapped_function.call_count, 1)
26+
self.assertEqual(res, 'success')
27+
28+
def test_basic_auth_required_django_pre_2_0_succesful_auth(self):
29+
# request.user.is_authenticated is a method (pre Django 2.0)
30+
user = mock.Mock()
31+
user.is_authenticated = lambda: True
32+
33+
request = mock.Mock()
34+
request.user = user
35+
36+
wrapped_function = mock.Mock()
37+
wrapped_function.__name__ = 'mock'
38+
wrapped_function.return_value = 'success'
39+
40+
res = basic_auth_required()(wrapped_function)(request=request)
41+
self.assertEqual(wrapped_function.call_count, 1)
42+
self.assertEqual(res, 'success')
43+
44+
def test_basic_auth_required_django_pre_2_0_failed_auth(self):
45+
# request.user.is_authenticated is a method (pre Django 2.0)
46+
user = mock.Mock()
47+
user.is_authenticated = lambda: False
48+
49+
request = mock.Mock()
50+
request.user = user
51+
request.META = {}
52+
53+
wrapped_function = mock.Mock()
54+
wrapped_function.__name__ = 'mock'
55+
56+
res = basic_auth_required()(wrapped_function)(request=request)
57+
self.assertTrue(isinstance(res, HttpResponse))
58+
self.assertEqual(res.status_code, 401)
59+
self.assertEqual(wrapped_function.call_count, 0)
60+
61+
# Also test with actual AnonymousUser class which will have different
62+
# implementation under different Django versions
63+
request.user = AnonymousUser()
64+
65+
res = basic_auth_required()(wrapped_function)(request=request)
66+
self.assertTrue(isinstance(res, HttpResponse))
67+
self.assertEqual(res.status_code, 401)
68+
self.assertEqual(wrapped_function.call_count, 0)
69+
70+
def test_basic_auth_required_django_post_2_0_successful_auth(self):
71+
# request.user.is_authenticated is a property (post Django 2.0)
72+
user = mock.Mock()
73+
user.is_authenticated = True
74+
75+
request = mock.Mock()
76+
request.user = user
77+
78+
wrapped_function = mock.Mock()
79+
wrapped_function.__name__ = 'mock'
80+
wrapped_function.return_value = 'success'
81+
82+
res = basic_auth_required()(wrapped_function)(request=request)
83+
self.assertEqual(wrapped_function.call_count, 1)
84+
self.assertEqual(res, 'success')
85+
86+
def test_basic_auth_required_django_post_2_0_failed_auth(self):
87+
# request.user.is_authenticated is a property (post Django 2.0)
88+
user = mock.Mock()
89+
user.is_authenticated = False
90+
91+
request = mock.Mock()
92+
request.user = user
93+
request.META = {}
94+
95+
wrapped_function = mock.Mock()
96+
wrapped_function.__name__ = 'mock'
97+
98+
res = basic_auth_required()(wrapped_function)(request=request)
99+
self.assertTrue(isinstance(res, HttpResponse))
100+
self.assertEqual(res.status_code, 401)
101+
self.assertEqual(wrapped_function.call_count, 0)
102+
103+
# Also test with actual AnonymousUser class which will have different
104+
# implementation under different Django versions
105+
request.user = AnonymousUser()
106+
107+
res = basic_auth_required()(wrapped_function)(request=request)
108+
self.assertTrue(isinstance(res, HttpResponse))
109+
self.assertEqual(res.status_code, 401)
110+
self.assertEqual(wrapped_function.call_count, 0)

0 commit comments

Comments
 (0)