|
5 | 5 | from django.test import override_settings
|
6 | 6 | from django.utils.six.moves import reload_module
|
7 | 7 | from freezegun import freeze_time
|
| 8 | +from rest_framework.serializers import DateTimeField |
8 | 9 | from rest_framework.test import APIRequestFactory, APITestCase as TestCase
|
9 | 10 |
|
10 | 11 | from knox import auth, views
|
@@ -45,6 +46,10 @@ def get_basic_auth_header(username, password):
|
45 | 46 | token_no_expiration_knox = knox_settings.defaults.copy()
|
46 | 47 | token_no_expiration_knox["TOKEN_TTL"] = None
|
47 | 48 |
|
| 49 | +EXPIRY_DATETIME_FORMAT = '%H:%M %d/%m/%y' |
| 50 | +expiry_datetime_format_knox = knox_settings.defaults.copy() |
| 51 | +expiry_datetime_format_knox["EXPIRY_DATETIME_FORMAT"] = EXPIRY_DATETIME_FORMAT |
| 52 | + |
48 | 53 |
|
49 | 54 | class AuthTestCase(TestCase):
|
50 | 55 |
|
@@ -101,6 +106,31 @@ def test_login_returns_serialized_token_and_username_field(self):
|
101 | 106 | self.assertIn('user', response.data)
|
102 | 107 | self.assertIn(username_field, response.data['user'])
|
103 | 108 |
|
| 109 | + def test_login_returns_configured_expiry_datetime_format(self): |
| 110 | + |
| 111 | + with override_settings(REST_KNOX=expiry_datetime_format_knox): |
| 112 | + reload_module(views) |
| 113 | + self.assertEqual(AuthToken.objects.count(), 0) |
| 114 | + url = reverse('knox_login') |
| 115 | + self.client.credentials( |
| 116 | + HTTP_AUTHORIZATION=get_basic_auth_header(self.username, self.password) |
| 117 | + ) |
| 118 | + response = self.client.post(url, {}, format='json') |
| 119 | + self.assertEqual( |
| 120 | + expiry_datetime_format_knox["EXPIRY_DATETIME_FORMAT"], |
| 121 | + EXPIRY_DATETIME_FORMAT |
| 122 | + ) |
| 123 | + reload_module(views) |
| 124 | + self.assertEqual(response.status_code, 200) |
| 125 | + self.assertIn('token', response.data) |
| 126 | + self.assertNotIn('user', response.data) |
| 127 | + self.assertEqual( |
| 128 | + response.data['expiry'], |
| 129 | + DateTimeField(format=EXPIRY_DATETIME_FORMAT).to_representation( |
| 130 | + AuthToken.objects.first().expiry |
| 131 | + ) |
| 132 | + ) |
| 133 | + |
104 | 134 | def test_logout_deletes_keys(self):
|
105 | 135 | self.assertEqual(AuthToken.objects.count(), 0)
|
106 | 136 | for _ in range(2):
|
@@ -364,5 +394,5 @@ def test_expiry_is_present(self):
|
364 | 394 | self.assertIn('expiry', response.data)
|
365 | 395 | self.assertEqual(
|
366 | 396 | response.data['expiry'],
|
367 |
| - AuthToken.objects.first().expiry |
| 397 | + DateTimeField().to_representation(AuthToken.objects.first().expiry) |
368 | 398 | )
|
0 commit comments