Web UI integration tests: Add trust tests

https://fedorahosted.org/freeipa/ticket/3744
This commit is contained in:
Petr Vobornik
2013-06-26 15:18:05 +02:00
parent 6a0aabede5
commit ae31130098
3 changed files with 124 additions and 10 deletions

View File

@@ -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()

View File

@@ -0,0 +1,92 @@
# Authors:
# Petr Vobornik <pvoborni@redhat.com>
#
# 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 <http://www.gnu.org/licenses/>.
"""
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)

View File

@@ -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):
"""