bugzilla-4intranet/qa/t/webservice_product.t

103 lines
3.7 KiB
Perl

########################################
# Test for xmlrpc calls to: #
# Product.get_selectable_products() #
# Product.get_enterable_products() #
# Product.get_accessible_products() #
# Product.get_products() #
########################################
use strict;
use warnings;
use lib qw(lib);
use Test::More tests => 95;
use QA::Util;
my ($xmlrpc, $jsonrpc, $config) = get_rpc_clients();
my $products = $xmlrpc->bz_get_products();
my $public = $products->{'Another Product'};
my $private = $products->{'QA-Selenium-TEST'};
my $no_entry = $products->{'QA Entry Only'};
my $no_search = $products->{'QA Search Only'};
my %id_map = reverse %$products;
my $tests = {
'QA_Selenium_TEST' => {
selectable => [$public, $private, $no_entry, $no_search],
enterable => [$public, $private, $no_entry, $no_search],
accessible => [$public, $private, $no_entry, $no_search],
},
'unprivileged' => {
selectable => [$public, $no_entry],
not_selectable => $no_search,
enterable => [$public, $no_search],
not_enterable => $no_entry,
accessible => [$public, $no_entry, $no_search],
not_accessible => $private,
},
'' => {
selectable => [$public, $no_entry],
not_selectable => $no_search,
enterable => [$public, $no_search],
not_enterable => $no_entry,
accessible => [$public, $no_entry, $no_search],
not_accessible => $private,
},
};
foreach my $rpc ($jsonrpc, $xmlrpc) {
foreach my $user (keys %$tests) {
my @selectable = @{ $tests->{$user}->{selectable} };
my @enterable = @{ $tests->{$user}->{enterable} };
my @accessible = @{ $tests->{$user}->{accessible} };
my $not_selectable = $tests->{$user}->{not_selectable};
my $not_enterable = $tests->{$user}->{not_enterable};
my $not_accessible = $tests->{$user}->{not_accessible};
$rpc->bz_log_in($user) if $user;
$user ||= "Logged-out user";
my $select_call =
$rpc->bz_call_success('Product.get_selectable_products');
my $select_ids = $select_call->result->{ids};
foreach my $id (@selectable) {
ok(grep($_ == $id, @$select_ids),
"$user can select " . $id_map{$id});
}
if ($not_selectable) {
ok(!grep($_ == $not_selectable, @$select_ids),
"$user cannot select " . $id_map{$not_selectable});
}
my $enter_call =
$rpc->bz_call_success('Product.get_enterable_products');
my $enter_ids = $enter_call->result->{ids};
foreach my $id (@enterable) {
ok(grep($_ == $id, @$enter_ids), "$user can enter " . $id_map{$id});
}
if ($not_enterable) {
ok(!grep($_ == $not_enterable, @$enter_ids),
"$user cannot enter " . $id_map{$not_enterable});
}
my $access_call =
$rpc->bz_call_success('Product.get_accessible_products');
my $get_call = $rpc->bz_call_success('Product.get',
{ ids => \@accessible });
my $products = $get_call->result->{products};
my $expected_count = scalar @accessible;
cmp_ok(scalar @$products, '==', $expected_count,
"Product.get gets all $expected_count accessible products"
. " for $user.");
if ($not_accessible) {
my $no_access_call = $rpc->bz_call_success(
'Product.get', { ids => [$not_accessible] });
ok(!scalar @{ $no_access_call->result->{products} },
"$user gets 0 products when asking for "
. $id_map{$not_accessible});
}
$rpc->bz_call_success('User.logout') if $user ne "Logged-out user";
}
}