Skip to content
This repository was archived by the owner on May 26, 2020. It is now read-only.

Commit 3e55ec6

Browse files
committed
Update testing strategy to what DRF is using
1 parent f8e4a1e commit 3e55ec6

21 files changed

+345
-150
lines changed

.travis.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ install:
1616
- pip install -r requirements.txt
1717

1818
script:
19-
- python setup.py test
19+
- ./runtests.py
2020

2121
matrix:
2222
exclude:

requirements-test.txt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
# Test requirements
2+
pytest-django==2.6
3+
pytest==2.5.2
4+
pytest-cov==1.6
5+
flake8==2.2.2

rest_framework_jwt/models.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
# Just to keep things like ./manage.py test happy
1+
# Just to keep things like ./manage.py test happy

rest_framework_jwt/runtests/runtests.py

Lines changed: 0 additions & 32 deletions
This file was deleted.

rest_framework_jwt/runtests/settings.py

Lines changed: 0 additions & 77 deletions
This file was deleted.

rest_framework_jwt/runtests/urls.py

Lines changed: 0 additions & 6 deletions
This file was deleted.

rest_framework_jwt/serializers.py

Lines changed: 21 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,10 @@
22
from datetime import datetime, timedelta
33
import jwt
44

5-
from django.contrib.auth import authenticate, get_user_model
5+
from django.contrib.auth import authenticate
66
from rest_framework import serializers
77

8+
from rest_framework_jwt import utils
89
from rest_framework_jwt.settings import api_settings
910

1011

@@ -32,7 +33,12 @@ def __init__(self, *args, **kwargs):
3233

3334
@property
3435
def username_field(self):
35-
return get_user_model().USERNAME_FIELD
36+
User = utils.get_user_model()
37+
38+
try:
39+
return User.USERNAME_FIELD
40+
except AttributeError:
41+
return 'username'
3642

3743
def validate(self, attrs):
3844
credentials = {self.username_field: attrs.get(self.username_field),
@@ -72,6 +78,7 @@ class RefreshJSONWebTokenSerializer(serializers.Serializer):
7278
token = serializers.CharField()
7379

7480
def validate(self, attrs):
81+
User = utils.get_user_model()
7582
token = attrs['token']
7683

7784
# Check payload valid (based off of JSONWebTokenAuthentication,
@@ -86,34 +93,38 @@ def validate(self, attrs):
8693
raise serializers.ValidationError(msg)
8794

8895
# Make sure user exists (may want to refactor this)
89-
User = get_user_model()
9096
try:
9197
user_id = jwt_get_user_id_from_payload(payload)
98+
9299
if user_id:
93100
user = User.objects.get(pk=user_id, is_active=True)
94101
else:
95102
msg = 'Invalid payload'
96103
raise serializers.ValidationError(msg)
97104
except User.DoesNotExist:
98-
raise serializers.ValidationError("User doesn't exist")
105+
msg = "User doesn't exist"
106+
raise serializers.ValidationError(msg)
99107

100108
# Get and check 'orig_iat'
101109
orig_iat = payload.get('orig_iat')
110+
102111
if orig_iat:
103112
# Verify expiration
104113
refresh_limit = api_settings.JWT_REFRESH_EXPIRATION_DELTA
114+
105115
if isinstance(refresh_limit, timedelta):
106116
refresh_limit = (refresh_limit.days * 24 * 3600 +
107117
refresh_limit.seconds)
108-
expiration_timestamp = (
109-
orig_iat +
110-
int(refresh_limit)
111-
)
118+
119+
expiration_timestamp = orig_iat + int(refresh_limit)
112120
now_timestamp = timegm(datetime.utcnow().utctimetuple())
121+
113122
if now_timestamp > expiration_timestamp:
114-
raise serializers.ValidationError("Refresh has expired")
123+
msg = 'Refresh has expired'
124+
raise serializers.ValidationError(msg)
115125
else:
116-
raise serializers.ValidationError("orig_iat field is required")
126+
msg = 'orig_iat field is required'
127+
raise serializers.ValidationError(msg)
117128

118129
new_payload = jwt_payload_handler(user)
119130
new_payload['orig_iat'] = orig_iat

rest_framework_jwt/settings.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,8 @@
2828

2929
'JWT_ALLOW_REFRESH': False,
3030
'JWT_REFRESH_EXPIRATION_DELTA': datetime.timedelta(days=7),
31+
32+
'JWT_AUTH_HEADER_PREFIX': 'JWT'
3133
}
3234

3335
# List of settings that may be in string import notation.

rest_framework_jwt/tests/__init__.py

Whitespace-only changes.

rest_framework_jwt/utils.py

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,29 @@
44
from rest_framework_jwt.settings import api_settings
55

66

7+
def get_user_model():
8+
try:
9+
from django.contrib.auth import get_user_model
10+
except ImportError: # django < 1.5
11+
from django.contrib.auth.models import User
12+
else:
13+
User = get_user_model()
14+
15+
return User
16+
17+
718
def jwt_payload_handler(user):
19+
try:
20+
username = user.get_username()
21+
except AttributeError:
22+
username = user.username
23+
24+
print(username)
25+
826
return {
927
'user_id': user.pk,
1028
'email': user.email,
11-
'username': user.get_username(),
29+
'username': username,
1230
'exp': datetime.utcnow() + api_settings.JWT_EXPIRATION_DELTA
1331
}
1432

0 commit comments

Comments
 (0)