Skip to content

Commit 382741c

Browse files
authored
Fix usage of BaseAPITestCase (#1854)
* BaseAPITestCase is a mixin class, so it needs to be combined with another real TestCase class in order to the tests to run * Make API v2 tests to pass * Make API v1 tests to pass * Add docstring
1 parent 193617e commit 382741c

File tree

3 files changed

+25
-7
lines changed

3 files changed

+25
-7
lines changed

downloads/tests/test_views.py

+13-7
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
from django.urls import reverse
66
from django.test import TestCase, override_settings
77

8+
from rest_framework.authtoken.models import Token
89
from rest_framework.test import APITestCase
910

1011
from .base import BaseDownloadTests, DownloadMixin
@@ -90,7 +91,7 @@ def test_without_latest_python3_release(self):
9091
self.assertEqual(len(response.context['python_files']), 3)
9192

9293

93-
class BaseDownloadApiViewsTest(BaseAPITestCase):
94+
class BaseDownloadApiViewsTest(BaseDownloadTests, BaseAPITestCase):
9495
# This API used by add-to-pydotorg.py in python/release-tools.
9596
app_label = 'downloads'
9697

@@ -101,12 +102,8 @@ def setUp(self):
101102
password='passworduser',
102103
is_staff=True,
103104
)
104-
self.staff_key = self.staff_user.api_key.key
105-
self.token_header = 'ApiKey'
106-
self.Authorization = '{} {}:{}'.format(
107-
self.token_header, self.staff_user.username, self.staff_key,
108-
)
109-
self.Authorization_invalid = '%s invalid:token' % self.token_header
105+
self.Authorization = f'Token {self.staff_user.api_v2_token}'
106+
self.Authorization_invalid = 'Token invalid-token'
110107

111108
def get_json(self, response):
112109
json_response = response.json()
@@ -438,6 +435,15 @@ def test_filter_release_file(self):
438435
class DownloadApiV1ViewsTest(BaseDownloadApiViewsTest, BaseDownloadTests):
439436
api_version = 'v1'
440437

438+
def setUp(self):
439+
super().setUp()
440+
self.staff_key = self.staff_user.api_key.key
441+
self.token_header = 'ApiKey'
442+
self.Authorization = '{} {}:{}'.format(
443+
self.token_header, self.staff_user.username, self.staff_key,
444+
)
445+
self.Authorization_invalid = '%s invalid:token' % self.token_header
446+
441447

442448
class DownloadApiV2ViewsTest(BaseDownloadApiViewsTest, BaseDownloadTests, APITestCase):
443449
api_version = 'v2'

pydotorg/drf.py

+4
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,10 @@ def qs(self):
6565

6666

6767
class BaseAPITestCase:
68+
"""
69+
This is mixin base class to be combined with a real Django's TestCase or
70+
DRF's APITestCase implementation in order to run the tests.
71+
"""
6872

6973
api_version = 'v2'
7074
app_label = None

users/models.py

+8
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88

99
from markupfield.fields import MarkupField
1010
from tastypie.models import create_api_key
11+
from rest_framework.authtoken.models import Token
1112

1213
from .managers import UserManager
1314

@@ -55,6 +56,13 @@ def sponsorships(self):
5556
from sponsors.models import Sponsorship
5657
return Sponsorship.objects.visible_to(self)
5758

59+
@property
60+
def api_v2_token(self):
61+
try:
62+
return Token.objects.get(user=self).key
63+
except Token.DoesNotExist:
64+
return ""
65+
5866

5967
models.signals.post_save.connect(create_api_key, sender=User)
6068

0 commit comments

Comments
 (0)