Switch from Member.rw to Member.role as the source of truth

This commit is contained in:
Pēteris Caune 2021-07-22 17:16:52 +03:00
parent d19cb8c681
commit 936a5213f8
No known key found for this signature in database
GPG Key ID: E28D7679E9A9EDE2
55 changed files with 80 additions and 74 deletions

View File

@ -440,6 +440,10 @@ class Member(models.Model):
def can_accept(self): def can_accept(self):
return self.user.profile.can_accept(self.project) return self.user.profile.can_accept(self.project)
@property
def is_rw(self):
return self.role in (Member.Role.REGULAR,)
class Credential(models.Model): class Credential(models.Model):
code = models.UUIDField(default=uuid.uuid4, unique=True) code = models.UUIDField(default=uuid.uuid4, unique=True)

View File

@ -37,7 +37,7 @@ class ProfileTestCase(BaseTestCase):
self.assertContains(r, "Member") self.assertContains(r, "Member")
def test_it_shows_readonly_project_membership(self): def test_it_shows_readonly_project_membership(self):
self.bobs_membership.rw = False self.bobs_membership.role = "r"
self.bobs_membership.save() self.bobs_membership.save()
self.client.login(username="bob@example.org", password="password") self.client.login(username="bob@example.org", password="password")

View File

@ -230,7 +230,7 @@ class ProjectTestCase(BaseTestCase):
self.assertContains(r, "bob@example.org") self.assertContains(r, "bob@example.org")
def test_it_checks_rw_access_when_updating_project_name(self): 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.bobs_membership.save()
self.client.login(username="bob@example.org", password="password") self.client.login(username="bob@example.org", password="password")
@ -240,7 +240,7 @@ class ProjectTestCase(BaseTestCase):
self.assertEqual(r.status_code, 403) self.assertEqual(r.status_code, 403)
def test_it_hides_actions_for_readonly_users(self): def test_it_hides_actions_for_readonly_users(self):
self.bobs_membership.rw = False self.bobs_membership.role = "r"
self.bobs_membership.save() self.bobs_membership.save()
self.client.login(username="bob@example.org", password="password") self.client.login(username="bob@example.org", password="password")

View File

