From ae311300981f127dc978526f68aaae3f64e3b519 Mon Sep 17 00:00:00 2001 From: Petr Vobornik Date: Wed, 26 Jun 2013 15:18:05 +0200 Subject: Web UI integration tests: Add trust tests https://fedorahosted.org/freeipa/ticket/3744 --- ipatests/test_webui/test_realmdomains.py | 2 +- ipatests/test_webui/test_trust.py | 92 ++++++++++++++++++++++++++++++++ ipatests/test_webui/ui_driver.py | 40 ++++++++++---- 3 files changed, 124 insertions(+), 10 deletions(-) create mode 100644 ipatests/test_webui/test_trust.py (limited to 'ipatests') diff --git a/ipatests/test_webui/test_realmdomains.py b/ipatests/test_webui/test_realmdomains.py index ea898411..7173e13b 100644 --- a/ipatests/test_webui/test_realmdomains.py +++ b/ipatests/test_webui/test_realmdomains.py @@ -41,7 +41,7 @@ class test_realmdomains(UI_driver): self.wait_for_request() # delete - self.delete_multivalued('associateddomain', 'itest.bar') + self.del_multivalued('associateddomain', 'itest.bar') self.facet_button_click('update') self.dialog_button_click('force') self.wait_for_request() diff --git a/ipatests/test_webui/test_trust.py b/ipatests/test_webui/test_trust.py new file mode 100644 index 00000000..e308844d --- /dev/null +++ b/ipatests/test_webui/test_trust.py @@ -0,0 +1,92 @@ +# Authors: +# Petr Vobornik +# +# Copyright (C) 2013 Red Hat +# see file 'COPYING' for use and warranty information +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +""" +Trust tests +""" + +from ipatests.test_webui.ui_driver import UI_driver + +ENTITY = 'trust' +CONFIG_ENTITY = 'trustconfig' + +CONFIG_DATA = { + 'mod': [ + ['combobox', 'ipantfallbackprimarygroup', 'admins'], + ] +} + +CONFIG_DATA2 = { + 'mod': [ + ['combobox', 'ipantfallbackprimarygroup', 'Default SMB Group'] + ] +} + + +class test_trust(UI_driver): + + def __init__(self, *args, **kwargs): + super(test_trust, self).__init__(args, kwargs) + + if not self.has_trusts(): + self.skip('Trusts not configured') + + def get_data(self): + + domain = self.config.get('ad_domain') + admin = self.config.get('ad_admin') + psw = self.config.get('ad_password') + + data = { + 'pkey': domain, + 'add': [ + ('textbox', 'realm_server', domain), + ('textbox', 'realm_admin', admin), + ('password', 'realm_passwd', psw), + ], + 'mod': [ + ('multivalued', 'ipantsidblacklistincoming', [ + ('del', 'S-1-5-18'), + ('add', 'S-1-5-21'), + ]), + ('multivalued', 'ipantsidblacklistoutgoing', [ + ('del', 'S-1-5-18'), + ('add', 'S-1-5-21'), + ]), + ], + } + + return data + + def test_crud(self): + """ + Basic basic CRUD: trust + + Test establishing trust by using Windows admin credentials + """ + self.init_app() + data = self.get_data() + self.basic_crud(ENTITY, data) + + def test_config_mod(self): + self.init_app() + self.navigate_to_entity(CONFIG_ENTITY) + + self.mod_record(CONFIG_ENTITY, CONFIG_DATA) + self.mod_record(CONFIG_ENTITY, CONFIG_DATA2) diff --git a/ipatests/test_webui/ui_driver.py b/ipatests/test_webui/ui_driver.py index e7551dea..4a0ca1cd 100644 --- a/ipatests/test_webui/ui_driver.py +++ b/ipatests/test_webui/ui_driver.py @@ -86,6 +86,7 @@ class UI_driver(object): raise nose.SkipTest('Selenium not installed') def __init__(self, driver=None, config=None): + self.request_timeout = 30 self.driver = driver self.config = config if not config: @@ -261,7 +262,7 @@ class UI_driver(object): for i in range(n): self.wait(implicit) - WebDriverWait(self.driver, 10).until_not(lambda d: runner.has_active_request()) + WebDriverWait(self.driver, self.request_timeout).until_not(lambda d: runner.has_active_request()) self.wait() self.wait(d) @@ -586,7 +587,7 @@ class UI_driver(object): last = inputs[-1] last.send_keys(value) - def delete_multivalued(self, name, value, parent=None): + def del_multivalued(self, name, value, parent=None): if not parent: parent = self.get_form() s = "div[name='%s'].multivalued-widget" % name @@ -604,7 +605,19 @@ class UI_driver(object): self.wait() clicked = True - assert clicked, 'Value was not removed' + assert clicked, 'Value was not removed: %s' % value + + def fill_multivalued(self, name, instructions, parent=None): + """ + Add or delete a value from multivalued field + """ + for instruction in instructions: + t = instruction[0] + value = instruction[1] + if t == 'add': + self.add_multivalued(name, value, parent) + else: + self.del_multivalued(name, value, parent) def check_option(self, name, value=None, parent=None): @@ -661,7 +674,7 @@ class UI_driver(object): self.wait() - def get_undo_button(self, field, parent): + def get_undo_buttons(self, field, parent): """ Get field undo button """ @@ -669,8 +682,8 @@ class UI_driver(object): if not parent: parent = self.get_form() s = "div[name='%s'].field span.undo" % (field) - undo = self.find(s, By.CSS_SELECTOR, parent, strict=True) - return undo + undos = self.find(s, By.CSS_SELECTOR, parent, strict=True, all=True) + return undos def get_rows(self, parent=None): """ @@ -821,6 +834,8 @@ class UI_driver(object): self.add_table_record(key, val, parent) elif type == 'add_table_association': self.add_table_associations(key, val, parent) + elif type == 'multivalued': + self.fill_multivalued(key, val, parent) elif type == 'table': self.select_record(val, parent, key) self.wait() @@ -1266,9 +1281,16 @@ class UI_driver(object): """ Assert that undo button is or is not visible """ - undo = self.get_undo_button(field, parent) - state = undo.is_displayed() - assert state == visible, 'Undo button has invalid state. Field: %s' % field + undos = self.get_undo_buttons(field, parent) + state = False + for undo in undos: + if undo.is_displayed(): + state = True + break + if visible: + assert state, "Undo button not visible. Field: %s" % field + else: + assert not state, "Undo button visible. Field: %s" % field def assert_visible(self, selector, parent=None, negative=False): """ -- cgit