class KolabRoundcubeChangePassword(unittest.TestCase): def setUp(self): self.kolabWAPhelper = KolabWAPTestHelpers() self.driver = self.kolabWAPhelper.init_driver() def helper_user_change_password(self): driver = self.driver url = driver.current_url[:driver.current_url.find("?")] driver.get(url + "?_task=settings&_action=plugin.password") self.kolabWAPhelper.wait_loading(0.5) elem = driver.find_element_by_id("curpasswd") elem.send_keys("test") elem = driver.find_element_by_id("newpasswd") elem.send_keys("test1234") elem = driver.find_element_by_id("confpasswd") elem.send_keys("test1234") elem = driver.find_element_by_xpath("//form[@id=\"password-form\"]//input[@class=\"button mainaction\"]") elem.click() self.kolabWAPhelper.wait_loading() try: elem = driver.find_element_by_class_name("error") self.assertEquals("", elem.text, "User password was not changed: " + elem.text) except NoSuchElementException, e: # no problem, usually there should not be an error elem = driver.find_element_by_class_name("confirmation") self.assertEquals("Successfully saved.", elem.text, "User password should have been successfully saved, but was: " + elem.text) self.kolabWAPhelper.log("User has updated his password successfully")
class KolabUserMailhostLocalhost(unittest.TestCase): def setUp(self): self.kolabWAPhelper = KolabWAPTestHelpers() self.driver = self.kolabWAPhelper.init_driver() def modify_mailhost_default(self): driver = self.driver driver.get(driver.current_url) elem = driver.find_element_by_link_text("Settings") elem.click() self.kolabWAPhelper.wait_loading() elem = self.driver.find_element_by_id("searchinput") elem.send_keys("Kolab User") elem.send_keys(Keys.ENTER) self.kolabWAPhelper.wait_loading(initialwait = 2) elem = self.driver.find_element_by_xpath("//table[@id='settingstypelist']/tbody/tr/td") self.assertEquals("Kolab User", elem.text, "Expected to select Kolab User but was " + elem.text) elem.click() self.kolabWAPhelper.wait_loading(initialwait = 1) elem = driver.find_element_by_link_text("Attributes") elem.click() elem = driver.find_element_by_xpath("//tr[@id='attr_table_row_mailhost']/td[@class='actions']/a[@href='#edit']").click() self.kolabWAPhelper.wait_loading(0.5) driver.find_element_by_xpath("//tr[@id='attr_form_row_value']/td[@class='value']/select/option[@value='normal']").click() elem = driver.find_element_by_xpath("//tr[@id='attr_form_row_default']/td[@class='value']/input") elem.send_keys("localhost") driver.find_element_by_xpath("//input[@value='Save']").click() elem = driver.find_element_by_xpath("//input[@value=\"Submit\"]").click() self.kolabWAPhelper.wait_loading() elem = driver.find_element_by_xpath("//div[@id=\"message\"]") self.assertEquals("Object type updated successfully.", elem.text, "object type was not updated successfully, message: " + elem.text) def test_modify_mailhost_default(self): kolabWAPhelper = self.kolabWAPhelper kolabWAPhelper.log("Running test: test_modify_mailhost_default") # login Directory Manager kolabWAPhelper.login_kolab_wap("/kolab-webadmin", "cn=Directory Manager", "test") self.modify_mailhost_default() kolabWAPhelper.logout_kolab_wap() def tearDown(self): # write current page for debugging purposes self.kolabWAPhelper.log_current_page() self.driver.quit()
class KolabRoundcubeChangePassword(unittest.TestCase): def setUp(self): self.kolabWAPhelper = KolabWAPTestHelpers() self.driver = self.kolabWAPhelper.init_driver() def helper_user_change_password(self): driver = self.driver url = driver.current_url[:driver.current_url.find("?")] driver.get(url + "?_task=settings&_action=plugin.password") self.kolabWAPhelper.wait_loading(0.5) elem = driver.find_element_by_id("curpasswd") elem.send_keys("test") elem = driver.find_element_by_id("newpasswd") elem.send_keys("test1234") elem = driver.find_element_by_id("confpasswd") elem.send_keys("test1234") elem = driver.find_element_by_xpath( "//form[@id=\"password-form\"]//input[@class=\"button mainaction\"]" ) elem.click() self.kolabWAPhelper.wait_loading() try: elem = driver.find_element_by_class_name("error") self.assertEquals("", elem.text, "User password was not changed: " + elem.text) except NoSuchElementException, e: # no problem, usually there should not be an error elem = driver.find_element_by_class_name("confirmation") self.assertEquals( "Successfully saved.", elem.text, "User password should have been successfully saved, but was: " + elem.text) self.kolabWAPhelper.log("User has updated his password successfully")
class KolabWAPCreateUserAndEditSelf(unittest.TestCase): def setUp(self): self.kolabWAPhelper = KolabWAPTestHelpers() self.driver = self.kolabWAPhelper.init_driver() # edit yourself; testing bug https://issues.kolab.org/show_bug.cgi?id=2414 def helper_user_edits_himself(self): driver = self.driver elem = driver.find_element_by_xpath("//div[@class=\"settings\"]") elem.click() self.kolabWAPhelper.wait_loading(1.0) elem = driver.find_element_by_name("initials") elem.send_keys("T") elem = driver.find_element_by_xpath("//input[@value=\"Submit\"]") elem.click() self.kolabWAPhelper.wait_loading() elem = driver.find_element_by_xpath("//div[@id=\"message\"]") self.assertEquals( "User updated successfully.", elem.text, "User was not saved successfully, message: " + elem.text) self.kolabWAPhelper.log("User has updated his own data successfully") def test_edit_user_himself(self): kolabWAPhelper = self.kolabWAPhelper kolabWAPhelper.log("Running test: test_edit_user_himself") # login Directory Manager kolabWAPhelper.login_kolab_wap("/kolab-webadmin", "cn=Directory Manager", "test") username, emailLogin, password, uid = kolabWAPhelper.create_user() kolabWAPhelper.logout_kolab_wap() # login the new user kolabWAPhelper.login_kolab_wap("/kolab-webadmin", emailLogin, password) self.helper_user_edits_himself() kolabWAPhelper.logout_kolab_wap() def test_edit_user_himself_multi_domain_with_quota(self): kolabWAPhelper = self.kolabWAPhelper kolabWAPhelper.log( "Running test: test_edit_user_himself_multi_domain_with_quota") # login Directory Manager kolabWAPhelper.login_kolab_wap("/kolab-webadmin", "cn=Directory Manager", "test") domainname = kolabWAPhelper.create_domain() username, emailLogin, password, uid = kolabWAPhelper.create_user( mail_quota="20kb") kolabWAPhelper.logout_kolab_wap() # login the new user kolabWAPhelper.login_kolab_wap("/kolab-webadmin", emailLogin, password) self.helper_user_edits_himself() kolabWAPhelper.logout_kolab_wap() def test_edit_user_himself_multi_domain(self): kolabWAPhelper = self.kolabWAPhelper kolabWAPhelper.log("Running test: test_edit_user_himself_multi_domain") # login Directory Manager kolabWAPhelper.login_kolab_wap("/kolab-webadmin", "cn=Directory Manager", "test") domainname = kolabWAPhelper.create_domain() username, emailLogin, password, uid = kolabWAPhelper.create_user() kolabWAPhelper.logout_kolab_wap() # login the new user kolabWAPhelper.login_kolab_wap("/kolab-webadmin", emailLogin, password) self.helper_user_edits_himself() kolabWAPhelper.logout_kolab_wap() def tearDown(self): # write current page for debugging purposes self.kolabWAPhelper.log_current_page() self.driver.quit()
class KolabWAPDomainAdmin(unittest.TestCase): def setUp(self): self.kolabWAPhelper = KolabWAPTestHelpers() self.driver = self.kolabWAPhelper.init_driver() # test if correct user type is used in a normal domain def test_default_user_type_in_normal_domain(self): kolabWAPhelper = self.kolabWAPhelper kolabWAPhelper.log("Running test: test_default_user_type_in_normal_domain") # login Directory Manager kolabWAPhelper.login_kolab_wap("/kolab-webadmin", "cn=Directory Manager", "test") username, emailLogin, password = kolabWAPhelper.create_user( prefix = "user") # now edit the user kolabWAPhelper.load_user(username) # check if the user type is actually a normal kolab user elem = self.driver.find_element_by_xpath("//form[@id='user-form']/fieldset/table/tbody/tr/td[@class='value']") self.assertEquals("Kolab User", elem.text, "user type should be Kolab User, but was " + elem.text) kolabWAPhelper.logout_kolab_wap() def test_domain_admin_with_own_domain(self): kolabWAPhelper = self.kolabWAPhelper kolabWAPhelper.log("Running test: test_domain_admin_with_own_domain") # login Directory Manager kolabWAPhelper.login_kolab_wap("/kolab-webadmin", "cn=Directory Manager", "test") username, emailLogin, password, domainname = kolabWAPhelper.create_domainadmin() # now edit the user self.driver.get(self.driver.current_url) elem = self.driver.find_element_by_link_text("Users") elem.click() kolabWAPhelper.wait_loading() elem = self.driver.find_element_by_id("searchinput") elem.send_keys(username) elem.send_keys(Keys.ENTER) kolabWAPhelper.wait_loading(initialwait = 2) elem = self.driver.find_element_by_xpath("//table[@id='userlist']/tbody/tr/td") self.assertEquals(username + ", " + username, elem.text, "Expected to select user " + username + " but was " + elem.text) elem.click() kolabWAPhelper.wait_loading(initialwait = 1) # check if the user type is a Kolab user with domain admin permissions elem = self.driver.find_element_by_xpath("//form[@id='user-form']/fieldset/table/tbody/tr/td[@class='value']") self.assertEquals("Kolab User", elem.text, "user type should be Kolab user, but was " + elem.text) elem = self.driver.find_element_by_link_text("Domain Administrator") elem.click() if not self.driver.find_element_by_xpath("//input[@name='tbitskolabisdomainadmin']").is_selected(): self.assertTrue(False, "isDomainAdmin should be checked") kolabWAPhelper.logout_kolab_wap() # test that domain admin cannot edit its own maxaccount / overallquota def test_domain_admin_edit_own_parameters(self): kolabWAPhelper = self.kolabWAPhelper kolabWAPhelper.log("Running test: test_domain_admin_edit_own_parameters") # login Directory Manager kolabWAPhelper.login_kolab_wap("/kolab-webadmin", "cn=Directory Manager", "test") username, emailLogin, password, domainname = kolabWAPhelper.create_domainadmin() kolabWAPhelper.logout_kolab_wap() kolabWAPhelper.login_kolab_wap("/kolab-webadmin", emailLogin, password) elem = self.driver.find_element_by_xpath("//div[@class=\"settings\"]") elem.click() self.kolabWAPhelper.wait_loading() elem = self.driver.find_element_by_link_text("Domain Administrator") elem.click() self.kolabWAPhelper.wait_loading() # the domain admin should not be able to edit his own parameters, eg max accounts elem = self.driver.find_element_by_xpath("//input[@name=\"tbitskolabmaxaccounts\"]") if not "readonly" in elem.get_attribute('class'): self.assertTrue(False, "maxaccounts should be readonly for the domain admin") # also not tbitskolaboverallquota elem = self.driver.find_element_by_xpath("//input[@name=\"tbitskolaboverallquota\"]") if not "readonly" in elem.get_attribute('class'): self.assertTrue(False, "overallquota should be readonly for the domain admin") # and the checkbox for domainadmin itself should be readonly and disabled elem = self.driver.find_element_by_xpath("//input[@name=\"tbitskolabisdomainadmin\"]") if not "readonly" in elem.get_attribute('class'): self.assertTrue(False, "isdomainadmin should be readonly for the domain admin") if not elem.get_attribute('disabled') == 'true': self.assertTrue(False, "isdomainadmin should be disabled for the domain admin") kolabWAPhelper.logout_kolab_wap() # test if the domain admin can add users to his domain def test_domain_admin_create_user(self): kolabWAPhelper = self.kolabWAPhelper kolabWAPhelper.log("Running test: test_domain_admin_edit_create_user") # login Directory Manager kolabWAPhelper.login_kolab_wap("/kolab-webadmin", "cn=Directory Manager", "test") username, emailLogin, password, domainname = kolabWAPhelper.create_domainadmin() kolabWAPhelper.logout_kolab_wap() kolabWAPhelper.login_kolab_wap("/kolab-webadmin", emailLogin, password) # check selected domain is correct currentdomain=kolabWAPhelper.get_selected_domain() self.assertEquals(domainname, currentdomain, "should have selected domain " + domainname) kolabWAPhelper.create_user() kolabWAPhelper.logout_kolab_wap() # test if ex-domain admin cannot add users def test_ex_domain_admin_without_permission(self): kolabWAPhelper = self.kolabWAPhelper kolabWAPhelper.log("Running test: test_ex_domain_admin_without_permission") # login Directory Manager kolabWAPhelper.login_kolab_wap("/kolab-webadmin", "cn=Directory Manager", "test") username, emailLogin, password, domainname = kolabWAPhelper.create_domainadmin() # now withdraw domainadmin permissions kolabWAPhelper.load_user(username) self.driver.find_element_by_link_text("Domain Administrator").click() self.driver.find_element_by_xpath("//input[@name='tbitskolabisdomainadmin']").click() self.driver.find_element_by_xpath("//input[@value=\"Submit\"]").click() kolabWAPhelper.logout_kolab_wap() kolabWAPhelper.login_kolab_wap("/kolab-webadmin", emailLogin, password) # check selected domain is correct currentdomain=kolabWAPhelper.get_selected_domain() self.assertEquals(domainname, currentdomain, "should have selected domain " + domainname) self.driver.find_element_by_link_text("Users").click() kolabWAPhelper.wait_loading() didFail=True try: elem = self.driver.find_element_by_xpath("//span[@class=\"formtitle\"]") didFail=False except: # all is fine, there should not be a Add User title, but an empty box pass if not didFail: self.assertTrue(False, "ex-domain admin should not be able to create new accounts") kolabWAPhelper.logout_kolab_wap() def tearDown(self): self.kolabWAPhelper.tear_down() self.driver.quit()
class KolabWAPDomainAdmin(unittest.TestCase): def setUp(self): self.kolabWAPhelper = KolabWAPTestHelpers() self.driver = self.kolabWAPhelper.init_driver() # test if correct user type is used in a normal domain def test_default_user_type_in_normal_domain(self): kolabWAPhelper = self.kolabWAPhelper kolabWAPhelper.log( "Running test: test_default_user_type_in_normal_domain") # login Directory Manager kolabWAPhelper.login_kolab_wap("/kolab-webadmin", "cn=Directory Manager", "test") username, emailLogin, password = kolabWAPhelper.create_user( prefix="user") # now edit the user kolabWAPhelper.load_user(username) # check if the user type is actually a normal kolab user elem = self.driver.find_element_by_xpath( "//form[@id='user-form']/fieldset/table/tbody/tr/td[@class='value']" ) self.assertEquals( "Kolab User", elem.text, "user type should be Kolab User, but was " + elem.text) kolabWAPhelper.logout_kolab_wap() def test_domain_admin_with_own_domain(self): kolabWAPhelper = self.kolabWAPhelper kolabWAPhelper.log("Running test: test_domain_admin_with_own_domain") # login Directory Manager kolabWAPhelper.login_kolab_wap("/kolab-webadmin", "cn=Directory Manager", "test") username, emailLogin, password, domainname = kolabWAPhelper.create_domainadmin( ) # now edit the user self.driver.get(self.driver.current_url) elem = self.driver.find_element_by_link_text("Users") elem.click() kolabWAPhelper.wait_loading() elem = self.driver.find_element_by_id("searchinput") elem.send_keys(username) elem.send_keys(Keys.ENTER) kolabWAPhelper.wait_loading(initialwait=2) elem = self.driver.find_element_by_xpath( "//table[@id='userlist']/tbody/tr/td") self.assertEquals( username + ", " + username, elem.text, "Expected to select user " + username + " but was " + elem.text) elem.click() kolabWAPhelper.wait_loading(initialwait=1) # check if the user type is a Kolab user with domain admin permissions elem = self.driver.find_element_by_xpath( "//form[@id='user-form']/fieldset/table/tbody/tr/td[@class='value']" ) self.assertEquals( "Kolab User", elem.text, "user type should be Kolab user, but was " + elem.text) elem = self.driver.find_element_by_link_text("Domain Administrator") elem.click() if not self.driver.find_element_by_xpath( "//input[@name='tbitskolabisdomainadmin']").is_selected(): self.assertTrue(False, "isDomainAdmin should be checked") kolabWAPhelper.logout_kolab_wap() # test that domain admin cannot edit its own maxaccount / overallquota def test_domain_admin_edit_own_parameters(self): kolabWAPhelper = self.kolabWAPhelper kolabWAPhelper.log( "Running test: test_domain_admin_edit_own_parameters") # login Directory Manager kolabWAPhelper.login_kolab_wap("/kolab-webadmin", "cn=Directory Manager", "test") username, emailLogin, password, domainname = kolabWAPhelper.create_domainadmin( ) kolabWAPhelper.logout_kolab_wap() kolabWAPhelper.login_kolab_wap("/kolab-webadmin", emailLogin, password) elem = self.driver.find_element_by_xpath("//div[@class=\"settings\"]") elem.click() self.kolabWAPhelper.wait_loading() elem = self.driver.find_element_by_link_text("Domain Administrator") elem.click() self.kolabWAPhelper.wait_loading() # the domain admin should not be able to edit his own parameters, eg max accounts elem = self.driver.find_element_by_xpath( "//input[@name=\"tbitskolabmaxaccounts\"]") if not "readonly" in elem.get_attribute('class'): self.assertTrue( False, "maxaccounts should be readonly for the domain admin") # also not tbitskolaboverallquota elem = self.driver.find_element_by_xpath( "//input[@name=\"tbitskolaboverallquota\"]") if not "readonly" in elem.get_attribute('class'): self.assertTrue( False, "overallquota should be readonly for the domain admin") # and the checkbox for domainadmin itself should be readonly and disabled elem = self.driver.find_element_by_xpath( "//input[@name=\"tbitskolabisdomainadmin\"]") if not "readonly" in elem.get_attribute('class'): self.assertTrue( False, "isdomainadmin should be readonly for the domain admin") if not elem.get_attribute('disabled') == 'true': self.assertTrue( False, "isdomainadmin should be disabled for the domain admin") kolabWAPhelper.logout_kolab_wap() # test if the domain admin can add users to his domain def test_domain_admin_create_user(self): kolabWAPhelper = self.kolabWAPhelper kolabWAPhelper.log("Running test: test_domain_admin_edit_create_user") # login Directory Manager kolabWAPhelper.login_kolab_wap("/kolab-webadmin", "cn=Directory Manager", "test") username, emailLogin, password, domainname = kolabWAPhelper.create_domainadmin( ) kolabWAPhelper.logout_kolab_wap() kolabWAPhelper.login_kolab_wap("/kolab-webadmin", emailLogin, password) # check selected domain is correct currentdomain = kolabWAPhelper.get_selected_domain() self.assertEquals(domainname, currentdomain, "should have selected domain " + domainname) kolabWAPhelper.create_user() kolabWAPhelper.logout_kolab_wap() # test if ex-domain admin cannot add users def test_ex_domain_admin_without_permission(self): kolabWAPhelper = self.kolabWAPhelper kolabWAPhelper.log( "Running test: test_ex_domain_admin_without_permission") # login Directory Manager kolabWAPhelper.login_kolab_wap("/kolab-webadmin", "cn=Directory Manager", "test") username, emailLogin, password, domainname = kolabWAPhelper.create_domainadmin( ) # now withdraw domainadmin permissions kolabWAPhelper.load_user(username) self.driver.find_element_by_link_text("Domain Administrator").click() self.driver.find_element_by_xpath( "//input[@name='tbitskolabisdomainadmin']").click() self.driver.find_element_by_xpath("//input[@value=\"Submit\"]").click() kolabWAPhelper.logout_kolab_wap() kolabWAPhelper.login_kolab_wap("/kolab-webadmin", emailLogin, password) # check selected domain is correct currentdomain = kolabWAPhelper.get_selected_domain() self.assertEquals(domainname, currentdomain, "should have selected domain " + domainname) self.driver.find_element_by_link_text("Users").click() kolabWAPhelper.wait_loading() didFail = True try: elem = self.driver.find_element_by_xpath( "//span[@class=\"formtitle\"]") didFail = False except: # all is fine, there should not be a Add User title, but an empty box pass if not didFail: self.assertTrue( False, "ex-domain admin should not be able to create new accounts") kolabWAPhelper.logout_kolab_wap() def tearDown(self): self.kolabWAPhelper.tear_down() self.driver.quit()
class KolabWAPCreateUserAndEditSelf(unittest.TestCase): def setUp(self): self.kolabWAPhelper = KolabWAPTestHelpers() self.driver = self.kolabWAPhelper.init_driver() # edit yourself; testing bug https://issues.kolab.org/show_bug.cgi?id=2414 def helper_user_edits_himself(self): driver = self.driver elem = driver.find_element_by_xpath("//div[@class=\"settings\"]") elem.click() self.kolabWAPhelper.wait_loading(1.0) elem = driver.find_element_by_name("initials") elem.send_keys("T") elem = driver.find_element_by_xpath("//input[@value=\"Submit\"]") elem.click() self.kolabWAPhelper.wait_loading() elem = driver.find_element_by_xpath("//div[@id=\"message\"]") self.assertEquals("User updated successfully.", elem.text, "User was not saved successfully, message: " + elem.text) self.kolabWAPhelper.log("User has updated his own data successfully") def test_edit_user_himself(self): kolabWAPhelper = self.kolabWAPhelper kolabWAPhelper.log("Running test: test_edit_user_himself") # login Directory Manager kolabWAPhelper.login_kolab_wap("/kolab-webadmin", "cn=Directory Manager", "test") username, emailLogin, password = kolabWAPhelper.create_user() kolabWAPhelper.logout_kolab_wap() # login the new user kolabWAPhelper.login_kolab_wap("/kolab-webadmin", emailLogin, password) self.helper_user_edits_himself() kolabWAPhelper.logout_kolab_wap() def test_edit_user_himself_multi_domain_with_quota(self): kolabWAPhelper = self.kolabWAPhelper kolabWAPhelper.log("Running test: test_edit_user_himself_multi_domain_with_quota") # login Directory Manager kolabWAPhelper.login_kolab_wap("/kolab-webadmin", "cn=Directory Manager", "test") domainname = kolabWAPhelper.create_domain() username, emailLogin, password = kolabWAPhelper.create_user(mail_quota="20kb") kolabWAPhelper.logout_kolab_wap() # login the new user kolabWAPhelper.login_kolab_wap("/kolab-webadmin", emailLogin, password) self.helper_user_edits_himself() kolabWAPhelper.logout_kolab_wap() def test_edit_user_himself_multi_domain(self): kolabWAPhelper = self.kolabWAPhelper kolabWAPhelper.log("Running test: test_edit_user_himself_multi_domain") # login Directory Manager kolabWAPhelper.login_kolab_wap("/kolab-webadmin", "cn=Directory Manager", "test") domainname = kolabWAPhelper.create_domain() username, emailLogin, password = kolabWAPhelper.create_user() kolabWAPhelper.logout_kolab_wap() # login the new user kolabWAPhelper.login_kolab_wap("/kolab-webadmin", emailLogin, password) self.helper_user_edits_himself() kolabWAPhelper.logout_kolab_wap() def tearDown(self): # write current page for debugging purposes self.kolabWAPhelper.log_current_page() self.driver.quit()
class KolabWAPDomainAdmin(unittest.TestCase): def setUp(self): self.kolabWAPhelper = KolabWAPTestHelpers() self.driver = self.kolabWAPhelper.init_driver() # test if correct user type is used in a normal domain def test_default_user_type_in_normal_domain(self): kolabWAPhelper = self.kolabWAPhelper kolabWAPhelper.log( "Running test: test_default_user_type_in_normal_domain") # login Directory Manager kolabWAPhelper.login_kolab_wap("/kolab-webadmin", "cn=Directory Manager", "test") username, emailLogin, password, uid = kolabWAPhelper.create_user( prefix="user") # now edit the user kolabWAPhelper.load_user(username) # check if the user type is actually a normal kolab user elem = self.driver.find_element_by_xpath( "//form[@id='user-form']/fieldset/table/tbody/tr/td[@class='value']" ) self.assertEquals( "Kolab User", elem.text, "user type should be Kolab User, but was " + elem.text) kolabWAPhelper.logout_kolab_wap() def test_domain_admin_with_own_domain(self): kolabWAPhelper = self.kolabWAPhelper kolabWAPhelper.log("Running test: test_domain_admin_with_own_domain") # login Directory Manager kolabWAPhelper.login_kolab_wap("/kolab-webadmin", "cn=Directory Manager", "test") username, emailLogin, password, domainname = kolabWAPhelper.create_domainadmin( ) # some tests if the domain admin has been stored in LDAP as expected # there should not be the objectClass: mailrecipient # there should not be mail: or alias: ldapuid = "uid=" + username + ",ou=People,dc=" + ",dc=".join( domainname.split(".")) value = kolabWAPhelper.getLDAPValue(ldapuid, 'objectClass') if 'mailrecipient' in value: self.assertIsNone( value, "we don't want objectClass mailrecipient for domainadmins but there is " + str(value)) value = kolabWAPhelper.getLDAPValue(ldapuid, 'mail', '*') self.assertIsNone( value, "we don't want an attribute mail for domainadmins but there is " + str(value)) value = kolabWAPhelper.getLDAPValue(ldapuid, 'alias', '*') self.assertIsNone( value, "we don't want an attribute alias for domainadmins but there is " + str(value)) # now edit the user self.driver.get(self.driver.current_url) elem = self.driver.find_element_by_link_text("Users") elem.click() kolabWAPhelper.wait_loading() elem = self.driver.find_element_by_id("searchinput") elem.send_keys(username) elem.send_keys(Keys.ENTER) kolabWAPhelper.wait_loading(initialwait=2) elem = self.driver.find_element_by_xpath( "//table[@id='userlist']/tbody/tr/td") self.assertEquals( username + ", " + username, elem.text, "Expected to select user " + username + " but was " + elem.text) elem.click() kolabWAPhelper.wait_loading(initialwait=1) # check if the user type is a Kolab Domain Administrator elem = self.driver.find_element_by_xpath( "//form[@id='user-form']/fieldset/table/tbody/tr/td[@class='value']" ) self.assertEquals( "Domain Administrator", elem.text, "user type should be Domain Administrator, but was " + elem.text) kolabWAPhelper.logout_kolab_wap() # test that domain admin cannot edit its own maxaccount / overallquota def test_domain_admin_edit_own_parameters(self): kolabWAPhelper = self.kolabWAPhelper kolabWAPhelper.log( "Running test: test_domain_admin_edit_own_parameters") # login Directory Manager kolabWAPhelper.login_kolab_wap("/kolab-webadmin", "cn=Directory Manager", "test") username, emailLogin, password, domainname = kolabWAPhelper.create_domainadmin( ) kolabWAPhelper.logout_kolab_wap() kolabWAPhelper.login_kolab_wap("/kolab-webadmin", emailLogin, password) elem = self.driver.find_element_by_xpath("//div[@class=\"settings\"]") elem.click() self.kolabWAPhelper.wait_loading() elem = self.driver.find_element_by_link_text("Domain Administrator") elem.click() self.kolabWAPhelper.wait_loading() # the domain admin should not be able to edit his own parameters, eg max accounts elem = self.driver.find_element_by_xpath( "//input[@name=\"tbitskolabmaxaccounts\"]") if not "readonly" in elem.get_attribute('class'): self.assertTrue( False, "maxaccounts should be readonly for the domain admin") # also not tbitskolaboverallquota elem = self.driver.find_element_by_xpath( "//input[@name=\"tbitskolaboverallquota\"]") if not "readonly" in elem.get_attribute('class'): self.assertTrue( False, "overallquota should be readonly for the domain admin") kolabWAPhelper.logout_kolab_wap() # test if the domain admin can add users to his domain def test_domain_admin_create_user(self): kolabWAPhelper = self.kolabWAPhelper kolabWAPhelper.log("Running test: test_domain_admin_edit_create_user") # login Directory Manager kolabWAPhelper.login_kolab_wap("/kolab-webadmin", "cn=Directory Manager", "test") username, emailLogin, password, domainname = kolabWAPhelper.create_domainadmin( ) kolabWAPhelper.logout_kolab_wap() kolabWAPhelper.login_kolab_wap("/kolab-webadmin", emailLogin, password) # check selected domain is correct currentdomain = kolabWAPhelper.get_selected_domain() self.assertEquals(domainname, currentdomain, "should have selected domain " + domainname) kolabWAPhelper.create_user() kolabWAPhelper.logout_kolab_wap() # test if the domain admin can add users to another domain that he manages when he is not domainadmin in his own domain # this might need fixing. see https://github.com/TBits/KolabScripts/issues/67 def test_domain_admin_create_user_other_domain(self): kolabWAPhelper = self.kolabWAPhelper kolabWAPhelper.log( "Running test: test_domain_admin_edit_create_user_other_domain") # login Directory Manager kolabWAPhelper.login_kolab_wap("/kolab-webadmin", "cn=Directory Manager", "test") username, emailLogin, password, domainname = kolabWAPhelper.create_domainadmin( only_create_admin=True) domainname2 = kolabWAPhelper.create_domain(username) kolabWAPhelper.logout_kolab_wap() kolabWAPhelper.login_kolab_wap("/kolab-webadmin", emailLogin, password) kolabWAPhelper.select_domain(domainname2) self.driver.find_element_by_link_text("Users").click() kolabWAPhelper.wait_loading() if self.driver.page_source.find('class="formtitle">Add User<') != -1: self.assertTrue( False, "Domain Admin should not be able to add users because he is not domain admin in his own domain" ) kolabWAPhelper.logout_kolab_wap() # test if ex-domain admin cannot add users def test_ex_domain_admin_without_permission(self): kolabWAPhelper = self.kolabWAPhelper kolabWAPhelper.log( "Running test: test_ex_domain_admin_without_permission") # login Directory Manager kolabWAPhelper.login_kolab_wap("/kolab-webadmin", "cn=Directory Manager", "test") username, emailLogin, password, domainname = kolabWAPhelper.create_domainadmin( ) # now withdraw domainadmin permissions for this domain kolabWAPhelper.unlink_admin_from_domain(username, domainname) kolabWAPhelper.logout_kolab_wap() kolabWAPhelper.login_kolab_wap("/kolab-webadmin", emailLogin, password) # check selected domain is correct currentdomain = kolabWAPhelper.get_selected_domain() self.assertEquals(domainname, currentdomain, "should have selected domain " + domainname) self.driver.find_element_by_link_text("Users").click() kolabWAPhelper.wait_loading() didFail = True try: elem = self.driver.find_element_by_xpath( "//span[@class=\"formtitle\"]") didFail = False except: # all is fine, there should not be a Add User title, but an empty box pass if not didFail: self.assertTrue( False, "ex-domain admin should not be able to create new accounts") kolabWAPhelper.logout_kolab_wap() def tearDown(self): self.kolabWAPhelper.tear_down() self.driver.quit()
class KolabUniqueIDAcrossDomains(unittest.TestCase): def setUp(self): self.kolabWAPhelper = KolabWAPTestHelpers() self.driver = self.kolabWAPhelper.init_driver() def enable_editable_uid(self): driver = self.driver driver.get(driver.current_url) elem = driver.find_element_by_link_text("Settings") elem.click() self.kolabWAPhelper.wait_loading() elem = self.driver.find_element_by_id("searchinput") elem.send_keys("Kolab User") elem.send_keys(Keys.ENTER) self.kolabWAPhelper.wait_loading(initialwait=2) elem = self.driver.find_element_by_xpath( "//table[@id='settingstypelist']/tbody/tr/td") self.assertEquals("Kolab User", elem.text, "Expected to select Kolab User but was " + elem.text) elem.click() self.kolabWAPhelper.wait_loading(initialwait=1) elem = driver.find_element_by_link_text("Attributes") elem.click() elem = driver.find_element_by_xpath( "//tr[@id='attr_table_row_uid']/td[@class='actions']/a[@href='#edit']" ).click() self.kolabWAPhelper.wait_loading(0.5) driver.find_element_by_xpath( "//tr[@id='attr_form_row_value']/td[@class='value']/select/option[@value='auto']" ).click() driver.find_element_by_xpath("//input[@value='Save']").click() elem = driver.find_element_by_xpath( "//input[@value=\"Submit\"]").click() self.kolabWAPhelper.wait_loading() elem = driver.find_element_by_xpath("//div[@id=\"message\"]") self.assertEquals( "Object type updated successfully.", elem.text, "object type was not updated successfully, message: " + elem.text) def test_unique_id_across_domains(self): kolabWAPhelper = self.kolabWAPhelper kolabWAPhelper.log("Running test: test_unique_id_across_domains") # login Directory Manager kolabWAPhelper.login_kolab_wap("/kolab-webadmin", "cn=Directory Manager", "test") # create a user in the primary domain username = "******" + datetime.datetime.now().strftime( "%Y%m%d%H%M%S") + "uid" self.enable_editable_uid() username, emailLogin, password, uid = kolabWAPhelper.create_user( username=username, uid=username) # create a domain and select it domainname = kolabWAPhelper.create_domain() # attempt to create a user with the same username as in the primary domain, should result in a uid with digit 2 attached username, emailLogin, password, uid = kolabWAPhelper.create_user( username=username) self.assertEquals( username + "2", uid, "generate_uid should create a unique id across domains for same surname, expected " + username + "2, but got: " + uid) # attempt to create a user with the same uid as in the primary domain kolabWAPhelper.create_user( username=username, uid=username, expected_message_contains=("Error: The unique identity (UID) " + username + " is already in use.")) # create a new user username = "******" + datetime.datetime.now().strftime("%Y%m%d%H%M%S") username, emailLogin, password, uid = kolabWAPhelper.create_user( username=username) kolabWAPhelper.logout_kolab_wap() # test kolab-saslauthd from the commandline print("testsaslauthd with " + emailLogin) p = subprocess.Popen("/usr/sbin/testsaslauthd -u " + emailLogin + " -p '" + password + "'", shell=True, stdout=subprocess.PIPE) out, err = p.communicate() self.assertTrue('0: OK "Success."' in out, "login did not work, it shows " + out) print("testsaslauthd with " + username) p = subprocess.Popen("/usr/sbin/testsaslauthd -u " + username + " -p '" + password + "'", shell=True, stdout=subprocess.PIPE) out, err = p.communicate() self.assertTrue('0: OK "Success."' in out, "login did not work, it shows " + out) print("testsaslauthd with wrong password") p = subprocess.Popen("/usr/sbin/testsaslauthd -u " + username + " -p '" + password + "fail'", shell=True, stdout=subprocess.PIPE) out, err = p.communicate() self.assertTrue( '0: NO "authentication failed"' in out, "login should not work with wrong password, but it shows " + out) # login user to kolab webadmin with wrong password should fail kolabWAPhelper.login_kolab_wap("/kolab-webadmin", username, password + "fail", "Incorrect username or password!") # login user to kolab webadmin with the email login kolabWAPhelper.login_kolab_wap("/kolab-webadmin", emailLogin, password) kolabWAPhelper.logout_kolab_wap() # login user to kolab webadmin with just the uid kolabWAPhelper.login_kolab_wap("/kolab-webadmin", username, password) kolabWAPhelper.logout_kolab_wap() def tearDown(self): # write current page for debugging purposes self.kolabWAPhelper.log_current_page() self.driver.quit()