|
2 | 2 | from datetime import datetime, timedelta
|
3 | 3 |
|
4 | 4 | from django.contrib.auth import get_user_model
|
| 5 | +from django.db import DatabaseError |
5 | 6 | from django.test import override_settings
|
6 | 7 | from django.utils.six.moves import reload_module
|
7 | 8 | from freezegun import freeze_time
|
| 9 | +from rest_framework.exceptions import AuthenticationFailed |
8 | 10 | from rest_framework.serializers import DateTimeField
|
9 | 11 | from rest_framework.test import APIRequestFactory, APITestCase as TestCase
|
10 | 12 |
|
|
15 | 17 | from knox.settings import CONSTANTS, knox_settings
|
16 | 18 | from knox.signals import token_expired
|
17 | 19 |
|
| 20 | +try: |
| 21 | + # Python 3 |
| 22 | + from unittest import mock |
| 23 | +except ImportError: |
| 24 | + # Python 2 |
| 25 | + import mock |
| 26 | + |
18 | 27 | try:
|
19 | 28 | # For django >= 2.0
|
20 | 29 | from django.urls import reverse
|
@@ -396,3 +405,13 @@ def test_expiry_is_present(self):
|
396 | 405 | response.data['expiry'],
|
397 | 406 | DateTimeField().to_representation(AuthToken.objects.first().expiry)
|
398 | 407 | )
|
| 408 | + |
| 409 | + def test_authenticate_credentials_handle_database_error_on_renew_token(self): |
| 410 | + instance, token = AuthToken.objects.create(user=self.user) |
| 411 | + with override_settings(REST_KNOX=auto_refresh_knox): |
| 412 | + reload_module(auth) |
| 413 | + token_auth = TokenAuthentication() |
| 414 | + with mock.patch.object(token_auth, 'renew_token') as m: |
| 415 | + m.side_effect = DatabaseError() |
| 416 | + with self.assertRaises(AuthenticationFailed): |
| 417 | + token_auth.authenticate_credentials(token.encode('utf-8')) |
0 commit comments