Skip to content

Commit db33973

Browse files
berkerpeksagagjohnson
authored andcommitted
Refactor test_footer to use DRF infrastructure (#2311)
Before patch: 27.83 seconds After patch: 25.73 seconds
1 parent 39b662f commit db33973

File tree

1 file changed

+35
-39
lines changed

1 file changed

+35
-39
lines changed
Lines changed: 35 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -1,37 +1,41 @@
1-
import json
21
import mock
32

4-
from django.test import TestCase
5-
from django.test.client import RequestFactory
3+
from rest_framework.test import APIRequestFactory, APITestCase
64

75
from readthedocs.core.middleware import FooterNoSessionMiddleware
8-
96
from readthedocs.rtd_tests.mocks.paths import fake_paths_by_regex
107
from readthedocs.projects.models import Project
8+
from readthedocs.restapi.views.footer_views import footer_html
9+
1110

11+
class Testmaker(APITestCase):
12+
fixtures = ['test_data']
13+
url = '/api/v2/footer_html/?project=pip&version=latest&page=index'
14+
factory = APIRequestFactory()
1215

13-
class Testmaker(TestCase):
14-
fixtures = ["eric", "test_data"]
16+
@classmethod
17+
def setUpTestData(cls):
18+
cls.pip = Project.objects.get(slug='pip')
19+
cls.latest = cls.pip.versions.create_latest()
1520

16-
def setUp(self):
17-
self.client.login(username='eric', password='test')
18-
self.pip = Project.objects.get(slug='pip')
19-
self.latest = self.pip.versions.create_latest()
21+
def render(self):
22+
request = self.factory.get(self.url)
23+
response = footer_html(request)
24+
response.render()
25+
return response
2026

2127
def test_footer(self):
22-
r = self.client.get('/api/v2/footer_html/?project=pip&version=latest&page=index', {})
23-
resp = json.loads(r.content)
24-
self.assertEqual(resp['version_active'], True)
25-
self.assertEqual(resp['version_compare']['is_highest'], True)
26-
self.assertEqual(resp['version_supported'], True)
28+
r = self.client.get(self.url)
29+
self.assertTrue(r.data['version_active'])
30+
self.assertTrue(r.data['version_compare']['is_highest'])
31+
self.assertTrue(r.data['version_supported'])
2732
self.assertEqual(r.context['main_project'], self.pip)
2833
self.assertEqual(r.status_code, 200)
2934

3035
self.latest.active = False
3136
self.latest.save()
32-
r = self.client.get('/api/v2/footer_html/?project=pip&version=latest&page=index', {})
33-
resp = json.loads(r.content)
34-
self.assertEqual(resp['version_active'], False)
37+
r = self.render()
38+
self.assertFalse(r.data['version_active'])
3539
self.assertEqual(r.status_code, 200)
3640

3741
def test_footer_uses_version_compare(self):
@@ -40,51 +44,43 @@ def test_footer_uses_version_compare(self):
4044
get_version_compare_data.return_value = {
4145
'MOCKED': True
4246
}
43-
44-
r = self.client.get('/api/v2/footer_html/?project=pip&version=latest&page=index', {})
47+
r = self.render()
4548
self.assertEqual(r.status_code, 200)
46-
47-
resp = json.loads(r.content)
48-
self.assertEqual(resp['version_compare'], {'MOCKED': True})
49+
self.assertEqual(r.data['version_compare'], {'MOCKED': True})
4950

5051
def test_pdf_build_mentioned_in_footer(self):
5152
with fake_paths_by_regex('\.pdf$'):
52-
response = self.client.get(
53-
'/api/v2/footer_html/?project=pip&version=latest&page=index', {})
54-
self.assertContains(response, 'pdf')
53+
response = self.render()
54+
self.assertIn('pdf', response.data['html'])
5555

5656
def test_pdf_not_mentioned_in_footer_when_build_is_disabled(self):
5757
self.pip.enable_pdf_build = False
5858
self.pip.save()
5959
with fake_paths_by_regex('\.pdf$'):
60-
response = self.client.get(
61-
'/api/v2/footer_html/?project=pip&version=latest&page=index', {})
62-
self.assertNotContains(response, 'pdf')
60+
response = self.render()
61+
self.assertNotIn('pdf', response.data['html'])
6362

6463
def test_epub_build_mentioned_in_footer(self):
6564
with fake_paths_by_regex('\.epub$'):
66-
response = self.client.get(
67-
'/api/v2/footer_html/?project=pip&version=latest&page=index', {})
68-
self.assertContains(response, 'epub')
65+
response = self.render()
66+
self.assertIn('epub', response.data['html'])
6967

7068
def test_epub_not_mentioned_in_footer_when_build_is_disabled(self):
7169
self.pip.enable_epub_build = False
7270
self.pip.save()
7371
with fake_paths_by_regex('\.epub$'):
74-
response = self.client.get(
75-
'/api/v2/footer_html/?project=pip&version=latest&page=index', {})
76-
self.assertNotContains(response, 'epub')
72+
response = self.render()
73+
self.assertNotIn('epub', response.data['html'])
7774

7875
def test_no_session_logged_out(self):
7976
mid = FooterNoSessionMiddleware()
80-
factory = RequestFactory()
8177

8278
# Null session here
83-
request = factory.get('/api/v2/footer_html/')
79+
request = self.factory.get('/api/v2/footer_html/')
8480
mid.process_request(request)
8581
self.assertEqual(request.session, {})
8682

8783
# Proper session here
88-
home_request = factory.get('/')
84+
home_request = self.factory.get('/')
8985
mid.process_request(home_request)
90-
self.assertTrue(home_request.session.TEST_COOKIE_NAME, 'testcookie')
86+
self.assertEqual(home_request.session.TEST_COOKIE_NAME, 'testcookie')

0 commit comments

Comments
 (0)