diff --git a/amivapi/ldap.py b/amivapi/ldap.py index 663ec87dd0194ce5e3f58c0363c9a0e604fedc02..4c7f1e9bb4811a790b075517e1faaabe896cfe40 100644 --- a/amivapi/ldap.py +++ b/amivapi/ldap.py @@ -40,7 +40,6 @@ anymore. Unfortunately, the info for all previous students is still in the parsing. """ -from eve.methods.patch import patch_internal from eve.methods.post import post_internal from flask import current_app from nethz.ldap import AuthenticatedLdap @@ -208,20 +207,11 @@ def _create_or_update_user(ldap_data): db_data = current_app.data.driver.db['users'].find_one(query) with admin_permissions(): - if db_data: - # Membership will not be downgraded and email not be overwritten - # Newsletter settings will also not be adjusted - ldap_data.pop('email', None) - if db_data.get('membership') != u"none": - ldap_data.pop('membership', None) - ldap_data.pop('send_newsletter', None) - - user = patch_internal('users', - ldap_data, - _id=db_data['_id'])[0] - else: - # For new members, - + if not db_data: + # Only create users if they do not exist, + # updating them is taken care of by the group sync user = post_internal('users', ldap_data)[0] + else: + user = db_data return user diff --git a/amivapi/tests/test_ldap.py b/amivapi/tests/test_ldap.py index cc7133fac05c97de1b8c9308c232765502c53f30..7b466592f23f65444df87aac75e9897fa1a51572 100644 --- a/amivapi/tests/test_ldap.py +++ b/amivapi/tests/test_ldap.py @@ -203,59 +203,6 @@ class LdapTest(WebTestNoAuth): # User exists now self.api.get('/users/%s' % new_user['nethz'], status_code=200) - def test_update_user(self): - """Test the 'patch' part of _create_or_patch_user.""" - # The user is in the database. Now change a few things and verify - # patch with original data does the correct thing - tests = ( - # (field, db_value, ldap_value, change_expected) - ('firstname', 'old', 'new', True), - ('lastname', 'old', 'new', True), - ('department', 'mavt', 'itet', True), - ('legi', '76543210', '01234567', True), - # Membership is only upgraded - ('membership', 'none', 'regular', True), - ('membership', 'regular', 'none', False), - ('membership', 'honorary', 'regular', False), - ('membership', 'honorary', 'none', False), - ('membership', 'extraordinary', 'regular', False), - ('membership', 'extraordinary', 'none', False), - # email will not be changed - ('email', 'old@mail.de', 'new@mail.de', False) - ) - - for ind, (field, db_value, ldap_value, change) in enumerate(tests): - # Create a new user for every test - self.new_object('users', nethz=str(ind), **{field: db_value}) - ldap_data = {'nethz': str(ind), field: ldap_value} - - with self.app.test_request_context(): - result = ldap._create_or_update_user(ldap_data) - - if change: - self.assertEqual(result[field], ldap_value) - else: - self.assertEqual(result[field], db_value) - - def test_upgrade_membership(self): - # Insert non-member and upgrade by ldap later - user = self.api.post('/users', data={ - 'nethz': 'pablo', - 'email': 'pablo@ethz.ch', # this will be auto-generated - 'firstname': 'P', - 'lastname': 'Ablo', - 'department': 'itet', - 'membership': 'none', - 'legi': '01234567', - 'send_newsletter': False, - }, status_code=201).json - self.assertFalse(user['send_newsletter']) - - with self.app.test_request_context(): - result = ldap._create_or_update_user(self.fake_filtered_data()) - - self.assertTrue(result['send_newsletter']) - def test_search(self): """Test that ldap is correctly queried.""" test_query = "äüáÃðáßðöó"