Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Empty file.
Empty file.
63 changes: 63 additions & 0 deletions promo_code/user/tests/auth/test_authentication.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
import django.test
import django.urls
import rest_framework.status
import rest_framework.test

import user.models


class AuthenticationTests(rest_framework.test.APITestCase):
def setUp(self):
self.client = rest_framework.test.APIClient()
super().setUp()

def tearDown(self):
user.models.User.objects.all().delete()
super().tearDown()

def test_valid_registration(self):
data = {
'name': 'Steve',
'surname': 'Jobs',
'email': '[email protected]',
'password': 'SuperStrongPassword2000!',
'other': {'age': 23, 'country': 'gb'},
}
response = self.client.post(
django.urls.reverse('api-user:sign-up'),
data,
format='json',
)
self.assertEqual(
response.status_code,
rest_framework.status.HTTP_200_OK,
)
self.assertIn('access', response.data)
self.assertTrue(
user.models.User.objects.filter(
email='[email protected]',
).exists(),
)

def test_signin_success(self):
user.models.User.objects.create_user(
email='[email protected]',
name='Steve',
surname='Jobs',
password='SuperStrongPassword2000!',
other={'age': 23, 'country': 'gb'},
)

data = {
'email': '[email protected]',
'password': 'SuperStrongPassword2000!',
}
response = self.client.post(
django.urls.reverse('api-user:sign-in'),
data,
format='json',
)
self.assertEqual(
response.status_code,
rest_framework.status.HTTP_200_OK,
)
38 changes: 38 additions & 0 deletions promo_code/user/tests/auth/test_registration.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
import django.urls
import rest_framework.status
import rest_framework.test

import user.models


class RegistrationTests(rest_framework.test.APITestCase):
def setUp(self):
self.client = rest_framework.test.APIClient()
super().setUp()

def tearDown(self):
user.models.User.objects.all().delete()
super().tearDown()

def test_valid_registration(self):
valid_data = {
'name': 'Emma',
'surname': 'Thompson',
'email': '[email protected]',
'password': 'SuperStrongPassword2000!',
'other': {'age': 23, 'country': 'us'},
}
response = self.client.post(
django.urls.reverse('api-user:sign-up'),
valid_data,
format='json',
)
self.assertEqual(
response.status_code,
rest_framework.status.HTTP_200_OK,
)
self.assertTrue(
user.models.User.objects.filter(
email='[email protected]',
).exists(),
)
154 changes: 154 additions & 0 deletions promo_code/user/tests/auth/test_tokens.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,154 @@
import django.test
import django.urls
import rest_framework.status
import rest_framework.test
import rest_framework_simplejwt.token_blacklist.models as tb_models

import user.models


class JWTTests(rest_framework.test.APITestCase):
def setUp(self):
self.signup_url = django.urls.reverse('api-user:sign-up')
self.signin_url = django.urls.reverse('api-user:sign-in')
self.protected_url = django.urls.reverse('api-core:protected')
self.refresh_url = django.urls.reverse('api-user:token_refresh')
user.models.User.objects.create_user(
name='John',
surname='Doe',
email='[email protected]',
password='SuperStrongPassword2000!',
other={'age': 25, 'country': 'us'},
)
self.user_data = {
'email': '[email protected]',
'password': 'SuperStrongPassword2000!',
}

super(JWTTests, self).setUp()

def tearDown(self):
user.models.User.objects.all().delete()

super(JWTTests, self).tearDown()

def test_access_protected_view_with_valid_token(self):
response = self.client.post(
self.signin_url,
self.user_data,
format='json',
)

token = response.data['access']

self.client.credentials(HTTP_AUTHORIZATION='Bearer ' + token)
response = self.client.get(self.protected_url)
self.assertEqual(response.status_code, 200)
self.assertEqual(response.data['status'], 'request was permitted')

def test_registration_token_invalid_after_login(self):
data = {
'email': '[email protected]',
'password': 'StrongPass123!cd',
'name': 'John',
'surname': 'Doe',
'other': {'age': 22, 'country': 'us'},
}
response = self.client.post(
self.signup_url,
data,
format='json',
)
reg_access_token = response.data['access']

self.client.credentials(
HTTP_AUTHORIZATION=f'Bearer {reg_access_token}',
)
response = self.client.get(self.protected_url)
self.assertEqual(response.status_code, 200)

login_data = {'email': data['email'], 'password': data['password']}
response = self.client.post(
self.signin_url,
login_data,
format='json',
)
login_access_token = response.data['access']

self.client.credentials(
HTTP_AUTHORIZATION=f'Bearer {reg_access_token}',
)
response = self.client.get(self.protected_url)
self.assertEqual(response.status_code, 401)

self.client.credentials(
HTTP_AUTHORIZATION=f'Bearer {login_access_token}',
)
response = self.client.get(self.protected_url)
self.assertEqual(response.status_code, 200)

def test_refresh_token_invalidation_after_new_login(self):
first_login_response = self.client.post(
self.signin_url,
self.user_data,
format='json',
)

refresh_token_v1 = first_login_response.data['refresh']

second_login_response = self.client.post(
self.signin_url,
self.user_data,
format='json',
)
refresh_token_v2 = second_login_response.data['refresh']

refresh_response_v1 = self.client.post(
self.refresh_url,
{'refresh': refresh_token_v1},
format='json',
)
self.assertEqual(
refresh_response_v1.status_code,
rest_framework.status.HTTP_401_UNAUTHORIZED,
)
self.assertEqual(refresh_response_v1.data['code'], 'token_not_valid')
self.assertEqual(
str(refresh_response_v1.data['detail']),
'Token is blacklisted',
)

refresh_response_v2 = self.client.post(
self.refresh_url,
{'refresh': refresh_token_v2},
format='json',
)
self.assertEqual(
refresh_response_v2.status_code,
rest_framework.status.HTTP_200_OK,
)
self.assertIn('access', refresh_response_v2.data)

self.client.credentials(
HTTP_AUTHORIZATION='Bearer ' + first_login_response.data['access'],
)
protected_response = self.client.get(self.protected_url)
self.assertEqual(
protected_response.status_code,
rest_framework.status.HTTP_401_UNAUTHORIZED,
)

def test_blacklist_storage(self):

self.client.post(self.signin_url, self.user_data, format='json')

self.client.post(self.signin_url, self.user_data, format='json')

self.assertEqual(
(tb_models.BlacklistedToken.objects.count()),
1,
)
self.assertEqual(
(tb_models.OutstandingToken.objects.count()),
2,
)
Loading