|
2 | 2 | from django.core.urlresolvers import reverse
|
3 | 3 | from django.test import TestCase
|
4 | 4 | from django.utils.six.moves.urllib.parse import urlsplit
|
| 5 | +from django_dynamic_fixture import G, N |
5 | 6 |
|
6 | 7 | from readthedocs.builds.constants import LATEST
|
7 | 8 | from readthedocs.projects.models import Project
|
@@ -168,3 +169,38 @@ def test_project_redirects(self):
|
168 | 169 | def test_project_redirects_delete(self):
|
169 | 170 | response = self.client.get('/dashboard/pip/redirects/delete/')
|
170 | 171 | self.assertRedirectToLogin(response)
|
| 172 | + |
| 173 | + |
| 174 | +class SubprojectViewTests(TestCase): |
| 175 | + def setUp(self): |
| 176 | + self.user = N(User, username='test') |
| 177 | + self.user.set_password('test') |
| 178 | + self.user.save() |
| 179 | + |
| 180 | + self.project = G(Project, slug='my-mainproject') |
| 181 | + self.subproject = G(Project, slug='my-subproject') |
| 182 | + self.project.add_subproject(self.subproject) |
| 183 | + |
| 184 | + self.client.login(username='test', password='test') |
| 185 | + |
| 186 | + def test_deny_delete_for_non_project_admins(self): |
| 187 | + response = self.client.get('/dashboard/my-mainproject/subprojects/delete/my-subproject/') |
| 188 | + self.assertEqual(response.status_code, 404) |
| 189 | + |
| 190 | + self.assertTrue(self.subproject in [r.child for r in self.project.subprojects.all()]) |
| 191 | + |
| 192 | + def test_admins_can_delete_subprojects(self): |
| 193 | + self.project.users.add(self.user) |
| 194 | + self.subproject.users.add(self.user) |
| 195 | + |
| 196 | + response = self.client.get('/dashboard/my-mainproject/subprojects/delete/my-subproject/') |
| 197 | + self.assertEqual(response.status_code, 302) |
| 198 | + self.assertTrue(self.subproject not in [r.child for r in self.project.subprojects.all()]) |
| 199 | + |
| 200 | + def test_project_admins_can_delete_subprojects_that_they_are_not_admin_of(self): |
| 201 | + self.project.users.add(self.user) |
| 202 | + self.assertFalse(self.subproject.user_is_admin(self.user)) |
| 203 | + |
| 204 | + response = self.client.get('/dashboard/my-mainproject/subprojects/delete/my-subproject/') |
| 205 | + self.assertEqual(response.status_code, 302) |
| 206 | + self.assertTrue(self.subproject not in [r.child for r in self.project.subprojects.all()]) |
0 commit comments