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.
This commit is contained in:
Endi S. Dewata 2011-06-01 13:52:38 -05:00 committed by Adam Young
parent 7486a33221
commit 34c5d996d7
9 changed files with 612 additions and 25 deletions

View File

@ -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() {
$('<p/>', {
'text': IPA.messages.search.delete_confirm
}).appendTo(that.dialog);
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
});
command.execute();
};
return that;
};

View File

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

View File

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

View File

@ -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&amp;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>

View File

@ -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&amp;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=&gt;&gt;</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=&gt;&gt;</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>

View File

@ -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&amp;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>

View File

@ -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&amp;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>

View File

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

View File

@ -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&amp;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>