|
10 | 10 | from django.conf import settings
|
11 | 11 | from django.contrib.auth.models import Permission
|
12 | 12 | from django.http import HttpResponseRedirect
|
| 13 | +from django.utils.translation import gettext_lazy as _ |
13 | 14 |
|
14 | 15 | from tcms_tenants.models import Tenant
|
15 | 16 | from tcms_tenants.forms import VALIDATION_RE
|
@@ -48,6 +49,7 @@ def setUpClass(cls):
|
48 | 49 |
|
49 | 50 | def test_create_tenant_shows_defaults_for_trial_and_paid_until(self):
|
50 | 51 | response = self.client.get(reverse('tcms_tenants:create-tenant'))
|
| 52 | + self.assertContains(response, _('New tenant')) |
51 | 53 | # assert hidden fields are shown with defaults b/c the tests below
|
52 | 54 | # can't simulate opening the page and clicking the submit button
|
53 | 55 | self.assertContains(
|
@@ -167,3 +169,118 @@ def test_creating_tenant_sends_email(self, send_mail):
|
167 | 169 |
|
168 | 170 | self.assertTrue(send_mail.called)
|
169 | 171 | self.assertEqual(send_mail.call_count, 1)
|
| 172 | + |
| 173 | + |
| 174 | +class UpdateTenantViewTestCase(LoggedInTestCase): |
| 175 | + @classmethod |
| 176 | + def setUpClass(cls): |
| 177 | + super().setUpClass() |
| 178 | + |
| 179 | + cls.change_tenant = Permission.objects.get( |
| 180 | + content_type__app_label='tcms_tenants', |
| 181 | + codename='change_tenant') |
| 182 | + cls.tester.user_permissions.add(cls.change_tenant) |
| 183 | + |
| 184 | + @classmethod |
| 185 | + def setup_tenant(cls, tenant): |
| 186 | + super().setup_tenant(tenant) |
| 187 | + tenant.name = 'Fast Inc.' |
| 188 | + |
| 189 | + def tearDown(self): |
| 190 | + self.tenant.publicly_readable = False |
| 191 | + self.tenant.save() |
| 192 | + |
| 193 | + self.tester.is_superuser = False |
| 194 | + self.tester.save() |
| 195 | + |
| 196 | + def update_and_assert_tenant(self, client): |
| 197 | + response = client.post( |
| 198 | + reverse('tcms_tenants:edit-tenant'), |
| 199 | + { |
| 200 | + 'name': self.tenant.name, |
| 201 | + 'schema_name': self.tenant.schema_name, |
| 202 | + 'publicly_readable': True, |
| 203 | + 'paid_until': '', |
| 204 | + }, |
| 205 | + follow=True |
| 206 | + ) |
| 207 | + |
| 208 | + # Then |
| 209 | + self.assertRedirects(response, '/') |
| 210 | + |
| 211 | + self.tenant.refresh_from_db() |
| 212 | + self.assertTrue(self.tenant.publicly_readable) |
| 213 | + |
| 214 | + def test_super_user_can_edit_any_tenant(self): |
| 215 | + # Given |
| 216 | + self.tester.is_superuser = True |
| 217 | + self.tester.save() |
| 218 | + self.assertNotEqual(self.tester, self.tenant.owner) |
| 219 | + self.assertFalse(self.tenant.publicly_readable) |
| 220 | + |
| 221 | + # When |
| 222 | + response = self.client.get(reverse('tcms_tenants:edit-tenant')) |
| 223 | + |
| 224 | + # Then |
| 225 | + self.assertContains(response, _('Edit tenant')) |
| 226 | + self.update_and_assert_tenant(self.client) |
| 227 | + |
| 228 | + def test_owner_can_edit_own_tenant(self): |
| 229 | + # Given |
| 230 | + self.tenant.owner.set_password('password') |
| 231 | + self.tenant.owner.save() |
| 232 | + self.tenant.owner.user_permissions.add(self.change_tenant) |
| 233 | + self.assertFalse(self.tenant.publicly_readable) |
| 234 | + |
| 235 | + client = self.client.__class__(self.tenant) |
| 236 | + client.login(username=self.tenant.owner.username, # nosec:B106:hardcoded_password_funcarg |
| 237 | + password='password') |
| 238 | + self.assertFalse(self.tenant.publicly_readable) |
| 239 | + |
| 240 | + # When |
| 241 | + response = client.get(reverse('tcms_tenants:edit-tenant')) |
| 242 | + |
| 243 | + # Then |
| 244 | + self.assertContains(response, _('Edit tenant')) |
| 245 | + self.update_and_assert_tenant(client) |
| 246 | + |
| 247 | + def test_non_owner_cant_edit_tenant(self): |
| 248 | + # Given |
| 249 | + self.assertNotEqual(self.tester, self.tenant.owner) |
| 250 | + self.assertFalse(self.tester.is_superuser) |
| 251 | + self.assertFalse(self.tenant.publicly_readable) |
| 252 | + |
| 253 | + # When: get |
| 254 | + response = self.client.get( |
| 255 | + reverse('tcms_tenants:edit-tenant'), |
| 256 | + follow=True |
| 257 | + ) |
| 258 | + |
| 259 | + # Then |
| 260 | + self.assertContains( |
| 261 | + response, |
| 262 | + _('Only super-user and tenant owner are allowed to edit tenant properties') |
| 263 | + ) |
| 264 | + self.assertRedirects(response, '/') |
| 265 | + |
| 266 | + # When: post |
| 267 | + response = self.client.post( |
| 268 | + reverse('tcms_tenants:edit-tenant'), |
| 269 | + { |
| 270 | + 'name': self.tenant.name, |
| 271 | + 'schema_name': self.tenant.schema_name, |
| 272 | + 'publicly_readable': True, |
| 273 | + 'paid_until': '', |
| 274 | + }, |
| 275 | + follow=True |
| 276 | + ) |
| 277 | + |
| 278 | + # Then |
| 279 | + self.assertContains( |
| 280 | + response, |
| 281 | + _('Only super-user and tenant owner are allowed to edit tenant properties') |
| 282 | + ) |
| 283 | + self.assertRedirects(response, '/') |
| 284 | + |
| 285 | + self.tenant.refresh_from_db() |
| 286 | + self.assertFalse(self.tenant.publicly_readable) |
0 commit comments