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

186 lines
5.7 KiB
Perl

########################################
# Test for xmlrpc call to Bug.create() #
########################################
use strict;
use warnings;
use lib qw(lib);
use Test::More tests => 172;
use QA::Util;
use QA::Tests qw(create_bug_fields);
my ($xmlrpc, $jsonrpc, $config) = get_rpc_clients();
########################
# Bug.create() testing #
########################
my $bug_fields = create_bug_fields($config);
# hash to contain all the possible $bug_fields values that
# can be passed to createBug()
my $fields = {
summary => {
undefined => {
faultstring => 'You must enter a summary for this bug',
value => undef
},
},
product => {
undefined => { faultstring => 'You must select/enter a product.', value => undef },
invalid =>
{ faultstring => 'does not exist', value => 'does-not-exist' },
},
component => {
undefined => {
faultstring => 'you must first choose a component',
value => undef
},
invalid => {
faultstring => "There is no component named 'does-not-exist'",
value => 'does-not-exist'
},
},
version => {
undefined =>
{ faultstring => 'You must select/enter a version.', value => undef },
invalid => {
faultstring => "There is no version named 'does-not-exist' in the 'TestProduct' product.",
value => 'does-not-exist'
},
},
platform => {
undefined =>
{ faultstring => 'You must select/enter a Hardware.',
value => '' },
invalid => {
faultstring => "There is no Hardware named 'does-not-exist'.",
value => 'does-not-exist'
},
},
status => {
invalid => {
faultstring => "There is no status named 'does-not-exist'",
value => 'does-not-exist'
},
},
severity => {
undefined =>
{ faultstring => 'You must select/enter a Severity.',
value => '' },
invalid => {
faultstring => "There is no Severity named 'does-not-exist'.",
value => 'does-not-exist'
},
},
priority => {
undefined =>
{ faultstring => 'You must select/enter a Priority.',
value => '' },
invalid => {
faultstring => "There is no Priority named 'does-not-exist'.",
value => 'does-not-exist'
},
},
op_sys => {
undefined => {
faultstring => 'You must select/enter a OS.',
value => ''
},
invalid => {
faultstring => "There is no OS named 'does-not-exist'.",
value => 'does-not-exist'
},
},
cc => {
invalid => {
faultstring => 'not a valid username',
value => ['nonuserATbugillaDOTorg']
},
},
assigned_to => {
invalid => {
faultstring => "There is no user named 'does-not-exist'",
value => 'does-not-exist'
},
},
qa_contact => {
invalid => {
faultstring => "There is no user named 'does-not-exist'",
value => 'does-not-exist'
},
},
alias => {
long => {
faultstring => 'Bug aliases cannot be longer than 20 characters',
value => 'MyyyyyyyyyyyyyyyyyyBugggggggggggggggggggggg'
},
existing => {
faultstring => 'already taken the alias',
value => 'public_bug'
},
numeric => {
faultstring => 'aliases cannot be merely numbers',
value => '12345'
},
commma_or_space_separated => {
faultstring => 'contains one or more commas or spaces',
value => 'Bug 12345'
},
},
};
foreach my $rpc ($jsonrpc, $xmlrpc) {
# test calling Bug.create without logging into bugzilla
my $create_call = $rpc->bz_call_fail('Bug.create', $bug_fields,
'You must log in', 'Cannot file bugs as logged-out user');
$rpc->bz_log_in('editbugs');
# run the tests for all the invalid values that can be passed
# to Bug.create()
foreach my $f (sort keys %{$fields}) {
foreach my $val (sort keys %{$fields->{$f}}) {
my %bug_fields_hash = %$bug_fields;
my $bug_fields_copy = \%bug_fields_hash;
$bug_fields_copy->{$f} = $fields->{$f}->{$val}->{value};
my $expected_faultstring = $fields->{$f}->{$val}->{faultstring};
my $fail_call = $rpc->bz_call_fail('Bug.create', $bug_fields_copy,
$expected_faultstring, "Specifying $val $f fails");
}
}
# after the loop ends all the $bug_fields value will be set to valid
# this is done by the sort so call create bug with the valid $bug_fields
# to run the test for the successful creation of the bug
my $success_create = $rpc->bz_call_success('Bug.create', $bug_fields);
my $bug_id = $success_create->result->{id};
cmp_ok($bug_id, 'gt', 0,
"Created new bug with id " . $success_create->result->{id});
# Make sure that the bug that we created has the field values we specified.
my $bug_result = $rpc->bz_call_success('Bug.get', { ids => [$bug_id] });
my $bug = $bug_result->result->{bugs}->[0];
isa_ok($bug, 'HASH', "Bug $bug_id");
# We have to limit the fields checked because Bug.get only returns certain
# fields.
foreach my $field (qw(assigned_to component priority product severity
status summary))
{
is($bug->{$field}, $bug_fields->{$field}, "$field has the right value");
};
$rpc->bz_call_success('User.logout');
}