diff options
author | Endi S. Dewata <edewata@redhat.com> | 2011-06-01 13:52:38 -0500 |
---|---|---|
committer | Adam Young <ayoung@redhat.com> | 2011-06-02 20:09:07 -0400 |
commit | 34c5d996d760abeaede782253931ed7bc36320cc (patch) | |
tree | 27d4556fbafab47fb40f0f893d28f784d7cf6410 | |
parent | 7486a332211ed13318c0a689657cb4ff7e7d25a3 (diff) | |
download | freeipa-34c5d996d760abeaede782253931ed7bc36320cc.tar.gz freeipa-34c5d996d760abeaede782253931ed7bc36320cc.tar.xz freeipa-34c5d996d760abeaede782253931ed7bc36320cc.zip |
Temporary fix for indirect member tabs.
Since the group-show command doesn't return indirect members, the tabs
for group's indirect members have been reverted to call user-find with
the --in-groups parameter to get the entries.
However, this is only a temporary solution since the user-find command
returns both direct and indirect members (ticket #1273).
The Selenium test for groups has been modified to test nested groups
and verify indirect members. The verification currently will fail due
to the above issue.
-rw-r--r-- | install/ui/associate.js | 67 | ||||
-rw-r--r-- | install/ui/entity.js | 10 | ||||
-rw-r--r-- | install/ui/search.js | 14 | ||||
-rw-r--r-- | install/ui/test/functional/group-add-nested-groups.html | 91 | ||||
-rw-r--r-- | install/ui/test/functional/group-add-nested-member-groups.html | 153 | ||||
-rw-r--r-- | install/ui/test/functional/group-del-nested-groups.html | 71 | ||||
-rw-r--r-- | install/ui/test/functional/group-remove-nested-member-groups.html | 133 | ||||
-rw-r--r-- | install/ui/test/functional/group-suite.html | 5 | ||||
-rw-r--r-- | install/ui/test/functional/group-verify-indirect-member-groups.html | 93 |
9 files changed, 612 insertions, 25 deletions
diff --git a/install/ui/associate.js b/install/ui/associate.js index eb4a5a056..f7ac1505e 100644 --- a/install/ui/associate.js +++ b/install/ui/associate.js @@ -707,7 +707,7 @@ IPA.association_facet = function (spec) { that.columns = $.ordered_map(); that.adder_columns = $.ordered_map(); - that.page_length = 20; + that.page_length = spec.page_length === undefined ? 20 : spec.page_length; that.get_column = function(name) { return that.columns.get(name); @@ -1107,21 +1107,62 @@ IPA.association_facet = function (spec) { return that; }; +IPA.indirect_association_facet = function (spec) { -IPA.deleter_dialog_setup = function () { + spec = spec || {}; - var that = this; + spec.page_length = 0; + spec.read_only = true; - var ul = $('<ul/>'); - ul.appendTo(that.dialog); + var that = IPA.association_facet(spec); - for (var i=0; i<that.values.length; i++) { - $('<li/>',{ - 'text': that.values[i] - }).appendTo(ul); - } + that.refresh = function() { + + function on_success(data, text_status, xhr) { + + that.table.empty(); + + var count = data.result.count; + if (count === 0) { + that.table.summary.text(data.result.summary); + return; + } + + var results = data.result.result; + for (var i=0; i<results.length; i++) { + var record = results[i]; + that.table.add_record(record); + } + + if (data.result.truncated) { + var message = IPA.messages.search.truncated; + message = message.replace('${counter}', data.result.count); + that.table.summary.text(message); + } else { + that.table.summary.text(data.result.summary); + } + } + + var options = { + 'all': true + }; + + var pkey = $.bbq.getState(that.entity_name+'-pkey'); + + /* TODO: make a general solution to generate this value */ + var relationship_filter = 'in_' + that.entity_name; + options[relationship_filter] = pkey; + + var command = IPA.command({ + entity: that.other_entity, + method: 'find', + options: options, + on_success: on_success, + on_error: that.on_error + }); - $('<p/>', { - 'text': IPA.messages.search.delete_confirm - }).appendTo(that.dialog); + command.execute(); + }; + + return that; }; diff --git a/install/ui/entity.js b/install/ui/entity.js index 5df56b1a6..da5b3ea60 100644 --- a/install/ui/entity.js +++ b/install/ui/entity.js @@ -818,7 +818,15 @@ IPA.entity_builder = function(){ } } - var factory = spec.factory || IPA.association_facet; + var factory = spec.factory; + if (!factory) { + if (spec.facet_group == 'memberindirect') { + factory = IPA.indirect_association_facet; + } else { + factory = IPA.association_facet; + } + } + facet = factory(spec); entity.add_facet(facet); diff --git a/install/ui/search.js b/install/ui/search.js index b8fa26017..33eb8c93c 100644 --- a/install/ui/search.js +++ b/install/ui/search.js @@ -298,26 +298,18 @@ IPA.search_facet = function(spec) { that.table.add_record(record); } - var summary = $('span[name=summary]', that.table.tfoot); if (data.result.truncated) { var message = IPA.messages.search.truncated; message = message.replace('${counter}', data.result.count); - summary.text(message); + that.table.summary.text(message); } else { - summary.text(data.result.summary); + that.table.summary.text(data.result.summary); } that.filter.focus(); that.select_changed(); } - function on_error(xhr, text_status, error_thrown) { - var summary = $('span[name=summary]', that.table.tfoot).empty(); - summary.append('<p>Error: '+error_thrown.name+'</p>'); - summary.append('<p>'+error_thrown.message+'</p>'); - } - - var filter = []; var current_entity = entity; filter.unshift($.bbq.getState(current_entity.name+'-filter')); @@ -336,7 +328,7 @@ IPA.search_facet = function(spec) { all: that.search_all }, on_success: on_success, - on_error: on_error + on_error: that.on_error }); command.execute(); diff --git a/install/ui/test/functional/group-add-nested-groups.html b/install/ui/test/functional/group-add-nested-groups.html new file mode 100644 index 000000000..7d9618693 --- /dev/null +++ b/install/ui/test/functional/group-add-nested-groups.html @@ -0,0 +1,91 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> +<head profile="http://selenium-ide.openqa.org/profiles/test-case"> +<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> +<link rel="selenium.base" href="https://localhost/" /> +<title>Add Group</title> +</head> +<body> +<table cellpadding="1" cellspacing="1" border="1"> +<thead> +<tr><td rowspan="1" colspan="3">Add Group</td></tr> +</thead><tbody> +<tr> + <td>open</td> + <td>/ipa/ui/#navigation=identity&identity=group</td> + <td></td> +</tr> +<tr> + <td>waitForNotVisible</td> + <td>//span[@id='header-network-activity-indicator']</td> + <td></td> +</tr> +<tr> + <td>verifyElementNotPresent</td> + <td>css=.entity[name='group'] .facet[name='search'] input[value='testgroup2']</td> + <td></td> +</tr> +<tr> + <td>verifyElementNotPresent</td> + <td>css=.entity[name='group'] .facet[name='search'] input[value='testgroup3']</td> + <td></td> +</tr> +<tr> + <td>click</td> + <td>link=Add</td> + <td></td> +</tr> +<tr> + <td>type</td> + <td>cn</td> + <td>testgroup2</td> +</tr> +<tr> + <td>type</td> + <td>description</td> + <td>Test Group 2</td> +</tr> +<tr> + <td>click</td> + <td>//button[2]</td> + <td></td> +</tr> +<tr> + <td>waitForNotVisible</td> + <td>//span[@id='header-network-activity-indicator']</td> + <td></td> +</tr> +<tr> + <td>type</td> + <td>cn</td> + <td>testgroup3</td> +</tr> +<tr> + <td>type</td> + <td>description</td> + <td>Test Group 3</td> +</tr> +<tr> + <td>click</td> + <td>//button[1]</td> + <td></td> +</tr> +<tr> + <td>waitForNotVisible</td> + <td>//span[@id='header-network-activity-indicator']</td> + <td></td> +</tr> +<tr> + <td>verifyElementPresent</td> + <td>css=.entity[name='group'] .facet[name='search'] input[value='testgroup2']</td> + <td></td> +</tr> +<tr> + <td>verifyElementPresent</td> + <td>css=.entity[name='group'] .facet[name='search'] input[value='testgroup3']</td> + <td></td> +</tr> +</tbody></table> +</body> +</html> diff --git a/install/ui/test/functional/group-add-nested-member-groups.html b/install/ui/test/functional/group-add-nested-member-groups.html new file mode 100644 index 000000000..99b5ff46d --- /dev/null +++ b/install/ui/test/functional/group-add-nested-member-groups.html @@ -0,0 +1,153 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> +<head profile="http://selenium-ide.openqa.org/profiles/test-case"> +<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> +<link rel="selenium.base" href="https://localhost/" /> +<title>Add Member User</title> +</head> +<body> +<table cellpadding="1" cellspacing="1" border="1"> +<thead> +<tr><td rowspan="1" colspan="3">Add Member User</td></tr> +</thead><tbody> +<tr> + <td>open</td> + <td>/ipa/ui/#navigation=identity&identity=group</td> + <td></td> +</tr> +<tr> + <td>waitForNotVisible</td> + <td>//span[@id='header-network-activity-indicator']</td> + <td></td> +</tr> +<tr> + <td>verifyElementPresent</td> + <td>css=.entity[name='group'] .facet[name='search'] input[value='testgroup']</td> + <td></td> +</tr> +<!--Add testgroup2 into testgroup--> +<tr> + <td>click</td> + <td>link=testgroup</td> + <td></td> +</tr> +<tr> + <td>waitForNotVisible</td> + <td>//span[@id='header-network-activity-indicator']</td> + <td></td> +</tr> +<tr> + <td>click</td> + <td>member_group</td> + <td></td> +</tr> +<tr> + <td>waitForNotVisible</td> + <td>//span[@id='header-network-activity-indicator']</td> + <td></td> +</tr> +<tr> + <td>click</td> + <td>css=.entity[name='group'] .facet[name='member_group'] a[title='Enroll']</td> + <td></td> +</tr> +<tr> + <td>waitForNotVisible</td> + <td>//span[@id='header-network-activity-indicator']</td> + <td></td> +</tr> +<tr> + <td>click</td> + <td>css=.ui-dialog div[name='available'] input[value='testgroup2']</td> + <td></td> +</tr> +<tr> + <td>click</td> + <td>link=>></td> + <td></td> +</tr> +<tr> + <td>click</td> + <td>//button[@type='button']</td> + <td></td> +</tr> +<tr> + <td>waitForNotVisible</td> + <td>//span[@id='header-network-activity-indicator']</td> + <td></td> +</tr> +<tr> + <td>verifyElementPresent</td> + <td>css=.entity[name='group'] .facet[name='member_group'] input[value='testgroup2']</td> + <td></td> +</tr> +<tr> + <td>click</td> + <td>css=.entity[name='group'] .back-link</td> + <td></td> +</tr> +<tr> + <td>waitForNotVisible</td> + <td>//span[@id='header-network-activity-indicator']</td> + <td></td> +</tr> +<!--Add testgroup3 into testgroup2--> +<tr> + <td>click</td> + <td>link=testgroup2</td> + <td></td> +</tr> +<tr> + <td>waitForNotVisible</td> + <td>//span[@id='header-network-activity-indicator']</td> + <td></td> +</tr> +<tr> + <td>click</td> + <td>member_group</td> + <td></td> +</tr> +<tr> + <td>waitForNotVisible</td> + <td>//span[@id='header-network-activity-indicator']</td> + <td></td> +</tr> +<tr> + <td>click</td> + <td>css=.entity[name='group'] .facet[name='member_group'] a[title='Enroll']</td> + <td></td> +</tr> +<tr> + <td>waitForNotVisible</td> + <td>//span[@id='header-network-activity-indicator']</td> + <td></td> +</tr> +<tr> + <td>click</td> + <td>css=.ui-dialog div[name='available'] input[value='testgroup3']</td> + <td></td> +</tr> +<tr> + <td>click</td> + <td>link=>></td> + <td></td> +</tr> +<tr> + <td>click</td> + <td>//button[@type='button']</td> + <td></td> +</tr> +<tr> + <td>waitForNotVisible</td> + <td>//span[@id='header-network-activity-indicator']</td> + <td></td> +</tr> +<tr> + <td>verifyElementPresent</td> + <td>css=.entity[name='group'] .facet[name='member_group'] input[value='testgroup3']</td> + <td></td> +</tr> +</tbody></table> +</body> +</html> diff --git a/install/ui/test/functional/group-del-nested-groups.html b/install/ui/test/functional/group-del-nested-groups.html new file mode 100644 index 000000000..109908f63 --- /dev/null +++ b/install/ui/test/functional/group-del-nested-groups.html @@ -0,0 +1,71 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> +<head profile="http://selenium-ide.openqa.org/profiles/test-case"> +<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> +<link rel="selenium.base" href="https://localhost/" /> +<title>Delete Group</title> +</head> +<body> +<table cellpadding="1" cellspacing="1" border="1"> +<thead> +<tr><td rowspan="1" colspan="3">Delete Group</td></tr> +</thead><tbody> +<tr> + <td>open</td> + <td>/ipa/ui/#navigation=identity&identity=group</td> + <td></td> +</tr> +<tr> + <td>waitForNotVisible</td> + <td>//span[@id='header-network-activity-indicator']</td> + <td></td> +</tr> +<tr> + <td>verifyElementPresent</td> + <td>css=.entity[name='group'] .facet[name='search'] input[value='testgroup2']</td> + <td></td> +</tr> +<tr> + <td>verifyElementPresent</td> + <td>css=.entity[name='group'] .facet[name='search'] input[value='testgroup3']</td> + <td></td> +</tr> +<tr> + <td>click</td> + <td>//input[@name='select' and @value='testgroup2']</td> + <td></td> +</tr> +<tr> + <td>click</td> + <td>//input[@name='select' and @value='testgroup3']</td> + <td></td> +</tr> +<tr> + <td>click</td> + <td>link=Delete</td> + <td></td> +</tr> +<tr> + <td>click</td> + <td>//button[@type='button']</td> + <td></td> +</tr> +<tr> + <td>waitForNotVisible</td> + <td>//span[@id='header-network-activity-indicator']</td> + <td></td> +</tr> +<tr> + <td>verifyElementNotPresent</td> + <td>css=.entity[name='group'] .facet[name='search'] input[value='testgroup2']</td> + <td></td> +</tr> +<tr> + <td>verifyElementNotPresent</td> + <td>css=.entity[name='group'] .facet[name='search'] input[value='testgroup3']</td> + <td></td> +</tr> +</tbody></table> +</body> +</html> diff --git a/install/ui/test/functional/group-remove-nested-member-groups.html b/install/ui/test/functional/group-remove-nested-member-groups.html new file mode 100644 index 000000000..3f57bd7ce --- /dev/null +++ b/install/ui/test/functional/group-remove-nested-member-groups.html @@ -0,0 +1,133 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> +<head profile="http://selenium-ide.openqa.org/profiles/test-case"> +<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> +<link rel="selenium.base" href="https://localhost/" /> +<title>Delete Member User</title> +</head> +<body> +<table cellpadding="1" cellspacing="1" border="1"> +<thead> +<tr><td rowspan="1" colspan="3">Delete Member User</td></tr> +</thead><tbody> +<tr> + <td>open</td> + <td>/ipa/ui/#navigation=identity&identity=group</td> + <td></td> +</tr> +<tr> + <td>waitForNotVisible</td> + <td>//span[@id='header-network-activity-indicator']</td> + <td></td> +</tr> +<tr> + <td>verifyElementPresent</td> + <td>css=.entity[name='group'] .facet[name='search'] input[value='testgroup']</td> + <td></td> +</tr> +<!--Delete testgroup3 from testgroup2--> +<tr> + <td>click</td> + <td>link=testgroup2</td> + <td></td> +</tr> +<tr> + <td>waitForNotVisible</td> + <td>//span[@id='header-network-activity-indicator']</td> + <td></td> +</tr> +<tr> + <td>click</td> + <td>member_group</td> + <td></td> +</tr> +<tr> + <td>waitForNotVisible</td> + <td>//span[@id='header-network-activity-indicator']</td> + <td></td> +</tr> +<tr> + <td>click</td> + <td>css=.entity[name='group'] .facet[name='member_group'] input[value='testgroup3']</td> + <td></td> +</tr> +<tr> + <td>click</td> + <td>css=.entity[name='group'] .facet[name='member_group'] a[title='Delete']</td> + <td></td> +</tr> +<tr> + <td>click</td> + <td>//button[1]</td> + <td></td> +</tr> +<tr> + <td>waitForNotVisible</td> + <td>//span[@id='header-network-activity-indicator']</td> + <td></td> +</tr> +<tr> + <td>verifyElementNotPresent</td> + <td>css=.entity[name='group'] .facet[name='member_group'] input[value='testgroup3']</td> + <td></td> +</tr> +<tr> + <td>click</td> + <td>css=.entity[name='group'] .back-link</td> + <td></td> +</tr> +<tr> + <td>waitForNotVisible</td> + <td>//span[@id='header-network-activity-indicator']</td> + <td></td> +</tr> +<!--Delete testgroup2 from testgroup--> +<tr> + <td>click</td> + <td>link=testgroup</td> + <td></td> +</tr> +<tr> + <td>waitForNotVisible</td> + <td>//span[@id='header-network-activity-indicator']</td> + <td></td> +</tr> +<tr> + <td>click</td> + <td>member_group</td> + <td></td> +</tr> +<tr> + <td>waitForNotVisible</td> + <td>//span[@id='header-network-activity-indicator']</td> + <td></td> +</tr> +<tr> + <td>click</td> + <td>css=.entity[name='group'] .facet[name='member_group'] input[value='testgroup2']</td> + <td></td> +</tr> +<tr> + <td>click</td> + <td>css=.entity[name='group'] .facet[name='member_group'] a[title='Delete']</td> + <td></td> +</tr> +<tr> + <td>click</td> + <td>//button[1]</td> + <td></td> +</tr> +<tr> + <td>waitForNotVisible</td> + <td>//span[@id='header-network-activity-indicator']</td> + <td></td> +</tr> +<tr> + <td>verifyElementNotPresent</td> + <td>css=.entity[name='group'] .facet[name='member_group'] input[value='testgroup2']</td> + <td></td> +</tr> +</tbody></table> +</body> +</html> diff --git a/install/ui/test/functional/group-suite.html b/install/ui/test/functional/group-suite.html index 493d90911..eba014c78 100644 --- a/install/ui/test/functional/group-suite.html +++ b/install/ui/test/functional/group-suite.html @@ -15,6 +15,11 @@ <tr><td><a href="group-add-member-user.html">Add Member User</a></td></tr> <tr><td><a href="group-remove-member-user.html">Delete Member User</a></td></tr> <tr><td><a href="user-del.html">Delete User</a></td></tr> +<tr><td><a href="group-add-nested-groups.html">Add Nested Groups</a></td></tr> +<tr><td><a href="group-add-nested-member-groups.html">Add Nested Member Groups</a></td></tr> +<tr><td><a href="group-verify-indirect-member-groups.html">Verify Indirect Member Goups</a></td></tr> +<tr><td><a href="group-remove-nested-member-groups.html">Delete Nested Member Groups</a></td></tr> +<tr><td><a href="group-del-nested-groups.html">Delete Nested Groups</a></td></tr> <tr><td><a href="group-del.html">Delete Group</a></td></tr> </tbody></table> </body> diff --git a/install/ui/test/functional/group-verify-indirect-member-groups.html b/install/ui/test/functional/group-verify-indirect-member-groups.html new file mode 100644 index 000000000..a7a9d2577 --- /dev/null +++ b/install/ui/test/functional/group-verify-indirect-member-groups.html @@ -0,0 +1,93 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> +<head profile="http://selenium-ide.openqa.org/profiles/test-case"> +<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> +<link rel="selenium.base" href="https://localhost/" /> +<title>Add Member User</title> +</head> +<body> +<table cellpadding="1" cellspacing="1" border="1"> +<thead> +<tr><td rowspan="1" colspan="3">Add Member User</td></tr> +</thead><tbody> +<tr> + <td>open</td> + <td>/ipa/ui/#navigation=identity&identity=group</td> + <td></td> +</tr> +<tr> + <td>waitForNotVisible</td> + <td>//span[@id='header-network-activity-indicator']</td> + <td></td> +</tr> +<!--Verify indirect members in testgroup--> +<tr> + <td>click</td> + <td>link=testgroup</td> + <td></td> +</tr> +<tr> + <td>waitForNotVisible</td> + <td>//span[@id='header-network-activity-indicator']</td> + <td></td> +</tr> +<tr> + <td>click</td> + <td>memberindirect_group</td> + <td></td> +</tr> +<tr> + <td>waitForNotVisible</td> + <td>//span[@id='header-network-activity-indicator']</td> + <td></td> +</tr> +<tr> + <td>verifyElementNotPresent</td> + <td>css=.entity[name='group'] .facet[name='memberindirect_group'] input[value='testgroup2']</td> + <td></td> +</tr> +<tr> + <td>verifyElementPresent</td> + <td>css=.entity[name='group'] .facet[name='memberindirect_group'] input[value='testgroup3']</td> + <td></td> +</tr> +<tr> + <td>click</td> + <td>css=.entity[name='group'] .back-link</td> + <td></td> +</tr> +<tr> + <td>waitForNotVisible</td> + <td>//span[@id='header-network-activity-indicator']</td> + <td></td> +</tr> +<!--Verify indirect members in testgroup2--> +<tr> + <td>click</td> + <td>link=testgroup2</td> + <td></td> +</tr> +<tr> + <td>waitForNotVisible</td> + <td>//span[@id='header-network-activity-indicator']</td> + <td></td> +</tr> +<tr> + <td>click</td> + <td>memberindirect_group</td> + <td></td> +</tr> +<tr> + <td>waitForNotVisible</td> + <td>//span[@id='header-network-activity-indicator']</td> + <td></td> +</tr> +<tr> + <td>verifyElementNotPresent</td> + <td>css=.entity[name='group'] .facet[name='memberindirect_group'] input[value='testgroup3']</td> + <td></td> +</tr> +</tbody></table> +</body> +</html> |