From ad865a4cd5347680f987127142fe8c8c4a8ed5de Mon Sep 17 00:00:00 2001 From: Danil Date: Sun, 3 Feb 2019 18:54:52 +0200 Subject: [PATCH] User LDAP add setter/getter methods for each config key, tests --- src/NextCloud/api_wrappers/user_ldap.py | 88 ++++++++++++++++++++++++- tests/test_ldap.py | 32 +++++++++ 2 files changed, 119 insertions(+), 1 deletion(-) diff --git a/src/NextCloud/api_wrappers/user_ldap.py b/src/NextCloud/api_wrappers/user_ldap.py index 19a986c..94ca1c9 100644 --- a/src/NextCloud/api_wrappers/user_ldap.py +++ b/src/NextCloud/api_wrappers/user_ldap.py @@ -1,9 +1,66 @@ +import re + from NextCloud.base import WithRequester class UserLDAP(WithRequester): API_URL = "/ocs/v2.php/apps/user_ldap/api/v1/config" + CONFIG_KEYS = [ + "ldapHost", + "ldapPort", + "ldapBackupHost", + "ldapBackupPort", + "ldapBase", + "ldapBaseUsers", + "ldapBaseGroups", + "ldapAgentName", + "ldapAgentPassword", + "ldapTLS", + "turnOffCertCheck", + "ldapUserDisplayName", + "ldapGidNumber", + "ldapUserFilterObjectclass", + "ldapUserFilterGroups", + "ldapUserFilter", + "ldapUserFilterMode", + "ldapGroupFilter", + "ldapGroupFilterMode", + "ldapGroupFilterObjectclass", + "ldapGroupFilterGroups", + "ldapGroupMemberAssocAttr", + "ldapGroupDisplayName", + "ldapLoginFilter", + "ldapLoginFilterMode", + "ldapLoginFilterEmail", + "ldapLoginFilterUsername", + "ldapLoginFilterAttributes", + "ldapQuotaAttribute", + "ldapQuotaDefault", + "ldapEmailAttribute", + "ldapCacheTTL", + "ldapUuidUserAttribute", + "ldapUuidGroupAttribute", + "ldapOverrideMainServer", + "ldapConfigurationActive", + "ldapAttributesForUserSearch", + "ldapAttributesForGroupSearch", + "ldapExperiencedAdmin", + "homeFolderNamingRule", + "hasPagedResultSupport", + "hasMemberOfFilterSupport", + "useMemberOfToDetectMembership", + "ldapExpertUsernameAttr", + "ldapExpertUUIDUserAttr", + "ldapExpertUUIDGroupAttr", + "lastJpegPhotoLookup", + "ldapNestedGroups", + "ldapPagingSize", + "turnOnPasswordChange", + "ldapDynamicGroupMemberURL", + "ldapDefaultPPolicyDN", + ] + def create_ldap_config(self): """ Create a new and empty LDAP configuration """ return self.requester.post() @@ -35,7 +92,6 @@ def edit_ldap_config(self, config_id, data): Returns: """ - # TODO: refactor to provide methods for configuration s.a. edit_ldap_password and get_ldap_password prepared_data = {'configData[{}]'.format(key): value for key, value in data.items()} return self.requester.put(config_id, data=prepared_data) @@ -50,3 +106,33 @@ def delete_ldap_config(self, config_id): """ return self.requester.delete(config_id) + + +for ldap_key in UserLDAP.CONFIG_KEYS: + key_name = re.sub('ldap', '', ldap_key) + key_name = re.sub('([a-z0-9])([A-Z])', r'\1_\2', key_name).lower() + + # create and add getter method + getter_name = "get_ldap_{}".format(key_name) + + def getter_method(param): + def getter(self, config_id): + res = self.get_ldap_config(config_id) + data = res['ocs']['data'] + return data[param] + getter.__name__ = getter_name + return getter + + setattr(UserLDAP, getter_name, getter_method(ldap_key)) + + # create and add setter method + setter_name = "set_ldap_{}".format(key_name) + + def setter_method(param): + def setter(self, config_id, value): + res = self.edit_ldap_config(config_id, data={param: value}) + return res + setter.__name__ = setter_name + return setter + + setattr(UserLDAP, setter_name, setter_method(ldap_key)) diff --git a/tests/test_ldap.py b/tests/test_ldap.py index 07497ea..2ccebed 100644 --- a/tests/test_ldap.py +++ b/tests/test_ldap.py @@ -1,5 +1,10 @@ +import re +from unittest.mock import patch + from .base import BaseTestCase +from NextCloud.api_wrappers.user_ldap import UserLDAP + class TestUserLDAP(BaseTestCase): @@ -43,3 +48,30 @@ def test_crud_ldap_config(self): assert res['ocs']['meta']['statuscode'] == self.SUCCESS_CODE res = self.nxc.get_ldap_config(config_id) assert res['ocs']['meta']['statuscode'] == self.NOT_FOUND_CODE + + def test_ldap_setters_getters(self): + res = self.nxc.create_ldap_config() + assert res['ocs']['meta']['statuscode'] == self.SUCCESS_CODE + config_id = res['ocs']['data']['configID'] + + for ldap_key in UserLDAP.CONFIG_KEYS: + key_name = re.sub('ldap', '', ldap_key) + key_name = re.sub('([a-z0-9])([A-Z])', r'\1_\2', key_name).lower() + + getter_name = "get_ldap_{}".format(key_name) + setter_name = "set_ldap_{}".format(key_name) + # test if method exist + assert hasattr(self.nxc, setter_name) + assert hasattr(self.nxc, getter_name) + + # test getter + getter_value = getattr(self.nxc, getter_name)(config_id) + config_value = self.nxc.get_ldap_config(config_id)['ocs']['data'][ldap_key] + assert getter_value == config_value + + # test setter + value = 1 + with patch.object(UserLDAP, 'edit_ldap_config', return_value=1) as mock_method: + setter_method = getattr(self.nxc, setter_name) + setter_method(config_id, value) + mock_method.assert_called_with(config_id, data={ldap_key: value})