stash
This commit is contained in:
parent
582853ab27
commit
9ce700c388
7 changed files with 185 additions and 8 deletions
|
|
@ -2,7 +2,7 @@ from django.test import Client
|
|||
|
||||
from authentication.tests import SignatureAuthClient, UserTestMixin, GroupTestMixin, ToolshedTestCase, \
|
||||
DummyExternalUser
|
||||
from authentication.models import Group, GroupInvite, GroupInviteIncoming, KnownIdentity
|
||||
from authentication.models import Group, GroupInvite, GroupInviteIncoming, GroupMembership, KnownIdentity
|
||||
|
||||
client = SignatureAuthClient()
|
||||
|
||||
|
|
@ -124,9 +124,13 @@ class GroupInviteApiTestCase(UserTestMixin, GroupTestMixin, ToolshedTestCase):
|
|||
self.assertTrue(group.is_member(invitee.public_identity))
|
||||
self.assertEqual(GroupInvite.objects.count(), 0)
|
||||
|
||||
reply5 = client.delete('/api/groupinvites/{}/'.format(incoming.id), invitee)
|
||||
self.assertEqual(reply5.status_code, 204)
|
||||
reply5 = client.post('/api/groupinvites/{}/accept/'.format(incoming.id), invitee)
|
||||
self.assertEqual(reply5.status_code, 201)
|
||||
self.assertEqual(reply5.json()['handle'], str(group))
|
||||
self.assertEqual(GroupInviteIncoming.objects.count(), 0)
|
||||
membership = GroupMembership.objects.get(user=invitee)
|
||||
self.assertEqual(membership.group_name, group.name)
|
||||
self.assertEqual(membership.group_domain, group.domain)
|
||||
|
||||
def test_invite_non_member_denied(self):
|
||||
group = self.f['group1']
|
||||
|
|
@ -189,3 +193,69 @@ class GroupInviteApiTestCase(UserTestMixin, GroupTestMixin, ToolshedTestCase):
|
|||
})
|
||||
self.assertEqual(reply.status_code, 401)
|
||||
self.assertFalse(group.is_member(invitee.public_identity))
|
||||
|
||||
|
||||
class GroupMembershipApiTestCase(UserTestMixin, GroupTestMixin, ToolshedTestCase):
|
||||
"""Covers the pointer index kept on a member's own home backend (GroupMembership), which is
|
||||
what lets that backend remember foreign group membership, analogous to how a friendship ends
|
||||
up recorded on both sides rather than only on the group's authoritative backend."""
|
||||
|
||||
def setUp(self):
|
||||
super().setUp()
|
||||
self.prepare_users()
|
||||
self.prepare_groups()
|
||||
|
||||
def test_record_membership_for_remote_group(self):
|
||||
# local_user2's own home backend has no Group row at all for this group -- it's hosted
|
||||
# entirely on another domain -- yet it should still remember the membership once the
|
||||
# invitee's client confirms the accept against the group's home backend succeeded.
|
||||
invitee = self.f['local_user2']
|
||||
incoming = GroupInviteIncoming.objects.create(
|
||||
group_name='remoteworkshop', group_domain='other.example',
|
||||
inviter_username='someone', inviter_domain='other.example',
|
||||
invitee_user=invitee, secret='some-secret')
|
||||
|
||||
reply = client.post('/api/groupinvites/{}/accept/'.format(incoming.id), invitee)
|
||||
|
||||
self.assertEqual(reply.status_code, 201)
|
||||
self.assertEqual(reply.json()['handle'], '#remoteworkshop@other.example')
|
||||
self.assertEqual(GroupInviteIncoming.objects.count(), 0)
|
||||
membership = GroupMembership.objects.get(user=invitee)
|
||||
self.assertEqual(membership.group_name, 'remoteworkshop')
|
||||
self.assertEqual(membership.group_domain, 'other.example')
|
||||
|
||||
def test_record_membership_wrong_user_denied(self):
|
||||
incoming = GroupInviteIncoming.objects.create(
|
||||
group_name='remoteworkshop', group_domain='other.example',
|
||||
inviter_username='someone', inviter_domain='other.example',
|
||||
invitee_user=self.f['local_user2'], secret='some-secret')
|
||||
|
||||
reply = client.post('/api/groupinvites/{}/accept/'.format(incoming.id), self.f['local_user1'])
|
||||
|
||||
self.assertEqual(reply.status_code, 404)
|
||||
self.assertEqual(GroupMembership.objects.count(), 0)
|
||||
self.assertEqual(GroupInviteIncoming.objects.count(), 1)
|
||||
|
||||
def test_decline_does_not_record_membership(self):
|
||||
incoming = GroupInviteIncoming.objects.create(
|
||||
group_name='remoteworkshop', group_domain='other.example',
|
||||
inviter_username='someone', inviter_domain='other.example',
|
||||
invitee_user=self.f['local_user2'], secret='some-secret')
|
||||
|
||||
reply = client.delete('/api/groupinvites/{}/'.format(incoming.id), self.f['local_user2'])
|
||||
|
||||
self.assertEqual(reply.status_code, 204)
|
||||
self.assertEqual(GroupMembership.objects.count(), 0)
|
||||
|
||||
def test_list_memberships(self):
|
||||
GroupMembership.objects.create(
|
||||
user=self.f['local_user1'], group_name='remoteworkshop', group_domain='other.example')
|
||||
|
||||
reply = client.get('/api/groupmemberships/', self.f['local_user1'])
|
||||
self.assertEqual(reply.status_code, 200)
|
||||
self.assertEqual(len(reply.json()), 1)
|
||||
self.assertEqual(reply.json()[0]['handle'], '#remoteworkshop@other.example')
|
||||
|
||||
reply2 = client.get('/api/groupmemberships/', self.f['local_user2'])
|
||||
self.assertEqual(reply2.status_code, 200)
|
||||
self.assertEqual(len(reply2.json()), 0)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue