forked from python/pythondotorg
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtest_api.py
82 lines (67 loc) · 3.11 KB
/
test_api.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
from rest_framework.test import APITestCase
from pydotorg.drf import BaseAPITestCase
from pages.factories import PageFactory
from users.factories import UserFactory
class PageApiViewsTest(BaseAPITestCase, APITestCase):
app_label = 'pages'
@classmethod
def setUpTestData(cls):
cls.page = PageFactory(keywords='python, django')
cls.page2 = PageFactory(keywords='django')
cls.page_unpublished = PageFactory(keywords='python', is_published=False)
cls.staff_user = UserFactory(
username='staffuser',
password='passworduser',
is_staff=True,
)
cls.Authorization = 'Token {}'.format(cls.staff_user.auth_token.key)
def test_get_published_pages(self):
url = self.create_url('page')
response = self.client.get(url)
self.assertEqual(response.status_code, 200)
self.assertEqual(len(response.data), 2)
def test_get_all_pages(self):
# Login to get all pages.
url = self.create_url('page')
response = self.client.get(url, HTTP_AUTHORIZATION=self.Authorization)
self.assertEqual(response.status_code, 200)
self.assertEqual(len(response.data), 3)
def test_filter_page(self):
url = self.create_url('page', filters={'keywords__icontains': 'PYTHON'})
response = self.client.get(url)
self.assertEqual(response.status_code, 200)
self.assertEqual(len(response.data), 1)
# Login to filter all pages.
response = self.client.get(url, HTTP_AUTHORIZATION=self.Authorization)
self.assertEqual(response.status_code, 200)
self.assertEqual(len(response.data), 2)
# This should return an empty result because normal users
# cannot see unpublished pages.
url = self.create_url('page', filters={'is_published': False})
response = self.client.get(url)
self.assertEqual(response.status_code, 200)
self.assertEqual(len(response.data), 0)
# This should return only unpublished pages.
response = self.client.get(url, HTTP_AUTHORIZATION=self.Authorization)
self.assertEqual(response.status_code, 200)
self.assertEqual(len(response.data), 1)
def test_post_page(self):
url = self.create_url('page')
data = {
'title': 'Paradise Lost - The Longest Winter',
'path': '/the-longest-winter/',
'keywords': 'paradise lost, doom death metal',
'is_published': True,
}
response = self.json_client('POST', url, data)
self.assertEqual(response.status_code, 401)
# 'PageViewSet' is read-only.
response = self.json_client('POST', url, data, HTTP_AUTHORIZATION=self.Authorization)
self.assertEqual(response.status_code, 405)
def test_delete_page(self):
url = self.create_url('page', self.page.pk)
response = self.json_client('DELETE', url)
self.assertEqual(response.status_code, 401)
# 'PageViewSet' is read-only.
response = self.json_client('DELETE', url, HTTP_AUTHORIZATION=self.Authorization)
self.assertEqual(response.status_code, 405)