Skip to content

Commit e167486

Browse files
committed
Add tests for UpdateTenantView. Refs #6
1 parent 9bc8c7b commit e167486

File tree

3 files changed

+123
-0
lines changed

3 files changed

+123
-0
lines changed

tcms_tenants/tests/__init__.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ def get_test_tenant_domain(cls):
3838

3939
@classmethod
4040
def setup_tenant(cls, tenant):
41+
tenant.publicly_readable = False
4142
tenant.owner = UserFactory()
4243
tenant.owner.set_password('password')
4344
tenant.owner.save()

tcms_tenants/tests/test_publicly_readable.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,11 @@ def setUpClass(cls):
2121
cls.tenant.publicly_readable = True
2222
cls.tenant.save()
2323

24+
@classmethod
25+
def tearDownClass(cls):
26+
cls.tenant.publicly_readable = False
27+
cls.tenant.save()
28+
2429
def test_unauthorized_user_can_view_on_publicly_readable_tenant(self):
2530
response = self.client.get(
2631
reverse('test_plan_url_short', args=[self.test_plan_by_owner.pk]),

tcms_tenants/tests/test_views.py

Lines changed: 117 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,118 @@ 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+
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

Comments
 (0)