@ -287,7 +287,7 @@ def project(request, code):
rw = True rw = True
else: else:
membership = get_object_or_404(Member, project=project, user=request.user) membership = get_object_or_404(Member, project=project, user=request.user)
rw = membership.rw rw = membership.is_rw
ctx = { ctx = {
"page": "project", "page": "project",

View File

@ -33,7 +33,7 @@ class AddAppriseTestCase(BaseTestCase):
self.assertEqual(r.status_code, 404) self.assertEqual(r.status_code, 404)
def test_it_requires_rw_access(self): def test_it_requires_rw_access(self):
self.bobs_membership.rw = False self.bobs_membership.role = "r"
self.bobs_membership.save() self.bobs_membership.save()
self.client.login(username="bob@example.org", password="password") self.client.login(username="bob@example.org", password="password")

View File

@ -59,7 +59,7 @@ class AddCallTestCase(BaseTestCase):
self.assertEqual(r.status_code, 404) self.assertEqual(r.status_code, 404)
def test_it_requires_rw_access(self): def test_it_requires_rw_access(self):
self.bobs_membership.rw = False self.bobs_membership.role = "r"
self.bobs_membership.save() self.bobs_membership.save()
self.client.login(username="bob@example.org", password="password") self.client.login(username="bob@example.org", password="password")

View File

@ -33,7 +33,7 @@ class AddCheckTestCase(BaseTestCase):
self.assertEqual(r.status_code, 405) self.assertEqual(r.status_code, 405)
def test_it_requires_rw_access(self): def test_it_requires_rw_access(self):
self.bobs_membership.rw = False self.bobs_membership.role = "r"
self.bobs_membership.save() self.bobs_membership.save()
self.client.login(username="bob@example.org", password="password") self.client.login(username="bob@example.org", password="password")

View File

@ -24,7 +24,7 @@ class AddDiscordTestCase(BaseTestCase):
self.assertEqual(r.status_code, 404) self.assertEqual(r.status_code, 404)
def test_it_requires_rw_access(self): def test_it_requires_rw_access(self):
self.bobs_membership.rw = False self.bobs_membership.role = "r"
self.bobs_membership.save() self.bobs_membership.save()
self.client.login(username="bob@example.org", password="password") self.client.login(username="bob@example.org", password="password")

View File

@ -76,9 +76,13 @@ class AddDiscordCompleteTestCase(BaseTestCase):
self.assertEqual(r.status_code, 404) self.assertEqual(r.status_code, 404)
def test_it_requires_rw_access(self): 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.bobs_membership.save()
self.client.login(username="bob@example.org", password="password") 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) self.assertEqual(r.status_code, 403)

View File

@ -114,7 +114,7 @@ class AddEmailTestCase(BaseTestCase):
self.assertContains(r, "Please select at least one.") self.assertContains(r, "Please select at least one.")
def test_it_requires_rw_access(self): def test_it_requires_rw_access(self):
self.bobs_membership.rw = False self.bobs_membership.role = "r"
self.bobs_membership.save() self.bobs_membership.save()
self.client.login(username="bob@example.org", password="password") self.client.login(username="bob@example.org", password="password")

View File

@ -24,7 +24,7 @@ class AddLineNotifyTestCase(BaseTestCase):
self.assertEqual(r.status_code, 404) self.assertEqual(r.status_code, 404)
def test_it_requires_rw_access(self): def test_it_requires_rw_access(self):
self.bobs_membership.rw = False self.bobs_membership.role = "r"
self.bobs_membership.save() self.bobs_membership.save()
self.client.login(username="bob@example.org", password="password") self.client.login(username="bob@example.org", password="password")

View File

@ -72,10 +72,14 @@ class AddLineNotifyCompleteTestCase(BaseTestCase):
self.assertEqual(r.status_code, 404) self.assertEqual(r.status_code, 404)
def test_it_requires_rw_access(self): 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() 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") self.client.login(username="bob@example.org", password="password")
r = self.client.get(url) r = self.client.get(url)
self.assertEqual(r.status_code, 403) self.assertEqual(r.status_code, 403)

View File

@ -50,7 +50,7 @@ class AddMatrixTestCase(BaseTestCase):
self.assertFalse(Channel.objects.exists()) self.assertFalse(Channel.objects.exists())
def test_it_requires_rw_access(self): def test_it_requires_rw_access(self):
self.bobs_membership.rw = False self.bobs_membership.role = "r"
self.bobs_membership.save() self.bobs_membership.save()
self.client.login(username="bob@example.org", password="password") self.client.login(username="bob@example.org", password="password")

View File

@ -26,7 +26,7 @@ class AddMattermostTestCase(BaseTestCase):
self.assertEqual(c.project, self.project) self.assertEqual(c.project, self.project)
def test_it_requires_rw_access(self): def test_it_requires_rw_access(self):
self.bobs_membership.rw = False self.bobs_membership.role = "r"
self.bobs_membership.save() self.bobs_membership.save()
self.client.login(username="bob@example.org", password="password") self.client.login(username="bob@example.org", password="password")

View File

@ -26,7 +26,7 @@ class AddMsTeamsTestCase(BaseTestCase):
self.assertEqual(c.project, self.project) self.assertEqual(c.project, self.project)
def test_it_requires_rw_access(self): def test_it_requires_rw_access(self):
self.bobs_membership.rw = False self.bobs_membership.role = "r"
self.bobs_membership.save() self.bobs_membership.save()
self.client.login(username="bob@example.org", password="password") self.client.login(username="bob@example.org", password="password")

View File

@ -51,7 +51,7 @@ class AddOpsgenieTestCase(BaseTestCase):
self.assertEqual(payload["region"], "eu") self.assertEqual(payload["region"], "eu")
def test_it_requires_rw_access(self): def test_it_requires_rw_access(self):
self.bobs_membership.rw = False self.bobs_membership.role = "r"
self.bobs_membership.save() self.bobs_membership.save()
self.client.login(username="bob@example.org", password="password") self.client.login(username="bob@example.org", password="password")

View File

@ -55,7 +55,7 @@ class AddPagerDutyCompleteTestCase(BaseTestCase):
self.assertEqual(r.status_code, 404) self.assertEqual(r.status_code, 404)
def test_it_requires_rw_access(self): def test_it_requires_rw_access(self):
self.bobs_membership.rw = False self.bobs_membership.role = "r"
self.bobs_membership.save() self.bobs_membership.save()
self.client.login(username="bob@example.org", password="password") self.client.login(username="bob@example.org", password="password")

View File

@ -33,7 +33,7 @@ class AddPagerTreeTestCase(BaseTestCase):
self.assertContains(r, "Enter a valid URL") self.assertContains(r, "Enter a valid URL")
def test_it_requires_rw_access(self): def test_it_requires_rw_access(self):
self.bobs_membership.rw = False self.bobs_membership.role = "r"
self.bobs_membership.save() self.bobs_membership.save()
self.client.login(username="bob@example.org", password="password") self.client.login(username="bob@example.org", password="password")

View File

@ -36,7 +36,7 @@ class AddPdTestCase(BaseTestCase):
self.assertEqual(c.value, "123456") self.assertEqual(c.value, "123456")
def test_it_requires_rw_access(self): def test_it_requires_rw_access(self):
self.bobs_membership.rw = False self.bobs_membership.role = "r"
self.bobs_membership.save() self.bobs_membership.save()
self.client.login(username="bob@example.org", password="password") self.client.login(username="bob@example.org", password="password")

View File

@ -24,7 +24,7 @@ class AddPushbulletTestCase(BaseTestCase):
self.assertEqual(r.status_code, 404) self.assertEqual(r.status_code, 404)
def test_it_requires_rw_access(self): def test_it_requires_rw_access(self):
self.bobs_membership.rw = False self.bobs_membership.role = "r"
self.bobs_membership.save() self.bobs_membership.save()
self.client.login(username="bob@example.org", password="password") self.client.login(username="bob@example.org", password="password")

View File

@ -71,7 +71,11 @@ class AddPushbulletTestCase(BaseTestCase):
self.assertEqual(r.status_code, 404) self.assertEqual(r.status_code, 404)
def test_it_requires_rw_access(self): 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() self.bobs_membership.save()
url = self.url + "?code=12345678&state=foo" url = self.url + "?code=12345678&state=foo"

View File

@ -81,7 +81,7 @@ class AddPushoverTestCase(BaseTestCase):
self.assertEqual(r.status_code, 403) self.assertEqual(r.status_code, 403)
def test_it_requires_rw_access(self): def test_it_requires_rw_access(self):
self.bobs_membership.rw = False self.bobs_membership.role = "r"
self.bobs_membership.save() self.bobs_membership.save()
self.client.login(username="bob@example.org", password="password") self.client.login(username="bob@example.org", password="password")

View File

@ -55,7 +55,7 @@ class AddShellTestCase(BaseTestCase):
self.assertEqual(c.cmd_up, "logger up") self.assertEqual(c.cmd_up, "logger up")
def test_it_requires_rw_access(self): def test_it_requires_rw_access(self):
self.bobs_membership.rw = False self.bobs_membership.role = "r"
self.bobs_membership.save() self.bobs_membership.save()
self.client.login(username="bob@example.org", password="password") self.client.login(username="bob@example.org", password="password")

View File

@ -52,7 +52,7 @@ class AddSignalTestCase(BaseTestCase):
self.assertEqual(r.status_code, 404) self.assertEqual(r.status_code, 404)
def test_it_requires_rw_access(self): def test_it_requires_rw_access(self):
self.bobs_membership.rw = False self.bobs_membership.role = "r"
self.bobs_membership.save() self.bobs_membership.save()
self.client.login(username="bob@example.org", password="password") self.client.login(username="bob@example.org", password="password")

View File

@ -33,7 +33,7 @@ class AddSlackTestCase(BaseTestCase):
self.assertContains(r, "Enter a valid URL") self.assertContains(r, "Enter a valid URL")
def test_it_requires_rw_access(self): def test_it_requires_rw_access(self):
self.bobs_membership.rw = False self.bobs_membership.role = "r"
self.bobs_membership.save() self.bobs_membership.save()
self.client.login(username="bob@example.org", password="password") self.client.login(username="bob@example.org", password="password")

View File

@ -28,7 +28,7 @@ class AddSlackBtnTestCase(BaseTestCase):
self.assertEqual(r.status_code, 404) self.assertEqual(r.status_code, 404)
def test_it_requires_rw_access(self): def test_it_requires_rw_access(self):
self.bobs_membership.rw = False self.bobs_membership.role = "r"
self.bobs_membership.save() self.bobs_membership.save()
self.client.login(username="bob@example.org", password="password") self.client.login(username="bob@example.org", password="password")

View File

@ -75,7 +75,11 @@ class AddSlackCompleteTestCase(BaseTestCase):
self.assertEqual(r.status_code, 404) self.assertEqual(r.status_code, 404)
def test_it_requires_rw_access(self): 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.bobs_membership.save()
self.client.login(username="bob@example.org", password="password") self.client.login(username="bob@example.org", password="password")

View File

@ -61,7 +61,7 @@ class AddSmsTestCase(BaseTestCase):
self.assertEqual(r.status_code, 404) self.assertEqual(r.status_code, 404)
def test_it_requires_rw_access(self): def test_it_requires_rw_access(self):
self.bobs_membership.rw = False self.bobs_membership.role = "r"
self.bobs_membership.save() self.bobs_membership.save()
self.client.login(username="bob@example.org", password="password") self.client.login(username="bob@example.org", password="password")

View File

@ -33,7 +33,7 @@ class AddSpikeTestCase(BaseTestCase):
self.assertContains(r, "Enter a valid URL") self.assertContains(r, "Enter a valid URL")
def test_it_requires_rw_access(self): def test_it_requires_rw_access(self):
self.bobs_membership.rw = False self.bobs_membership.role = "r"
self.bobs_membership.save() self.bobs_membership.save()
self.client.login(username="bob@example.org", password="password") self.client.login(username="bob@example.org", password="password")

View File

@ -92,7 +92,7 @@ class AddTelegramTestCase(BaseTestCase):
self.assertEqual(r.status_code, 200) self.assertEqual(r.status_code, 200)
def test_it_requires_rw_access(self): def test_it_requires_rw_access(self):
self.bobs_membership.rw = False self.bobs_membership.role = "r"
self.bobs_membership.save() self.bobs_membership.save()
payload = signing.dumps((123, "group", "My Group")) payload = signing.dumps((123, "group", "My Group"))

View File

@ -1,5 +1,3 @@
import json
from django.test.utils import override_settings from django.test.utils import override_settings
from hc.api.models import Channel from hc.api.models import Channel
from hc.test import BaseTestCase from hc.test import BaseTestCase
@ -40,7 +38,7 @@ class AddTrelloTestCase(BaseTestCase):
self.assertEqual(r.status_code, 404) self.assertEqual(r.status_code, 404)
def test_it_requires_rw_access(self): def test_it_requires_rw_access(self):
self.bobs_membership.rw = False self.bobs_membership.role = "r"
self.bobs_membership.save() self.bobs_membership.save()
self.client.login(username="bob@example.org", password="password") self.client.login(username="bob@example.org", password="password")

View File

@ -33,7 +33,7 @@ class AddVictorOpsTestCase(BaseTestCase):
self.assertContains(r, "Enter a valid URL") self.assertContains(r, "Enter a valid URL")
def test_it_requires_rw_access(self): def test_it_requires_rw_access(self):
self.bobs_membership.rw = False self.bobs_membership.role = "r"
self.bobs_membership.save() self.bobs_membership.save()
self.client.login(username="bob@example.org", password="password") self.client.login(username="bob@example.org", password="password")

View File

@ -180,7 +180,7 @@ class AddWebhookTestCase(BaseTestCase):
self.assertEqual(Channel.objects.count(), 0) self.assertEqual(Channel.objects.count(), 0)
def test_it_requires_rw_access(self): def test_it_requires_rw_access(self):
self.bobs_membership.rw = False self.bobs_membership.role = "r"
self.bobs_membership.save() self.bobs_membership.save()
self.client.login(username="bob@example.org", password="password") self.client.login(username="bob@example.org", password="password")

View File

@ -72,7 +72,7 @@ class AddWhatsAppTestCase(BaseTestCase):
self.assertEqual(r.status_code, 404) self.assertEqual(r.status_code, 404)
def test_it_requires_rw_access(self): def test_it_requires_rw_access(self):
self.bobs_membership.rw = False self.bobs_membership.role = "r"
self.bobs_membership.save() self.bobs_membership.save()
self.client.login(username="bob@example.org", password="password") self.client.login(username="bob@example.org", password="password")

View File

@ -75,7 +75,7 @@ class AddZulipTestCase(BaseTestCase):
self.assertContains(r, "This field is required.") self.assertContains(r, "This field is required.")
def test_it_requires_rw_access(self): def test_it_requires_rw_access(self):
self.bobs_membership.rw = False self.bobs_membership.role = "r"
self.bobs_membership.save() self.bobs_membership.save()
self.client.login(username="bob@example.org", password="password") self.client.login(username="bob@example.org", password="password")

View File

@ -110,7 +110,7 @@ class ChannelsTestCase(BaseTestCase):
self.assertContains(r, "broken-channels", status_code=200) self.assertContains(r, "broken-channels", status_code=200)
def test_it_hides_actions_from_readonly_users(self): def test_it_hides_actions_from_readonly_users(self):
self.bobs_membership.rw = False self.bobs_membership.role = "r"
self.bobs_membership.save() self.bobs_membership.save()
Channel.objects.create(project=self.project, kind="webhook", value="{}") Channel.objects.create(project=self.project, kind="webhook", value="{}")

View File

@ -35,7 +35,7 @@ class CopyCheckTestCase(BaseTestCase):
self.assertEqual(r.status_code, 400) self.assertEqual(r.status_code, 400)
def test_it_requires_rw_access(self): def test_it_requires_rw_access(self):
self.bobs_membership.rw = False self.bobs_membership.role = "r"
self.bobs_membership.save() self.bobs_membership.save()
self.client.login(username="bob@example.org", password="password") self.client.login(username="bob@example.org", password="password")

View File

@ -51,7 +51,7 @@ class DetailsTestCase(BaseTestCase):
self.assertContains(r, "Your new check is ready!", status_code=200) self.assertContains(r, "Your new check is ready!", status_code=200)
def test_it_hides_actions_from_readonly_users(self): def test_it_hides_actions_from_readonly_users(self):
self.bobs_membership.rw = False self.bobs_membership.role = "r"
self.bobs_membership.save() self.bobs_membership.save()
self.client.login(username="bob@example.org", password="password") self.client.login(username="bob@example.org", password="password")
@ -67,7 +67,7 @@ class DetailsTestCase(BaseTestCase):
self.assertNotContains(r, "details-remove-check") self.assertNotContains(r, "details-remove-check")
def test_it_hides_resume_action_from_readonly_users(self): 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.bobs_membership.save()
self.check.status = "paused" self.check.status = "paused"

View File

@ -84,7 +84,7 @@ class EditWebhookTestCase(BaseTestCase):
self.assertEqual(r.status_code, 400) self.assertEqual(r.status_code, 400)
def test_it_requires_rw_access(self): def test_it_requires_rw_access(self):
self.bobs_membership.rw = False self.bobs_membership.role = "r"
self.bobs_membership.save() self.bobs_membership.save()
self.client.login(username="bob@example.org", password="password") self.client.login(username="bob@example.org", password="password")

View File

@ -74,7 +74,7 @@ class FilteringRulesTestCase(BaseTestCase):
self.assertFalse(self.check.manual_resume) self.assertFalse(self.check.manual_resume)
def test_it_requires_rw_access(self): def test_it_requires_rw_access(self):
self.bobs_membership.rw = False self.bobs_membership.role = "r"
self.bobs_membership.save() self.bobs_membership.save()
payload = { payload = {

View File

@ -129,7 +129,7 @@ class MyChecksTestCase(BaseTestCase):
self.assertContains(r, """<div class="btn btn-xs grace ">foo</div>""") self.assertContains(r, """<div class="btn btn-xs grace ">foo</div>""")
def test_it_hides_actions_from_readonly_users(self): def test_it_hides_actions_from_readonly_users(self):
self.bobs_membership.rw = False self.bobs_membership.role = "r"
self.bobs_membership.save() self.bobs_membership.save()
self.client.login(username="bob@example.org", password="password") self.client.login(username="bob@example.org", password="password")

View File

@ -48,7 +48,7 @@ class PauseTestCase(BaseTestCase):
self.assertEqual(r.status_code, 200) self.assertEqual(r.status_code, 200)
def test_it_requires_rw_access(self): def test_it_requires_rw_access(self):
self.bobs_membership.rw = False self.bobs_membership.role = "r"
self.bobs_membership.save() self.bobs_membership.save()
self.client.login(username="bob@example.org", password="password") self.client.login(username="bob@example.org", password="password")

View File

@ -49,7 +49,7 @@ class RemoveChannelTestCase(BaseTestCase):
self.assertEqual(r.status_code, 405) self.assertEqual(r.status_code, 405)
def test_it_requires_rw_access(self): def test_it_requires_rw_access(self):
self.bobs_membership.rw = False self.bobs_membership.role = "r"
self.bobs_membership.save() self.bobs_membership.save()
self.client.login(username="bob@example.org", password="password") self.client.login(username="bob@example.org", password="password")

View File

@ -53,7 +53,7 @@ class RemoveCheckTestCase(BaseTestCase):
self.assertRedirects(r, self.redirect_url) self.assertRedirects(r, self.redirect_url)
def test_it_requires_rw_access(self): def test_it_requires_rw_access(self):
self.bobs_membership.rw = False self.bobs_membership.role = "r"
self.bobs_membership.save() self.bobs_membership.save()
self.client.login(username="bob@example.org", password="password") self.client.login(username="bob@example.org", password="password")

View File

@ -28,7 +28,7 @@ class ResumeTestCase(BaseTestCase):
self.assertRedirects(r, self.redirect_url) self.assertRedirects(r, self.redirect_url)
def test_it_requires_rw_access(self): def test_it_requires_rw_access(self):
self.bobs_membership.rw = False self.bobs_membership.role = "r"
self.bobs_membership.save() self.bobs_membership.save()
self.client.login(username="bob@example.org", password="password") self.client.login(username="bob@example.org", password="password")

View File

@ -67,7 +67,7 @@ class StatusSingleTestCase(BaseTestCase):
self.assertIn("resume-btn", doc["status_text"]) self.assertIn("resume-btn", doc["status_text"])
def test_resume_requires_rw_access(self): def test_resume_requires_rw_access(self):
self.bobs_membership.rw = False self.bobs_membership.role = "r"
self.bobs_membership.save() self.bobs_membership.save()
self.check.status = "paused" self.check.status = "paused"

View File

@ -53,7 +53,7 @@ class SwitchChannelTestCase(BaseTestCase):
self.assertEqual(r.status_code, 200) self.assertEqual(r.status_code, 200)
def test_it_requires_rw_access(self): def test_it_requires_rw_access(self):
self.bobs_membership.rw = False self.bobs_membership.role = "r"
self.bobs_membership.save() self.bobs_membership.save()
self.client.login(username="bob@example.org", password="password") self.client.login(username="bob@example.org", password="password")

View File

@ -65,7 +65,7 @@ class TransferTestCase(BaseTestCase):
self.assertEqual(r.status_code, 404) self.assertEqual(r.status_code, 404)
def test_it_requires_rw_access(self): def test_it_requires_rw_access(self):
self.bobs_membership.rw = False self.bobs_membership.role = "r"
self.bobs_membership.save() self.bobs_membership.save()
payload = {"project": self.project.code} payload = {"project": self.project.code}

View File

@ -72,7 +72,7 @@ class UpdateChannelTestCase(BaseTestCase):
self.assertEqual(r.status_code, 400) self.assertEqual(r.status_code, 400)
def test_it_requires_rw_access(self): def test_it_requires_rw_access(self):
self.bobs_membership.rw = False self.bobs_membership.role = "r"
self.bobs_membership.save() self.bobs_membership.save()
payload = {"channel": self.channel.code} payload = {"channel": self.channel.code}

View File

@ -53,7 +53,7 @@ class UpdateChannelNameTestCase(BaseTestCase):
self.assertEqual(r.status_code, 405) self.assertEqual(r.status_code, 405)
def test_it_requires_rw_access(self): def test_it_requires_rw_access(self):
self.bobs_membership.rw = False self.bobs_membership.role = "r"
self.bobs_membership.save() self.bobs_membership.save()
payload = {"name": "My work email"} payload = {"name": "My work email"}

View File

@ -42,7 +42,7 @@ class UpdateNameTestCase(BaseTestCase):
self.assertEqual(r.status_code, 404) self.assertEqual(r.status_code, 404)
def test_it_requires_rw_access(self): def test_it_requires_rw_access(self):
self.bobs_membership.rw = False self.bobs_membership.role = "r"
self.bobs_membership.save() self.bobs_membership.save()
payload = {"name": "Charlie Sent This"} payload = {"name": "Charlie Sent This"}

View File

@ -182,7 +182,7 @@ class UpdateTimeoutTestCase(BaseTestCase):
self.assertRedirects(r, self.redirect_url) self.assertRedirects(r, self.redirect_url)
def test_it_requires_rw_access(self): def test_it_requires_rw_access(self):
self.bobs_membership.rw = False self.bobs_membership.role = "r"
self.bobs_membership.save() self.bobs_membership.save()
payload = {"kind": "simple", "timeout": 3600, "grace": 60} payload = {"kind": "simple", "timeout": 3600, "grace": 60}

View File

@ -96,7 +96,7 @@ def _get_check_for_user(request, code):
return check, True return check, True
membership = get_object_or_404(Member, project=check.project, user=request.user) membership = get_object_or_404(Member, project=check.project, user=request.user)
return check, membership.rw return check, membership.is_rw
def _get_rw_check_for_user(request, code): def _get_rw_check_for_user(request, code):
@ -120,7 +120,7 @@ def _get_channel_for_user(request, code):
return channel, True return channel, True
membership = get_object_or_404(Member, project=channel.project, user=request.user) membership = get_object_or_404(Member, project=channel.project, user=request.user)
return channel, membership.rw return channel, membership.is_rw
def _get_rw_channel_for_user(request, code): def _get_rw_channel_for_user(request, code):
@ -143,7 +143,7 @@ def _get_project_for_user(request, project_code):
membership = get_object_or_404(Member, project=project, user=request.user) membership = get_object_or_404(Member, project=project, user=request.user)
return project, membership.rw return project, membership.is_rw
def _get_rw_project_for_user(request, project_code): def _get_rw_project_for_user(request, project_code):

View File

@ -172,13 +172,7 @@
</a> </a>
</div> </div>
</td> </td>
<td> <td>{{ m.get_role_display }}</td>
{% if m.rw %}
Member
{% else %}
Read-only
{% endif %}
</td>
<td> <td>
<a <a
href="#" href="#"

View File

@ -167,13 +167,7 @@
{% for m in project.member_set.all %} {% for m in project.member_set.all %}
<tr> <tr>
<td class="email">{{ m.user.email }}</td> <td class="email">{{ m.user.email }}</td>
<td> <td>{{ m.get_role_display}}</td>
{% if m.rw %}
Member
{% else %}
Read-only
{% endif %}
</td>
<td> <td>
{% if is_owner %} {% if is_owner %}
<a <a