Skip to content

Commit 003a1c7

Browse files
committed
Add tests for UpdateTenantView. Refs #6
1 parent 751d7e5 commit 003a1c7

File tree

1 file changed

+110
-0
lines changed

1 file changed

+110
-0
lines changed

tcms_tenants/tests/test_views.py

Lines changed: 110 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
from django.conf import settings
1111
from django.contrib.auth.models import Permission
1212
from django.http import HttpResponseRedirect
13+
from django.utils.translation import gettext_lazy as _
1314

1415
from tcms_tenants.models import Tenant
1516
from tcms_tenants.forms import VALIDATION_RE
@@ -48,6 +49,7 @@ def setUpClass(cls):
4849

4950
def test_create_tenant_shows_defaults_for_trial_and_paid_until(self):
5051
response = self.client.get(reverse('tcms_tenants:create-tenant'))
52+
self.assertContains(response, _('New tenant'))
5153
# assert hidden fields are shown with defaults b/c the tests below
5254
# can't simulate opening the page and clicking the submit button
5355
self.assertContains(
@@ -167,3 +169,111 @@ def test_creating_tenant_sends_email(self, send_mail):
167169

168170
self.assertTrue(send_mail.called)
169171
self.assertEqual(send_mail.call_count, 1)
172+
173+
174+
class UpdateTenantViewTestCase(LoggedInTestCase):
175+
@classmethod
176+
def setUpClass(cls):
177+
super().setUpClass()
178+
179+
change_tenant = Permission.objects.get(
180+
content_type__app_label='tcms_tenants',
181+
codename='change_tenant')
182+
cls.tester.user_permissions.add(change_tenant)
183+
184+
def tearDown(self):
185+
self.tenant.publicly_readable = False
186+
self.tenant.save()
187+
188+
self.tester.is_superuser = False
189+
self.tester.save()
190+
191+
def update_and_assert_tenant(self, client):
192+
response = client.post(
193+
reverse('tcms_tenants:edit-tenant', args=[self.tenant.pk]),
194+
{
195+
'name': self.tenant.name,
196+
'schema_name': self.tenant.schema_name,
197+
'publicly_readable': True,
198+
'paid_until': '',
199+
},
200+
follow=True
201+
)
202+
203+
# Then
204+
self.assertRedirects(response, '/')
205+
206+
self.tenant.refresh_from_db()
207+
self.assertTrue(self.tenant.publicly_readable)
208+
209+
def test_super_user_can_edit_any_tenant(self):
210+
# Given
211+
self.tester.is_superuser = True
212+
self.tester.save()
213+
self.assertNotEqual(self.tester, self.tenant.owner)
214+
self.assertFalse(self.tenant.publicly_readable)
215+
216+
# When
217+
response = self.client.get(reverse('tcms_tenants:edit-tenant', args=[self.tenant.pk]))
218+
219+
# Then
220+
self.assertContains(response, _('Edit tenant'))
221+
self.update_and_assert_tenant(self.client)
222+
223+
def test_owner_can_edit_own_tenant(self):
224+
# Given
225+
self.tenant.owner.set_password('password')
226+
self.tenant.owner.save()
227+
228+
client = self.client.__class__(self.tenant)
229+
client.login(username=self.tenant.owner.username, # nosec:B106:hardcoded_password_funcarg
230+
password='password')
231+
self.assertFalse(self.tenant.publicly_readable)
232+
233+
# When
234+
response = client.get(reverse('tcms_tenants:edit-tenant', args=[self.tenant.pk]))
235+
236+
# Then
237+
self.assertContains(response, _('Edit tenant'))
238+
self.update_and_assert_tenant(client)
239+
240+
def test_non_owner_cant_edit_tenant(self):
241+
# Given
242+
self.assertNotEqual(self.tester, self.tenant.owner)
243+
self.assertFalse(self.tester.is_superuser)
244+
self.assertFalse(self.tenant.publicly_readable)
245+
246+
# When: get
247+
response = self.client.get(
248+
reverse('tcms_tenants:edit-tenant', args=[self.tenant.pk]),
249+
follow=True
250+
)
251+
252+
# Then
253+
self.assertContains(
254+
response,
255+
_('Only super-user and tenant owner are allowed to edit tenant properties')
256+
)
257+
self.assertRedirects(response, '/')
258+
259+
# When: post
260+
response = self.client.post(
261+
reverse('tcms_tenants:edit-tenant', args=[self.tenant.pk]),
262+
{
263+
'name': self.tenant.name,
264+
'schema_name': self.tenant.schema_name,
265+
'publicly_readable': True,
266+
'paid_until': '',
267+
},
268+
follow=True
269+
)
270+
271+
# Then
272+
self.assertContains(
273+
response,
274+
_('Only super-user and tenant owner are allowed to edit tenant properties')
275+
)
276+
self.assertRedirects(response, '/')
277+
278+
self.tenant.refresh_from_db()
279+
self.assertFalse(self.tenant.publicly_readable)

0 commit comments

Comments
 (0)