Publically joinable Groups (#697)

* Add public field to AuthGroup

* Add permission for users to join non-public groups

By default this permission will be applied to the "Member" group to
maintain the current behaviour.

* Allow users to join public groups

Users without the 'groupmanagement.request_groups' permission will be
able to join groups marked as public but will not be able to see or join
any other groups.

* Prevent None state change from purging groups

Currently when a user drops from Blue or Member state all groups and
permissions are discarded. This softens that approach by not removing
public groups and creates a distinction between the two activities. An
argument could maybe be made for not removing permissions on a state
change, but that is beyond the scope of this change.

* Correct syntax for removing filtered groups

* Add unit tests for disable user and member

* Update services signals tests

* Correct mocking call

* Remove permissions checking from menu item
This commit is contained in:
Basraah
2017-02-12 13:03:39 +10:00
committed by Adarnof
parent b636262e0c
commit 918ecf812c
12 changed files with 244 additions and 56 deletions

View File

@@ -47,27 +47,27 @@ class ServicesSignalsTestCase(TestCase):
args, kwargs = svc.update_groups.call_args
self.assertEqual(self.member, args[0])
@mock.patch('services.signals.disable_member')
def test_pre_delete_user(self, disable_member):
@mock.patch('services.signals.disable_user')
def test_pre_delete_user(self, disable_user):
"""
Test that disable_member is called when a user is deleted
"""
self.none_user.delete()
self.assertTrue(disable_member.called)
args, kwargs = disable_member.call_args
self.assertTrue(disable_user.called)
args, kwargs = disable_user.call_args
self.assertEqual(self.none_user, args[0])
@mock.patch('services.signals.disable_member')
def test_pre_save_user_inactivation(self, disable_member):
@mock.patch('services.signals.disable_user')
def test_pre_save_user_inactivation(self, disable_user):
"""
Test a user set inactive has disable_member called
"""
self.member.is_active = False
self.member.save() # Signal Trigger
self.assertTrue(disable_member.called)
args, kwargs = disable_member.call_args
self.assertTrue(disable_user.called)
args, kwargs = disable_user.call_args
self.assertEqual(self.member, args[0])
@mock.patch('services.signals.set_state')