diff --git a/hc/accounts/models.py b/hc/accounts/models.py index ff2b8877..f68e3937 100644 --- a/hc/accounts/models.py +++ b/hc/accounts/models.py @@ -440,6 +440,10 @@ class Member(models.Model): def can_accept(self): return self.user.profile.can_accept(self.project) + @property + def is_rw(self): + return self.role in (Member.Role.REGULAR,) + class Credential(models.Model): code = models.UUIDField(default=uuid.uuid4, unique=True) diff --git a/hc/accounts/tests/test_profile.py b/hc/accounts/tests/test_profile.py index fb612899..e5c6ee75 100644 --- a/hc/accounts/tests/test_profile.py +++ b/hc/accounts/tests/test_profile.py @@ -37,7 +37,7 @@ class ProfileTestCase(BaseTestCase): self.assertContains(r, "Member") def test_it_shows_readonly_project_membership(self): - self.bobs_membership.rw = False + self.bobs_membership.role = "r" self.bobs_membership.save() self.client.login(username="bob@example.org", password="password") diff --git a/hc/accounts/tests/test_project.py b/hc/accounts/tests/test_project.py index 89f739e8..46e5b3ff 100644 --- a/hc/accounts/tests/test_project.py +++ b/hc/accounts/tests/test_project.py @@ -230,7 +230,7 @@ class ProjectTestCase(BaseTestCase): self.assertContains(r, "bob@example.org") def test_it_checks_rw_access_when_updating_project_name(self): - self.bobs_membership.rw = False + self.bobs_membership.role = "r" self.bobs_membership.save() self.client.login(username="bob@example.org", password="password") @@ -240,7 +240,7 @@ class ProjectTestCase(BaseTestCase): self.assertEqual(r.status_code, 403) def test_it_hides_actions_for_readonly_users(self): - self.bobs_membership.rw = False + self.bobs_membership.role = "r" self.bobs_membership.save() self.client.login(username="bob@example.org", password="password") diff --git a/hc/accounts/views.py b/hc/accounts/views.py index 92625088..7cccb0ff 100644 --- a/hc/accounts/views.py +++ b/hc/accounts/views.py @@ -287,7 +287,7 @@ def project(request, code): rw = True else: membership = get_object_or_404(Member, project=project, user=request.user) - rw = membership.rw + rw = membership.is_rw ctx = { "page": "project", diff --git a/hc/front/tests/test_add_apprise.py b/hc/front/tests/test_add_apprise.py index 5eabb164..49bc9db5 100644 --- a/hc/front/tests/test_add_apprise.py +++ b/hc/front/tests/test_add_apprise.py @@ -33,7 +33,7 @@ class AddAppriseTestCase(BaseTestCase): self.assertEqual(r.status_code, 404) def test_it_requires_rw_access(self): - self.bobs_membership.rw = False + self.bobs_membership.role = "r" self.bobs_membership.save() self.client.login(username="bob@example.org", password="password") diff --git a/hc/front/tests/test_add_call.py b/hc/front/tests/test_add_call.py index 4c428ba5..a1685667 100644 --- a/hc/front/tests/test_add_call.py +++ b/hc/front/tests/test_add_call.py @@ -59,7 +59,7 @@ class AddCallTestCase(BaseTestCase): self.assertEqual(r.status_code, 404) def test_it_requires_rw_access(self): - self.bobs_membership.rw = False + self.bobs_membership.role = "r" self.bobs_membership.save() self.client.login(username="bob@example.org", password="password") diff --git a/hc/front/tests/test_add_check.py b/hc/front/tests/test_add_check.py index 7bf1ff43..0228902d 100644 --- a/hc/front/tests/test_add_check.py +++ b/hc/front/tests/test_add_check.py @@ -33,7 +33,7 @@ class AddCheckTestCase(BaseTestCase): self.assertEqual(r.status_code, 405) def test_it_requires_rw_access(self): - self.bobs_membership.rw = False + self.bobs_membership.role = "r" self.bobs_membership.save() self.client.login(username="bob@example.org", password="password") diff --git a/hc/front/tests/test_add_discord.py b/hc/front/tests/test_add_discord.py index e128f3d3..fd34bdb4 100644 --- a/hc/front/tests/test_add_discord.py +++ b/hc/front/tests/test_add_discord.py @@ -24,7 +24,7 @@ class AddDiscordTestCase(BaseTestCase): self.assertEqual(r.status_code, 404) def test_it_requires_rw_access(self): - self.bobs_membership.rw = False + self.bobs_membership.role = "r" self.bobs_membership.save() self.client.login(username="bob@example.org", password="password") diff --git a/hc/front/tests/test_add_discord_complete.py b/hc/front/tests/test_add_discord_complete.py index b4a0bbab..ffdabde8 100644 --- a/hc/front/tests/test_add_discord_complete.py +++ b/hc/front/tests/test_add_discord_complete.py @@ -76,9 +76,13 @@ class AddDiscordCompleteTestCase(BaseTestCase): self.assertEqual(r.status_code, 404) def test_it_requires_rw_access(self): - self.bobs_membership.rw = False + session = self.client.session + session["add_discord"] = ("foo", str(self.project.code)) + session.save() + + self.bobs_membership.role = "r" self.bobs_membership.save() self.client.login(username="bob@example.org", password="password") - r = self.client.get(self.url + "?code=12345678&state=bar") + r = self.client.get(self.url + "?code=12345678&state=foo") self.assertEqual(r.status_code, 403) diff --git a/hc/front/tests/test_add_email.py b/hc/front/tests/test_add_email.py index 5d5fc66f..016994fe 100644 --- a/hc/front/tests/test_add_email.py +++ b/hc/front/tests/test_add_email.py @@ -114,7 +114,7 @@ class AddEmailTestCase(BaseTestCase): self.assertContains(r, "Please select at least one.") def test_it_requires_rw_access(self): - self.bobs_membership.rw = False + self.bobs_membership.role = "r" self.bobs_membership.save() self.client.login(username="bob@example.org", password="password") diff --git a/hc/front/tests/test_add_linenotify.py b/hc/front/tests/test_add_linenotify.py index b528b4b9..283865ac 100644 --- a/hc/front/tests/test_add_linenotify.py +++ b/hc/front/tests/test_add_linenotify.py @@ -24,7 +24,7 @@ class AddLineNotifyTestCase(BaseTestCase): self.assertEqual(r.status_code, 404) def test_it_requires_rw_access(self): - self.bobs_membership.rw = False + self.bobs_membership.role = "r" self.bobs_membership.save() self.client.login(username="bob@example.org", password="password") diff --git a/hc/front/tests/test_add_linenotify_complete.py b/hc/front/tests/test_add_linenotify_complete.py index cfa94a97..4fce57a5 100644 --- a/hc/front/tests/test_add_linenotify_complete.py +++ b/hc/front/tests/test_add_linenotify_complete.py @@ -72,10 +72,14 @@ class AddLineNotifyCompleteTestCase(BaseTestCase): self.assertEqual(r.status_code, 404) def test_it_requires_rw_access(self): - self.bobs_membership.rw = False + session = self.client.session + session["add_linenotify"] = ("foo", str(self.project.code)) + session.save() + + self.bobs_membership.role = "r" self.bobs_membership.save() - url = self.url + "?code=12345678&state=bar" + url = self.url + "?code=12345678&state=foo" self.client.login(username="bob@example.org", password="password") r = self.client.get(url) self.assertEqual(r.status_code, 403) diff --git a/hc/front/tests/test_add_matrix.py b/hc/front/tests/test_add_matrix.py index 01c3aa01..69bafcaa 100644 --- a/hc/front/tests/test_add_matrix.py +++ b/hc/front/tests/test_add_matrix.py @@ -50,7 +50,7 @@ class AddMatrixTestCase(BaseTestCase): self.assertFalse(Channel.objects.exists()) def test_it_requires_rw_access(self): - self.bobs_membership.rw = False + self.bobs_membership.role = "r" self.bobs_membership.save() self.client.login(username="bob@example.org", password="password") diff --git a/hc/front/tests/test_add_mattermost.py b/hc/front/tests/test_add_mattermost.py index 842e3c7f..9e8c82fd 100644 --- a/hc/front/tests/test_add_mattermost.py +++ b/hc/front/tests/test_add_mattermost.py @@ -26,7 +26,7 @@ class AddMattermostTestCase(BaseTestCase): self.assertEqual(c.project, self.project) def test_it_requires_rw_access(self): - self.bobs_membership.rw = False + self.bobs_membership.role = "r" self.bobs_membership.save() self.client.login(username="bob@example.org", password="password") diff --git a/hc/front/tests/test_add_msteams.py b/hc/front/tests/test_add_msteams.py index 5bbbbf77..9c30a1b3 100644 --- a/hc/front/tests/test_add_msteams.py +++ b/hc/front/tests/test_add_msteams.py @@ -26,7 +26,7 @@ class AddMsTeamsTestCase(BaseTestCase): self.assertEqual(c.project, self.project) def test_it_requires_rw_access(self): - self.bobs_membership.rw = False + self.bobs_membership.role = "r" self.bobs_membership.save() self.client.login(username="bob@example.org", password="password") diff --git a/hc/front/tests/test_add_opsgenie.py b/hc/front/tests/test_add_opsgenie.py index aeba5f2d..7a495b67 100644 --- a/hc/front/tests/test_add_opsgenie.py +++ b/hc/front/tests/test_add_opsgenie.py @@ -51,7 +51,7 @@ class AddOpsgenieTestCase(BaseTestCase): self.assertEqual(payload["region"], "eu") def test_it_requires_rw_access(self): - self.bobs_membership.rw = False + self.bobs_membership.role = "r" self.bobs_membership.save() self.client.login(username="bob@example.org", password="password") diff --git a/hc/front/tests/test_add_pagerduty_complete.py b/hc/front/tests/test_add_pagerduty_complete.py index d66ace16..7ef4f03e 100644 --- a/hc/front/tests/test_add_pagerduty_complete.py +++ b/hc/front/tests/test_add_pagerduty_complete.py @@ -55,7 +55,7 @@ class AddPagerDutyCompleteTestCase(BaseTestCase): self.assertEqual(r.status_code, 404) def test_it_requires_rw_access(self): - self.bobs_membership.rw = False + self.bobs_membership.role = "r" self.bobs_membership.save() self.client.login(username="bob@example.org", password="password") diff --git a/hc/front/tests/test_add_pagertree.py b/hc/front/tests/test_add_pagertree.py index 769b8d91..3c8d1366 100644 --- a/hc/front/tests/test_add_pagertree.py +++ b/hc/front/tests/test_add_pagertree.py @@ -33,7 +33,7 @@ class AddPagerTreeTestCase(BaseTestCase): self.assertContains(r, "Enter a valid URL") def test_it_requires_rw_access(self): - self.bobs_membership.rw = False + self.bobs_membership.role = "r" self.bobs_membership.save() self.client.login(username="bob@example.org", password="password") diff --git a/hc/front/tests/test_add_pd.py b/hc/front/tests/test_add_pd.py index c3f8ccea..f5c1308f 100644 --- a/hc/front/tests/test_add_pd.py +++ b/hc/front/tests/test_add_pd.py @@ -36,7 +36,7 @@ class AddPdTestCase(BaseTestCase): self.assertEqual(c.value, "123456") def test_it_requires_rw_access(self): - self.bobs_membership.rw = False + self.bobs_membership.role = "r" self.bobs_membership.save() self.client.login(username="bob@example.org", password="password") diff --git a/hc/front/tests/test_add_pushbullet.py b/hc/front/tests/test_add_pushbullet.py index f6376861..d1c3dc15 100644 --- a/hc/front/tests/test_add_pushbullet.py +++ b/hc/front/tests/test_add_pushbullet.py @@ -24,7 +24,7 @@ class AddPushbulletTestCase(BaseTestCase): self.assertEqual(r.status_code, 404) def test_it_requires_rw_access(self): - self.bobs_membership.rw = False + self.bobs_membership.role = "r" self.bobs_membership.save() self.client.login(username="bob@example.org", password="password") diff --git a/hc/front/tests/test_add_pushbullet_complete.py b/hc/front/tests/test_add_pushbullet_complete.py index ac24df53..4ff7f3b5 100644 --- a/hc/front/tests/test_add_pushbullet_complete.py +++ b/hc/front/tests/test_add_pushbullet_complete.py @@ -71,7 +71,11 @@ class AddPushbulletTestCase(BaseTestCase): self.assertEqual(r.status_code, 404) def test_it_requires_rw_access(self): - self.bobs_membership.rw = False + session = self.client.session + session["add_pushbullet"] = ("foo", str(self.project.code)) + session.save() + + self.bobs_membership.role = "r" self.bobs_membership.save() url = self.url + "?code=12345678&state=foo" diff --git a/hc/front/tests/test_add_pushover.py b/hc/front/tests/test_add_pushover.py index 266faa08..a43f4ced 100644 --- a/hc/front/tests/test_add_pushover.py +++ b/hc/front/tests/test_add_pushover.py @@ -81,7 +81,7 @@ class AddPushoverTestCase(BaseTestCase): self.assertEqual(r.status_code, 403) def test_it_requires_rw_access(self): - self.bobs_membership.rw = False + self.bobs_membership.role = "r" self.bobs_membership.save() self.client.login(username="bob@example.org", password="password") diff --git a/hc/front/tests/test_add_shell.py b/hc/front/tests/test_add_shell.py index 67a604ef..4ee9c543 100644 --- a/hc/front/tests/test_add_shell.py +++ b/hc/front/tests/test_add_shell.py @@ -55,7 +55,7 @@ class AddShellTestCase(BaseTestCase): self.assertEqual(c.cmd_up, "logger up") def test_it_requires_rw_access(self): - self.bobs_membership.rw = False + self.bobs_membership.role = "r" self.bobs_membership.save() self.client.login(username="bob@example.org", password="password") diff --git a/hc/front/tests/test_add_signal.py b/hc/front/tests/test_add_signal.py index c74f76f4..2cc8dbae 100644 --- a/hc/front/tests/test_add_signal.py +++ b/hc/front/tests/test_add_signal.py @@ -52,7 +52,7 @@ class AddSignalTestCase(BaseTestCase): self.assertEqual(r.status_code, 404) def test_it_requires_rw_access(self): - self.bobs_membership.rw = False + self.bobs_membership.role = "r" self.bobs_membership.save() self.client.login(username="bob@example.org", password="password") diff --git a/hc/front/tests/test_add_slack.py b/hc/front/tests/test_add_slack.py index ccf588e7..73fa1269 100644 --- a/hc/front/tests/test_add_slack.py +++ b/hc/front/tests/test_add_slack.py @@ -33,7 +33,7 @@ class AddSlackTestCase(BaseTestCase): self.assertContains(r, "Enter a valid URL") def test_it_requires_rw_access(self): - self.bobs_membership.rw = False + self.bobs_membership.role = "r" self.bobs_membership.save() self.client.login(username="bob@example.org", password="password") diff --git a/hc/front/tests/test_add_slack_btn.py b/hc/front/tests/test_add_slack_btn.py index 2fe0c335..a9455d9a 100644 --- a/hc/front/tests/test_add_slack_btn.py +++ b/hc/front/tests/test_add_slack_btn.py @@ -28,7 +28,7 @@ class AddSlackBtnTestCase(BaseTestCase): self.assertEqual(r.status_code, 404) def test_it_requires_rw_access(self): - self.bobs_membership.rw = False + self.bobs_membership.role = "r" self.bobs_membership.save() self.client.login(username="bob@example.org", password="password") diff --git a/hc/front/tests/test_add_slack_complete.py b/hc/front/tests/test_add_slack_complete.py index 0bdba714..4d0bd3ad 100644 --- a/hc/front/tests/test_add_slack_complete.py +++ b/hc/front/tests/test_add_slack_complete.py @@ -75,7 +75,11 @@ class AddSlackCompleteTestCase(BaseTestCase): self.assertEqual(r.status_code, 404) def test_it_requires_rw_access(self): - self.bobs_membership.rw = False + session = self.client.session + session["add_slack"] = ("foo", str(self.project.code)) + session.save() + + self.bobs_membership.role = "r" self.bobs_membership.save() self.client.login(username="bob@example.org", password="password") diff --git a/hc/front/tests/test_add_sms.py b/hc/front/tests/test_add_sms.py index 6dbe7e65..3340d7fc 100644 --- a/hc/front/tests/test_add_sms.py +++ b/hc/front/tests/test_add_sms.py @@ -61,7 +61,7 @@ class AddSmsTestCase(BaseTestCase): self.assertEqual(r.status_code, 404) def test_it_requires_rw_access(self): - self.bobs_membership.rw = False + self.bobs_membership.role = "r" self.bobs_membership.save() self.client.login(username="bob@example.org", password="password") diff --git a/hc/front/tests/test_add_spike.py b/hc/front/tests/test_add_spike.py index c6ad277f..aa932d3a 100644 --- a/hc/front/tests/test_add_spike.py +++ b/hc/front/tests/test_add_spike.py @@ -33,7 +33,7 @@ class AddSpikeTestCase(BaseTestCase): self.assertContains(r, "Enter a valid URL") def test_it_requires_rw_access(self): - self.bobs_membership.rw = False + self.bobs_membership.role = "r" self.bobs_membership.save() self.client.login(username="bob@example.org", password="password") diff --git a/hc/front/tests/test_add_telegram.py b/hc/front/tests/test_add_telegram.py index 958ee79d..2c1afa20 100644 --- a/hc/front/tests/test_add_telegram.py +++ b/hc/front/tests/test_add_telegram.py @@ -92,7 +92,7 @@ class AddTelegramTestCase(BaseTestCase): self.assertEqual(r.status_code, 200) def test_it_requires_rw_access(self): - self.bobs_membership.rw = False + self.bobs_membership.role = "r" self.bobs_membership.save() payload = signing.dumps((123, "group", "My Group")) diff --git a/hc/front/tests/test_add_trello.py b/hc/front/tests/test_add_trello.py index db6b13c8..e1b4e9f8 100644 --- a/hc/front/tests/test_add_trello.py +++ b/hc/front/tests/test_add_trello.py @@ -1,5 +1,3 @@ -import json - from django.test.utils import override_settings from hc.api.models import Channel from hc.test import BaseTestCase @@ -40,7 +38,7 @@ class AddTrelloTestCase(BaseTestCase): self.assertEqual(r.status_code, 404) def test_it_requires_rw_access(self): - self.bobs_membership.rw = False + self.bobs_membership.role = "r" self.bobs_membership.save() self.client.login(username="bob@example.org", password="password") diff --git a/hc/front/tests/test_add_victorops.py b/hc/front/tests/test_add_victorops.py index d69282b1..d3ec28ad 100644 --- a/hc/front/tests/test_add_victorops.py +++ b/hc/front/tests/test_add_victorops.py @@ -33,7 +33,7 @@ class AddVictorOpsTestCase(BaseTestCase): self.assertContains(r, "Enter a valid URL") def test_it_requires_rw_access(self): - self.bobs_membership.rw = False + self.bobs_membership.role = "r" self.bobs_membership.save() self.client.login(username="bob@example.org", password="password") diff --git a/hc/front/tests/test_add_webhook.py b/hc/front/tests/test_add_webhook.py index 9118793d..6e0fdf05 100644 --- a/hc/front/tests/test_add_webhook.py +++ b/hc/front/tests/test_add_webhook.py @@ -180,7 +180,7 @@ class AddWebhookTestCase(BaseTestCase): self.assertEqual(Channel.objects.count(), 0) def test_it_requires_rw_access(self): - self.bobs_membership.rw = False + self.bobs_membership.role = "r" self.bobs_membership.save() self.client.login(username="bob@example.org", password="password") diff --git a/hc/front/tests/test_add_whatsapp.py b/hc/front/tests/test_add_whatsapp.py index 8fd06c0b..cd27c4e4 100644 --- a/hc/front/tests/test_add_whatsapp.py +++ b/hc/front/tests/test_add_whatsapp.py @@ -72,7 +72,7 @@ class AddWhatsAppTestCase(BaseTestCase): self.assertEqual(r.status_code, 404) def test_it_requires_rw_access(self): - self.bobs_membership.rw = False + self.bobs_membership.role = "r" self.bobs_membership.save() self.client.login(username="bob@example.org", password="password") diff --git a/hc/front/tests/test_add_zulip.py b/hc/front/tests/test_add_zulip.py index e9ef99bd..3f6ecc1c 100644 --- a/hc/front/tests/test_add_zulip.py +++ b/hc/front/tests/test_add_zulip.py @@ -75,7 +75,7 @@ class AddZulipTestCase(BaseTestCase): self.assertContains(r, "This field is required.") def test_it_requires_rw_access(self): - self.bobs_membership.rw = False + self.bobs_membership.role = "r" self.bobs_membership.save() self.client.login(username="bob@example.org", password="password") diff --git a/hc/front/tests/test_channels.py b/hc/front/tests/test_channels.py index 0359dbbd..6729d080 100644 --- a/hc/front/tests/test_channels.py +++ b/hc/front/tests/test_channels.py @@ -110,7 +110,7 @@ class ChannelsTestCase(BaseTestCase): self.assertContains(r, "broken-channels", status_code=200) def test_it_hides_actions_from_readonly_users(self): - self.bobs_membership.rw = False + self.bobs_membership.role = "r" self.bobs_membership.save() Channel.objects.create(project=self.project, kind="webhook", value="{}") diff --git a/hc/front/tests/test_copy.py b/hc/front/tests/test_copy.py index b8333800..ff98b7b7 100644 --- a/hc/front/tests/test_copy.py +++ b/hc/front/tests/test_copy.py @@ -35,7 +35,7 @@ class CopyCheckTestCase(BaseTestCase): self.assertEqual(r.status_code, 400) def test_it_requires_rw_access(self): - self.bobs_membership.rw = False + self.bobs_membership.role = "r" self.bobs_membership.save() self.client.login(username="bob@example.org", password="password") diff --git a/hc/front/tests/test_details.py b/hc/front/tests/test_details.py index 0ebc8b88..c8d68e6b 100644 --- a/hc/front/tests/test_details.py +++ b/hc/front/tests/test_details.py @@ -51,7 +51,7 @@ class DetailsTestCase(BaseTestCase): self.assertContains(r, "Your new check is ready!", status_code=200) def test_it_hides_actions_from_readonly_users(self): - self.bobs_membership.rw = False + self.bobs_membership.role = "r" self.bobs_membership.save() self.client.login(username="bob@example.org", password="password") @@ -67,7 +67,7 @@ class DetailsTestCase(BaseTestCase): self.assertNotContains(r, "details-remove-check") def test_it_hides_resume_action_from_readonly_users(self): - self.bobs_membership.rw = False + self.bobs_membership.role = "r" self.bobs_membership.save() self.check.status = "paused" diff --git a/hc/front/tests/test_edit_webhook.py b/hc/front/tests/test_edit_webhook.py index 5bb3b0f4..515d625c 100644 --- a/hc/front/tests/test_edit_webhook.py +++ b/hc/front/tests/test_edit_webhook.py @@ -84,7 +84,7 @@ class EditWebhookTestCase(BaseTestCase): self.assertEqual(r.status_code, 400) def test_it_requires_rw_access(self): - self.bobs_membership.rw = False + self.bobs_membership.role = "r" self.bobs_membership.save() self.client.login(username="bob@example.org", password="password") diff --git a/hc/front/tests/test_filtering_rules.py b/hc/front/tests/test_filtering_rules.py index 74fc690d..77bd555f 100644 --- a/hc/front/tests/test_filtering_rules.py +++ b/hc/front/tests/test_filtering_rules.py @@ -74,7 +74,7 @@ class FilteringRulesTestCase(BaseTestCase): self.assertFalse(self.check.manual_resume) def test_it_requires_rw_access(self): - self.bobs_membership.rw = False + self.bobs_membership.role = "r" self.bobs_membership.save() payload = { diff --git a/hc/front/tests/test_my_checks.py b/hc/front/tests/test_my_checks.py index 3b17312f..5f449cd6 100644 --- a/hc/front/tests/test_my_checks.py +++ b/hc/front/tests/test_my_checks.py @@ -129,7 +129,7 @@ class MyChecksTestCase(BaseTestCase): self.assertContains(r, """