Skip to content

Commit 1dacb63

Browse files
committed
Add some tests for Redirect endpoints
1 parent f9346d3 commit 1dacb63

File tree

5 files changed

+167
-0
lines changed

5 files changed

+167
-0
lines changed

readthedocs/api/v3/serializers.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -491,12 +491,16 @@ def get_project(self, obj):
491491
class RedirectSerializerBase(serializers.ModelSerializer):
492492

493493
project = serializers.SlugRelatedField(slug_field='slug', read_only=True)
494+
created = serializers.DateTimeField(source='create_dt', read_only=True)
495+
modified = serializers.DateTimeField(source='update_dt', read_only=True)
494496
_links = RedirectLinksSerializer(source='*', read_only=True)
495497

496498
class Meta:
497499
model = Redirect
498500
fields = [
499501
'pk',
502+
'created',
503+
'modified',
500504
'project',
501505
'redirect_type',
502506
'from_url',
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
{
2+
"_links": {
3+
"_self": "https://readthedocs.org/api/v3/projects/project/redirects/1/",
4+
"project": "https://readthedocs.org/api/v3/projects/project/"
5+
},
6+
"created": "2019-04-29T10:00:00Z",
7+
"modified": "2019-04-29T12:00:00Z",
8+
"from_url": "/docs/",
9+
"pk": 1,
10+
"project": "project",
11+
"redirect_type": "page",
12+
"to_url": "/documentation/"
13+
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
{
2+
"count": 1,
3+
"next": null,
4+
"previous": null,
5+
"results": [
6+
{
7+
"_links": {
8+
"_self": "https://readthedocs.org/api/v3/projects/project/redirects/1/",
9+
"project": "https://readthedocs.org/api/v3/projects/project/"
10+
},
11+
"created": "2019-04-29T10:00:00Z",
12+
"modified": "2019-04-29T12:00:00Z",
13+
"from_url": "/docs/",
14+
"pk": 1,
15+
"project": "project",
16+
"redirect_type": "page",
17+
"to_url": "/documentation/"
18+
}
19+
]
20+
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
{
2+
"_links": {
3+
"_self": "https://readthedocs.org/api/v3/projects/project/redirects/2/",
4+
"project": "https://readthedocs.org/api/v3/projects/project/"
5+
},
6+
"created": "2019-04-29T10:00:00Z",
7+
"modified": "2019-04-29T12:00:00Z",
8+
"from_url": "/page/",
9+
"pk": 2,
10+
"project": "project",
11+
"redirect_type": "page",
12+
"to_url": "/another/"
13+
}

readthedocs/api/v3/tests/test_projects.py

Lines changed: 117 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313

1414
from readthedocs.builds.models import Build, Version
1515
from readthedocs.projects.models import Project
16+
from readthedocs.redirects.models import Redirect
1617

1718

1819
class APIEndpointTests(TestCase):
@@ -49,6 +50,16 @@ def setUp(self):
4950
for tag in ('tag', 'project', 'test'):
5051
self.project.tags.add(tag)
5152

53+
self.redirect = fixture.get(
54+
Redirect,
55+
create_dt=created,
56+
update_dt=modified,
57+
from_url='/docs/',
58+
to_url='/documentation/',
59+
redirect_type='page',
60+
project=self.project,
61+
)
62+
5263
self.subproject = fixture.get(
5364
Project,
5465
pub_date=created,
@@ -372,3 +383,109 @@ def test_projects_versions_detail_unique(self):
372383

373384
)
374385
self.assertEqual(response.status_code, 200)
386+
387+
def test_unauthed_projects_redirects_list(self):
388+
response = self.client.get(
389+
reverse(
390+
'projects-redirects-list',
391+
kwargs={
392+
'parent_lookup_project__slug': self.project.slug,
393+
}),
394+
)
395+
self.assertEqual(response.status_code, 401)
396+
397+
def test_projects_redirects_list(self):
398+
self.client.credentials(HTTP_AUTHORIZATION=f'Token {self.token.key}')
399+
response = self.client.get(
400+
reverse(
401+
'projects-redirects-list',
402+
kwargs={
403+
'parent_lookup_project__slug': self.project.slug,
404+
}),
405+
)
406+
self.assertEqual(response.status_code, 200)
407+
408+
response_json = response.json()
409+
self.assertDictEqual(
410+
response_json,
411+
self._get_response_dict('projects-redirects-list'),
412+
)
413+
414+
def test_unauthed_projects_redirects_detail(self):
415+
response = self.client.get(
416+
reverse(
417+
'projects-redirects-detail',
418+
kwargs={
419+
'parent_lookup_project__slug': self.project.slug,
420+
'redirect_pk': self.redirect.pk,
421+
}),
422+
)
423+
self.assertEqual(response.status_code, 401)
424+
425+
def test_projects_redirects_detail(self):
426+
self.client.credentials(HTTP_AUTHORIZATION=f'Token {self.token.key}')
427+
response = self.client.get(
428+
reverse(
429+
'projects-redirects-detail',
430+
kwargs={
431+
'parent_lookup_project__slug': self.project.slug,
432+
'redirect_pk': self.redirect.pk,
433+
}),
434+
)
435+
self.assertEqual(response.status_code, 200)
436+
437+
response_json = response.json()
438+
self.assertDictEqual(
439+
response_json,
440+
self._get_response_dict('projects-redirects-detail'),
441+
)
442+
443+
def test_unauthed_projects_redirects_list_post(self):
444+
data = {}
445+
446+
response = self.client.post(
447+
reverse(
448+
'projects-redirects-list',
449+
kwargs={
450+
'parent_lookup_project__slug': self.others_project.slug,
451+
}),
452+
data,
453+
)
454+
self.assertEqual(response.status_code, 401)
455+
456+
self.client.credentials(HTTP_AUTHORIZATION=f'Token {self.token.key}')
457+
response = self.client.post(
458+
reverse(
459+
'projects-redirects-list',
460+
kwargs={
461+
'parent_lookup_project__slug': self.others_project.slug,
462+
}),
463+
data,
464+
)
465+
self.assertEqual(response.status_code, 403)
466+
467+
def test_projects_redirects_list_post(self):
468+
data = {
469+
'from_url': '/page/',
470+
'to_url': '/another/',
471+
'redirect_type': 'page',
472+
}
473+
474+
self.client.credentials(HTTP_AUTHORIZATION=f'Token {self.token.key}')
475+
response = self.client.post(
476+
reverse(
477+
'projects-redirects-list',
478+
kwargs={
479+
'parent_lookup_project__slug': self.project.slug,
480+
}),
481+
data,
482+
)
483+
self.assertEqual(response.status_code, 201)
484+
485+
response_json = response.json()
486+
response_json['created'] = '2019-04-29T10:00:00Z'
487+
response_json['modified'] = '2019-04-29T12:00:00Z'
488+
self.assertDictEqual(
489+
response_json,
490+
self._get_response_dict('projects-redirects-list_POST'),
491+
)

0 commit comments

Comments
 (0)