Begin fixing tests.

Use custom django-navhelper
This commit is contained in:
Adarnof
2017-04-05 00:10:05 -04:00
parent 26405985a2
commit f0f1b21226
9 changed files with 136 additions and 42 deletions

View File

@@ -11,7 +11,8 @@ from django.dispatch import receiver
from services.hooks import ServicesHook
from services.tasks import disable_user
from authentication.models import State
from authentication.models import State, UserProfile
from authentication.signals import state_changed
logger = logging.getLogger(__name__)
@@ -122,6 +123,19 @@ def m2m_changed_state_permissions(sender, instance, action, pk_set, *args, **kwa
logger.debug("Permission change for state {} was not service permission, ignoring".format(instance))
@receiver(state_changed, sender=UserProfile)
def check_service_accounts_state_changed(sender, user, state, **kwargs):
logger.debug("Received state_changed from %s to state %s" % (user, state))
service_perms = [svc.access_perm for svc in ServicesHook.get_services()]
state_perms = ["{}.{}".format(perm.natural_key()[1], perm.natural_key()[0]) for perm in state.permissions.all()]
for perm in service_perms:
if perm not in state_perms:
for svc in ServicesHook.get_services():
if svc.access_perm == perm:
logger.debug("User %s new state %s does not have service %s permission. Checking account." % (user, state, svc))
svc.validate_user(user)
@receiver(pre_delete, sender=User)
def pre_delete_user(sender, instance, *args, **kwargs):
logger.debug("Received pre_delete from %s" % instance)

View File

@@ -9,13 +9,13 @@ except ImportError:
from django.test import TestCase
from django.contrib.auth.models import Group, Permission
from alliance_auth.tests.auth_utils import AuthUtils
from authentication.models import State
class ServicesSignalsTestCase(TestCase):
def setUp(self):
self.member = AuthUtils.create_member('auth_member')
self.member = AuthUtils.create_user('auth_member', disconnect_signals=True)
self.none_user = AuthUtils.create_user('none_user', disconnect_signals=True)
@mock.patch('services.signals.transaction')
@@ -50,7 +50,6 @@ class ServicesSignalsTestCase(TestCase):
args, kwargs = svc.validate_user.call_args
self.assertEqual(self.member, args[0])
@mock.patch('services.signals.disable_user')
def test_pre_delete_user(self, disable_user):
@@ -75,26 +74,6 @@ class ServicesSignalsTestCase(TestCase):
args, kwargs = disable_user.call_args
self.assertEqual(self.member, args[0])
@mock.patch('services.signals.set_state')
def test_pre_save_user_activation(self, set_state):
"""
Test a user set inactive has disable_member called
"""
# Arrange, set user inactive first
self.member.is_active = False
self.member.save() # Signal Trigger (but not the one we want)
set_state.reset_mock()
# Act
self.member.is_active = True
self.member.save() # Signal Trigger
# Assert
self.assertTrue(set_state.called)
args, kwargs = set_state.call_args
self.assertEqual(self.member, args[0])
@mock.patch('services.signals.transaction')
@mock.patch('services.signals.ServicesHook')
def test_m2m_changed_group_permissions(self, services_hook, transaction):
@@ -153,3 +132,58 @@ class ServicesSignalsTestCase(TestCase):
self.assertTrue(svc.validate_user.called)
args, kwargs = svc.validate_user.call_args
self.assertEqual(self.member, args[0])
@mock.patch('services.signals.transaction')
@mock.patch('services.signals.ServicesHook')
def test_m2m_changed_user_state_permissions(self, services_hook, transaction):
from django.contrib.contenttypes.models import ContentType
svc = mock.Mock()
svc.validate_user.return_value = None
svc.access_perm = 'auth.access_testsvc'
services_hook.get_services.return_value = [svc]
# Overload transaction.on_commit so everything happens synchronously
transaction.on_commit = lambda fn: fn()
AuthUtils.disconnect_signals()
test_state = State.objects.create(name="Test state", priority=150)
self.member.profile.state = test_state
self.member.profile.save()
AuthUtils.connect_signals()
ct = ContentType.objects.get(app_label='auth', model='permission')
perm = Permission.objects.create(name="Test perm", codename="access_testsvc", content_type=ct)
test_state.permissions.add(perm)
# Act, should trigger m2m change
test_state.permissions.remove(perm)
# Assert
self.assertTrue(services_hook.get_services.called)
self.assertTrue(svc.validate_user.called)
args, kwargs = svc.validate_user.call_args
self.assertEqual(self.member, args[0])
@mock.patch('services.signals.ServicesHook')
def test_state_changed_services_valudation(self, services_hook):
"""
Test a user changing state has service accounts validated
"""
svc = mock.Mock()
svc.validate_user.return_value = None
svc.access_perm = 'auth.access_testsvc'
services_hook.get_services.return_value = [svc]
test_state = State.objects.create(name="Test state", priority=150, public=True)
self.member.profile.state = test_state
self.member.profile.save()
# Assert
self.assertTrue(services_hook.get_services.called)
self.assertTrue(svc.validate_user.called)
args, kwargs = svc.validate_user.call_args
self.assertEqual(self.member, args[0])