summaryrefslogtreecommitdiffstats
path: root/qa/t/webservice_user_get.t
diff options
context:
space:
mode:
Diffstat (limited to 'qa/t/webservice_user_get.t')
-rw-r--r--qa/t/webservice_user_get.t404
1 files changed, 228 insertions, 176 deletions
diff --git a/qa/t/webservice_user_get.t b/qa/t/webservice_user_get.t
index 4a7f74f78..1437646bb 100644
--- a/qa/t/webservice_user_get.t
+++ b/qa/t/webservice_user_get.t
@@ -17,202 +17,254 @@ use QA::Tests qw(PRIVATE_BUG_USER);
use Test::More tests => 330;
our ($config, @clients) = get_rpc_clients();
-my $get_user = $config->{'unprivileged_user_login'};
+my $get_user = $config->{'unprivileged_user_login'};
my $canconfirm_user = $config->{'canconfirm_user_login'};
-my $priv_user = $config->{PRIVATE_BUG_USER . '_user_login'};
-my $disabled = $config->{'disabled_user_login'};
-my $disabled_match = substr($disabled, 0, length($disabled) - 1);
+my $priv_user = $config->{PRIVATE_BUG_USER . '_user_login'};
+my $disabled = $config->{'disabled_user_login'};
+my $disabled_match = substr($disabled, 0, length($disabled) - 1);
# These are the basic tests. There are tests for include_fields
# and exclude_field below.
my @tests = (
- { args => { names => [$get_user] },
- test => "Logged-out user can get unprivileged user by name"
- },
- { args => { match => [$get_user] },
- test => 'Logged-out user cannot use the match argument',
- error => 'Logged-out users cannot use',
- },
- { args => { ids => [1] },
- test => 'Logged-out users cannot use the "ids" argument',
- error => 'Logged-out users cannot use',
- },
+ {
+ args => {names => [$get_user]},
+ test => "Logged-out user can get unprivileged user by name"
+ },
+ {
+ args => {match => [$get_user]},
+ test => 'Logged-out user cannot use the match argument',
+ error => 'Logged-out users cannot use',
+ },
+ {
+ args => {ids => [1]},
+ test => 'Logged-out users cannot use the "ids" argument',
+ error => 'Logged-out users cannot use',
+ },
- # match & names
- { user => 'unprivileged',
- args => { names => [$get_user] },
- test => "Unprivileged user can get himself",
- },
- { user => 'unprivileged',
- args => { match => [$get_user] },
- test => 'Logged-in user can use the match argument',
- },
- { user => 'unprivileged',
- args => { match => [$get_user], names => [$get_user] },
- test => 'Specifying the same thing in "match" and "names"',
- },
+ # match & names
+ {
+ user => 'unprivileged',
+ args => {names => [$get_user]},
+ test => "Unprivileged user can get himself",
+ },
+ {
+ user => 'unprivileged',
+ args => {match => [$get_user]},
+ test => 'Logged-in user can use the match argument',
+ },
+ {
+ user => 'unprivileged',
+ args => {match => [$get_user], names => [$get_user]},
+ test => 'Specifying the same thing in "match" and "names"',
+ },
- # include_disabled
- { user => 'unprivileged',
- args => { match => [$get_user, $disabled_match] },
- test => 'Disabled users are not normally returned'
- },
- { user => 'unprivileged',
- args => { match => [$disabled_match], include_disabled => 1 },
- test => 'Specifying include_disabled returns disabled users'
- },
- { user => 'unprivileged',
- args => { match => [$disabled] },
- test => 'Full match on a disabled user returns that user',
- },
+ # include_disabled
+ {
+ user => 'unprivileged',
+ args => {match => [$get_user, $disabled_match]},
+ test => 'Disabled users are not normally returned'
+ },
+ {
+ user => 'unprivileged',
+ args => {match => [$disabled_match], include_disabled => 1},
+ test => 'Specifying include_disabled returns disabled users'
+ },
+ {
+ user => 'unprivileged',
+ args => {match => [$disabled]},
+ test => 'Full match on a disabled user returns that user',
+ },
- # groups and group_ids
- { args => { groups => ['QA-Selenium-TEST'] },
- test => 'Specifying just groups fails',
- error => 'one of the following parameters',
- },
- { args => { group_ids => [1] },
- test => 'Specifying just group ids fails',
- error => 'one of the following parameters',
- },
- { args => { names => [$get_user, $priv_user], groups => ['QA-Selenium-TEST'] },
- test => 'Limiting the return value to a group while being logged out fails',
- error => 'The group you specified, QA-Selenium-TEST, is not valid here',
- },
- { user => 'unprivileged',
- args => { names => [$get_user, $priv_user], groups => ['missing_group'] },
- test => 'Limiting the return value to a group which does not exist fails',
- error => 'The group you specified, missing_group, is not valid here',
- },
- { user => 'unprivileged',
- args => { names => [$get_user, $priv_user], groups => ['QA-Selenium-TEST'] },
- test => 'Limiting the return value to a group you do not belong to fails',
- error => 'The group you specified, QA-Selenium-TEST, is not valid here',
- },
- { user => 'editbugs',
- args => { names => [$get_user, $priv_user], groups => ['Master', 'editbugs'] },
- test => 'Limiting the return value to some groups you do not belong to fails',
- error => 'The group you specified, Master, is not valid here',
- },
- { user => 'admin',
- args => { names => [$canconfirm_user], groups => ['canconfirm', 'editbugs'] },
- test => 'Limiting the return value to groups you belong to',
- },
+ # groups and group_ids
+ {
+ args => {groups => ['QA-Selenium-TEST']},
+ test => 'Specifying just groups fails',
+ error => 'one of the following parameters',
+ },
+ {
+ args => {group_ids => [1]},
+ test => 'Specifying just group ids fails',
+ error => 'one of the following parameters',
+ },
+ {
+ args => {names => [$get_user, $priv_user], groups => ['QA-Selenium-TEST']},
+ test => 'Limiting the return value to a group while being logged out fails',
+ error => 'The group you specified, QA-Selenium-TEST, is not valid here',
+ },
+ {
+ user => 'unprivileged',
+ args => {names => [$get_user, $priv_user], groups => ['missing_group']},
+ test => 'Limiting the return value to a group which does not exist fails',
+ error => 'The group you specified, missing_group, is not valid here',
+ },
+ {
+ user => 'unprivileged',
+ args => {names => [$get_user, $priv_user], groups => ['QA-Selenium-TEST']},
+ test => 'Limiting the return value to a group you do not belong to fails',
+ error => 'The group you specified, QA-Selenium-TEST, is not valid here',
+ },
+ {
+ user => 'editbugs',
+ args => {names => [$get_user, $priv_user], groups => ['Master', 'editbugs']},
+ test => 'Limiting the return value to some groups you do not belong to fails',
+ error => 'The group you specified, Master, is not valid here',
+ },
+ {
+ user => 'admin',
+ args => {names => [$canconfirm_user], groups => ['canconfirm', 'editbugs']},
+ test => 'Limiting the return value to groups you belong to',
+ },
- # groups returned
- { user => 'admin',
- args => { names => [$get_user] },
- test => 'Admin can get user',
- },
- { user => 'admin',
- args => { names => [$canconfirm_user] },
- test => 'Admin can get user',
- },
- { user => 'canconfirm',
- args => { names => [$canconfirm_user] },
- test => 'Privileged user can get himself',
- },
- { user => 'editbugs',
- args => { names => [$canconfirm_user] },
- test => 'Privileged user can get another user',
- },
+ # groups returned
+ {
+ user => 'admin',
+ args => {names => [$get_user]},
+ test => 'Admin can get user',
+ },
+ {
+ user => 'admin',
+ args => {names => [$canconfirm_user]},
+ test => 'Admin can get user',
+ },
+ {
+ user => 'canconfirm',
+ args => {names => [$canconfirm_user]},
+ test => 'Privileged user can get himself',
+ },
+ {
+ user => 'editbugs',
+ args => {names => [$canconfirm_user]},
+ test => 'Privileged user can get another user',
+ },
);
sub post_success {
- my ($call, $t) = @_;
+ my ($call, $t) = @_;
- my $result = $call->result;
- is(scalar @{ $result->{users} }, 1, "Got exactly one user");
- my $item = $result->{users}->[0];
- my $user = $t->{user} || '';
+ my $result = $call->result;
+ is(scalar @{$result->{users}}, 1, "Got exactly one user");
+ my $item = $result->{users}->[0];
+ my $user = $t->{user} || '';
- if ($user eq 'admin') {
- ok(exists $item->{email} && exists $item->{can_login}
- && exists $item->{email_enabled} && exists $item->{login_denied_text},
- 'Admin correctly gets all user fields');
- }
- elsif ($user) {
- ok(exists $item->{email} && exists $item->{can_login},
- 'Logged-in user correctly gets email and can_login');
- ok(!exists $item->{email_enabled}
- && !exists $item->{login_denied_text},
- "Non-admin user doesn't get email_enabled and login_denied_text");
- }
- else {
- my @item_keys = sort keys %$item;
- is_deeply(\@item_keys, ['id', 'name', 'real_name'],
- 'Only id, name, and real_name are returned to logged-out users');
- return;
- }
+ if ($user eq 'admin') {
+ ok(
+ exists $item->{email}
+ && exists $item->{can_login}
+ && exists $item->{email_enabled}
+ && exists $item->{login_denied_text},
+ 'Admin correctly gets all user fields'
+ );
+ }
+ elsif ($user) {
+ ok(
+ exists $item->{email} && exists $item->{can_login},
+ 'Logged-in user correctly gets email and can_login'
+ );
+ ok(
+ !exists $item->{email_enabled} && !exists $item->{login_denied_text},
+ "Non-admin user doesn't get email_enabled and login_denied_text"
+ );
+ }
+ else {
+ my @item_keys = sort keys %$item;
+ is_deeply(
+ \@item_keys,
+ ['id', 'name', 'real_name'],
+ 'Only id, name, and real_name are returned to logged-out users'
+ );
+ return;
+ }
- my $username = $config->{"${user}_user_login"};
- # FIXME: We have no way to create a saved search or a saved report from
- # the WebService, so we cannot test that the correct data is returned
- # if the user is accessing his own account.
- if ($username eq $item->{name}) {
- ok(exists $item->{saved_searches},
- 'Users can get the list of saved searches and reports for their own account');
- }
- else {
- ok(!exists $item->{saved_searches},
- "Users cannot get the list of saved searches and reports from someone else's acccount");
- }
+ my $username = $config->{"${user}_user_login"};
+
+ # FIXME: We have no way to create a saved search or a saved report from
+ # the WebService, so we cannot test that the correct data is returned
+ # if the user is accessing his own account.
+ if ($username eq $item->{name}) {
+ ok(exists $item->{saved_searches},
+ 'Users can get the list of saved searches and reports for their own account');
+ }
+ else {
+ ok(
+ !exists $item->{saved_searches},
+ "Users cannot get the list of saved searches and reports from someone else's acccount"
+ );
+ }
- my @groups = map { $_->{name} } @{$item->{groups}};
- # Admins can see all groups a user belongs to (assuming they inherited
- # membership for all groups). Same for a user querying his own account.
- if ($username eq $item->{name} || $user eq 'admin') {
- if ($username eq $get_user) {
- ok(!scalar @groups, "The unprivileged user doesn't belong to any group");
- }
- elsif ($username eq $canconfirm_user) {
- ok(grep($_ eq 'canconfirm', @groups), "Group 'canconfirm' returned");
- }
+ my @groups = map { $_->{name} } @{$item->{groups}};
+
+ # Admins can see all groups a user belongs to (assuming they inherited
+ # membership for all groups). Same for a user querying his own account.
+ if ($username eq $item->{name} || $user eq 'admin') {
+ if ($username eq $get_user) {
+ ok(!scalar @groups, "The unprivileged user doesn't belong to any group");
}
- else {
- ok(!scalar @groups, "No groups are visible to users without bless privs");
+ elsif ($username eq $canconfirm_user) {
+ ok(grep($_ eq 'canconfirm', @groups), "Group 'canconfirm' returned");
}
+ }
+ else {
+ ok(!scalar @groups, "No groups are visible to users without bless privs");
+ }
}
foreach my $rpc (@clients) {
- $rpc->bz_run_tests(tests => \@tests, method => 'User.get',
- post_success => \&post_success);
-
- #############################
- # Include and Exclude Tests #
- #############################
-
- my $include_nothing = $rpc->bz_call_success('User.get', {
- names => [$get_user], include_fields => ['asdfasdfsdf'],
- }, 'User.get including only invalid fields');
- is(scalar keys %{ $include_nothing->result->{users}->[0] }, 0,
- 'No fields returned for user');
-
- my $include_one = $rpc->bz_call_success('User.get', {
- names => [$get_user], include_fields => ['id'],
- }, 'User.get including only id');
- is(scalar keys %{ $include_one->result->{users}->[0] }, 1,
- 'Only one field returned for user');
-
- my $exclude_none = $rpc->bz_call_success('User.get', {
- names => [$get_user], exclude_fields => ['asdfasdfsdf'],
- }, 'User.get excluding only invalid fields');
- is(scalar keys %{ $exclude_none->result->{users}->[0] }, 3,
- 'All fields returned for user');
-
- my $exclude_one = $rpc->bz_call_success('User.get', {
- names => [$get_user], exclude_fields => ['id'],
- }, 'User.get excluding id');
- is(scalar keys %{ $exclude_one->result->{users}->[0] }, 2,
- 'Only two fields returned for user');
-
- my $override = $rpc->bz_call_success('User.get', {
- names => [$get_user], include_fields => ['id', 'name'],
- exclude_fields => ['id']
- }, 'User.get with both include and exclude');
- is(scalar keys %{ $override->result->{users}->[0] }, 1,
- 'Only one field returned');
- ok(exists $override->result->{users}->[0]->{name},
- '...and that field is the "name" field');
+ $rpc->bz_run_tests(
+ tests => \@tests,
+ method => 'User.get',
+ post_success => \&post_success
+ );
+
+ #############################
+ # Include and Exclude Tests #
+ #############################
+
+ my $include_nothing = $rpc->bz_call_success(
+ 'User.get',
+ {names => [$get_user], include_fields => ['asdfasdfsdf'],},
+ 'User.get including only invalid fields'
+ );
+ is(scalar keys %{$include_nothing->result->{users}->[0]},
+ 0, 'No fields returned for user');
+
+ my $include_one = $rpc->bz_call_success(
+ 'User.get',
+ {names => [$get_user], include_fields => ['id'],},
+ 'User.get including only id'
+ );
+ is(scalar keys %{$include_one->result->{users}->[0]},
+ 1, 'Only one field returned for user');
+
+ my $exclude_none = $rpc->bz_call_success(
+ 'User.get',
+ {names => [$get_user], exclude_fields => ['asdfasdfsdf'],},
+ 'User.get excluding only invalid fields'
+ );
+ is(scalar keys %{$exclude_none->result->{users}->[0]},
+ 3, 'All fields returned for user');
+
+ my $exclude_one = $rpc->bz_call_success(
+ 'User.get',
+ {names => [$get_user], exclude_fields => ['id'],},
+ 'User.get excluding id'
+ );
+ is(scalar keys %{$exclude_one->result->{users}->[0]},
+ 2, 'Only two fields returned for user');
+
+ my $override = $rpc->bz_call_success(
+ 'User.get',
+ {
+ names => [$get_user],
+ include_fields => ['id', 'name'],
+ exclude_fields => ['id']
+ },
+ 'User.get with both include and exclude'
+ );
+ is(scalar keys %{$override->result->{users}->[0]}, 1,
+ 'Only one field returned');
+ ok(
+ exists $override->result->{users}->[0]->{name},
+ '...and that field is the "name" field'
+ );
}