bugzilla-4intranet/testopia/t/API_TestCase.pm

696 lines
21 KiB
Perl

# -*- Mode: perl; indent-tabs-mode: nil -*-
#
# The contents of this file are subject to the Mozilla Public
# License Version 1.1 (the "License"); you may not use this file
# except in compliance with the License. You may obtain a copy of
# the License at http://www.mozilla.org/MPL/
#
# Software distributed under the License is distributed on an "AS
# IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
# implied. See the License for the specific language governing
# rights and limitations under the License.
#
# The Original Code is the Bugzilla Testopia System.
#
# The Initial Developer of the Original Code is Greg Hendricks.
# Portions created by Greg Hendricks are Copyright (C) 2006
# Novell. All Rights Reserved.
#
# Contributor(s): Greg Hendricks <ghendricks@novell.com>
# Jeff Dayley <jedayley@novell.com>
package API_TestCase;
use strict;
use base qw(Test::Unit::TestCase);
use lib ".";
use lib "../..";
use Bugzilla;
use Bugzilla::Testopia::TestCase;
use Bugzilla::Testopia::Search;
use Bugzilla::Testopia::Table;
use Testopia::Test::Constants;
use Testopia::Test::API::Util;
use Testopia::Test::Util;
use Test::More;
use Test::Deep;
# The the XMLRPC::Lite proxy handle
our $proxy = proxy( LOGIN_CREDENTIALS->{'admin'} );
sub new {
my $self = shift()->SUPER::new(@_);
return $self;
}
sub set_up {
my $self = shift;
}
sub tear_down {
my $self = shift;
}
sub test_create_by_arrays {
my $self = shift;
my $plan = Bugzilla::Testopia::TestPlan->new( get_rep('test_plans')->{'plan_id'} );
my $plan2 = Bugzilla::Testopia::TestPlan->new( get_rep('test_plans')->{'plan_id'} );
while ( $plan2->id == $plan->id ) {
$plan2 = Bugzilla::Testopia::TestPlan->new( get_rep('test_plans')->{'plan_id'} );
}
my @time = localtime();
my $response = $proxy->call(
"TestCase.create",
{
status => get_rep('test_case_status')->{'case_status_id'},
category => get_rep('test_case_categories')->{'category_id'},
priority => get_rep('priority')->{'id'},
summary => 'API TEST CREATE ' . time(),
plans => [ $plan->id, $plan2->id ],
default_tester => get_rep('profiles')->{'userid'},
estimated_time => "$time[2]:$time[1]:$time[0]",
isautomated => 1,
sortkey => 200,
script => 'API FOO SCRIPT',
arguments => '-A -P -I',
requirement => 'API REQUIREMENT',
alias => 'API ALIAS ' . rand(),
action => 'API ACTON CREATE',
effect => 'API RESULT CREATE',
setup => 'API SETUP CREATE',
breakdown => 'API BREAKDOWN CREATE',
dependson => [
get_rep('test_cases')->{'case_id'},
get_rep('test_cases')->{'case_id'}
],
blocks => [
get_rep('test_cases')->{'case_id'},
get_rep('test_cases')->{'case_id'}
],
tags => [ 'one', 'two', 'three' ],
bugs =>
[ get_rep('bugs')->{'bug_id'}, get_rep('bugs')->{'bug_id'} ],
components =>
[ get_rep('components')->{'id'}, get_rep('components')->{'id'} ],
}
);
check_fault( $response, $self );
my $obj = Bugzilla::Testopia::TestCase->new( $response->result->{'case_id'} );
$obj->type;
$obj->version;
convert_undef($obj);
cmp_deeply( $response->result, noclass($obj), "TestCase - test_create_by_arrays" );
}
sub test_create_by_strings {
my $self = shift;
my $plan = Bugzilla::Testopia::TestPlan->new( get_rep('test_plans')->{'plan_id'} );
my $plan2 = Bugzilla::Testopia::TestPlan->new( get_rep('test_plans')->{'plan_id'} );
while ( $plan2->id == $plan->id ) {
$plan2 = Bugzilla::Testopia::TestPlan->new( get_rep('test_plans')->{'plan_id'} );
}
my @time = localtime();
my $category = get_rep('test_case_categories');
my $component = get_rep('components');
my $response = $proxy->call(
"TestCase.create",
{
status => get_rep('test_case_status')->{'name'},
category => {category => $category->{'name'},
product => Bugzilla::Testopia::Product->new($category->{'product_id'})->name},
priority => get_rep('priority')->{'value'},
summary => 'API TEST CREATE ' . time(),
plans => "" . $plan->id .",". $plan2->id ,
default_tester => get_rep('profiles')->{'login_name'},
estimated_time => "$time[2]:$time[1]:$time[0]",
isautomated => 1,
sortkey => 200,
script => 'API FOO SCRIPT',
arguments => '-A -P -I',
requirement => 'API REQUIREMENT',
alias => 'API ALIAS ' . rand(),
action => 'API ACTON CREATE',
effect => 'API RESULT CREATE',
setup => 'API SETUP CREATE',
breakdown => 'API BREAKDOWN CREATE',
dependson => [
get_rep('test_cases')->{'case_id'},
get_rep('test_cases')->{'case_id'}
],
blocks => [
get_rep('test_cases')->{'case_id'},
get_rep('test_cases')->{'case_id'}
],
tags => 'one, two, three' ,
bugs =>
[ get_rep('bugs')->{'bug_id'}, get_rep('bugs')->{'bug_id'} ],
components =>
[ {component => $component->{'name'},
product => Bugzilla::Testopia::Product->new($component->{'product_id'})->name},
],
}
);
check_fault( $response, $self );
my $obj = Bugzilla::Testopia::TestCase->new( $response->result->{'case_id'} );
$obj->type;
$obj->version;
convert_undef($obj);
# dump_all($response->result, $obj);
cmp_deeply( $response->result, noclass($obj), "TestCase - test_create_by_strings" );
}
sub test_get {
my $self = shift;
my $rep = get_rep('test_cases');
my $obj = Bugzilla::Testopia::TestCase->new( $rep->{'case_id'} );
$obj->text;
$obj->version;
$obj->dependson_list;
$obj->blocked_list;
my $response = $proxy->call( "TestCase.get", $rep->{'case_id'} );
check_fault( $response, $self );
convert_undef($obj);
# dump_all($obj, $response->result);
cmp_deeply( $response->result, noclass($obj), "TestCase - test_get" );
}
sub test_update {
my $self = shift;
my $rep = get_rep('test_cases');
my $obj = Bugzilla::Testopia::TestCase->new( $rep->{'case_id'} );
my $category = get_rep('test_case_categories');
my $response = $proxy->call(
"TestCase.update",
$rep->{'case_id'},
{
status => get_rep('test_case_status')->{'name'},
category => {category => $category->{'name'},
product => Bugzilla::Testopia::Product->new($category->{'product_id'})->name},
priority => get_rep('priority')->{'value'},
summary => 'API TEST UPDATE ' . time(),
default_tester => get_rep('profiles')->{'login_name'},
estimated_time => "02:02:02",
isautomated => 1,
sortkey => 200,
script => 'API FOO SCRIPT',
arguments => '-A -P -I',
requirement => 'API REQUIREMENT',
alias => 'API ALIAS ' . rand(),
dependson => [
get_rep('test_cases')->{'case_id'},
get_rep('test_cases')->{'case_id'}
],
blocks => [
get_rep('test_cases')->{'case_id'},
get_rep('test_cases')->{'case_id'}
],
}
);
# Get the newly updated object to compare with
$obj = Bugzilla::Testopia::TestCase->new( $rep->{'case_id'} );
$obj->dependson_list;
$obj->blocked_list;
check_fault( $response, $self );
convert_undef($obj);
# dump_all($obj, $response->result);
cmp_deeply( $response->result, noclass($obj), "TestCase - test_update" );
}
sub test_list {
my $self = shift;
my $cgi = Bugzilla->cgi;
$cgi->param( 'current_tab', 'case' );
$cgi->param( 'pagesize', 25 );
$cgi->param( 'distinct', 1);
$cgi->param("Bugzilla_login", LOGIN_CREDENTIALS->{'admin'}->{'login_name'});
$cgi->param("Bugzilla_password", LOGIN_CREDENTIALS->{'admin'}->{'password'});
Bugzilla->login();
my $search = Bugzilla::Testopia::Search->new($cgi);
my $table =
Bugzilla::Testopia::Table->new( 'case', 'tr_xmlrpc.cgi', $cgi, undef,
$search->query() );
my $response = $proxy->call( "TestCase.list", { pagesize => 25, } );
check_fault( $response, $self );
convert_undef($table->list);
# dump_all($table->list, $response->result);
cmp_deeply( $response->result, noclass( $table->list ), "TestCase - test_list" );
$response = $proxy->call( "TestCase.list_count", { pagesize => 25, } );
ok($response->result == $table->list_count, 'list_count');
}
sub test_add_component {
my $self = shift;
my $rep = get_rep('test_cases');
my $obj = Bugzilla::Testopia::TestCase->new( $rep->{'case_id'} );
my $orig_size = scalar @{$obj->components};
delete $obj->{'components'};
my $component = get_rep('components');
my $response = $proxy->call( "TestCase.add_component", $rep->{'case_id'},
{component => $component->{'name'},
product => Bugzilla::Testopia::Product->new($component->{'product_id'})->name} );
check_fault( $response, $self );
# dump_all($component, $obj->components);
ok( scalar @{$obj->components} == ($orig_size + 1), "TestCase - test_add_component" );
}
sub test_add_tag {
my $self = shift;
my $rep = get_rep('test_cases');
my $obj = Bugzilla::Testopia::TestCase->new( $rep->{'case_id'} );
my $orig_size = scalar @{$obj->tags};
delete $obj->{'tags'};
my $tag = get_rep('test_tags');
my $response = $proxy->call( "TestCase.add_tag", $rep->{'case_id'}, $tag->{'tag_name'} );
check_fault( $response, $self );
# dump_all($tag, $obj->tags);
ok( scalar @{$obj->tags} == ($orig_size + 1), "TestCase - test_add_tag" );
}
sub test_add_to_run {
my $self = shift;
my $rep = get_rep('test_cases');
while ( $rep->{'case_status_id'} != 2 ){
$rep = get_rep('test_cases');
}
my $run = get_rep('test_runs');
while ( $run->{'stop_date'} ){
$run = get_rep('test_runs');
}
my $obj = Bugzilla::Testopia::TestCase->new( $rep->{'case_id'} );
my $orig_size = $obj->run_count;
my $tag = get_rep('test_tags');
my $response = $proxy->call( "TestCase.add_to_run", $rep->{'case_id'}, $run->{'run_id'} );
check_fault( $response, $self );
# dump_all($tag, $obj->tags);
ok( $obj->run_count == ($orig_size + 1), "TestCase - test_add_to_run" );
}
sub test_attach_bug {
my $self = shift;
my $cgi = Bugzilla->cgi;
$cgi->param("Bugzilla_login", LOGIN_CREDENTIALS->{'admin'}->{'login_name'});
$cgi->param("Bugzilla_password", LOGIN_CREDENTIALS->{'admin'}->{'password'});
Bugzilla->login();
my $rep = get_rep('test_cases');
my $obj = Bugzilla::Testopia::TestCase->new( $rep->{'case_id'} );
my $orig_size = scalar @{$obj->bugs};
delete $obj->{'bugs'};
my $bug = get_rep('bugs');
my $response = $proxy->call( "TestCase.attach_bug", $rep->{'case_id'}, $bug->{'bug_id'} );
check_fault( $response, $self );
# dump_all($bug, $obj->bugs);
ok( scalar @{$obj->bugs} == ($orig_size + 1), "TestCase - test_attach_bug" );
}
sub test_calculate_average_time {
my $self = shift;
my $rep = get_rep('test_cases');
my $obj = Bugzilla::Testopia::TestCase->new( $rep->{'case_id'} );
my $response = $proxy->call( "TestCase.calculate_average_time", $rep->{'case_id'} );
check_fault( $response, $self );
# dump_all($obj->calculate_average_time, $response->result);
cmp_deeply( $response->result, noclass($obj->calculate_average_time), "TestCase - test_calculate_average_time" );
}
sub test_detach_bug {
my $self = shift;
my $cgi = Bugzilla->cgi;
$cgi->param("Bugzilla_login", LOGIN_CREDENTIALS->{'admin'}->{'login_name'});
$cgi->param("Bugzilla_password", LOGIN_CREDENTIALS->{'admin'}->{'password'});
Bugzilla->login();
my $rep = get_rep('test_cases');
my $bug = get_rep('bugs');
my $obj = Bugzilla::Testopia::TestCase->new( $rep->{'case_id'} );
$obj->attach_bug($bug->{'bug_id'});
delete $obj->{'bugs'};
my $orig_size = scalar @{$obj->bugs};
delete $obj->{'bugs'};
my $response = $proxy->call( "TestCase.detach_bug", $rep->{'case_id'}, $bug->{'bug_id'} );
check_fault( $response, $self );
# dump_all($bug, $obj->bugs);
ok( scalar @{$obj->bugs} == ($orig_size - 1), "TestCase - test_detach_bug" );
}
sub test_get_bugs {
my $self = shift;
my $cgi = Bugzilla->cgi;
$cgi->param("Bugzilla_login", LOGIN_CREDENTIALS->{'admin'}->{'login_name'});
$cgi->param("Bugzilla_password", LOGIN_CREDENTIALS->{'admin'}->{'password'});
Bugzilla->login();
my $rep = get_rep('test_case_bugs');
my $obj = Bugzilla::Testopia::TestCase->new( $rep->{'case_id'} );
my $response = $proxy->call( "TestCase.get_bugs", $rep->{'case_id'} );
check_fault( $response, $self );
my $list = $obj->bugs;
convert_undef($list);
# dump_all($obj->bugs, $response->result);
cmp_deeply( $response->result, noclass($list), "TestCase - test_get_bugs" );
}
sub test_get_case_run_history {
my $self = shift;
my $rep = get_rep('test_case_runs');
my $obj = Bugzilla::Testopia::TestCase->new( $rep->{'case_id'} );
my $response = $proxy->call( "TestCase.get_case_run_history", $rep->{'case_id'} );
check_fault( $response, $self );
my $list = $obj->caseruns;
convert_undef($list);
# dump_all($obj->get_case_run_history, $response->result);
cmp_deeply( $response->result, noclass($list), "TestCase - test_get_case_run_history" );
}
sub test_get_change_history {
my $self = shift;
my $rep = get_rep('test_case_activity');
my $obj = Bugzilla::Testopia::TestCase->new( $rep->{'case_id'} );
my $response = $proxy->call( "TestCase.get_change_history", $rep->{'case_id'} );
check_fault( $response, $self );
my $list = $obj->history;
convert_undef($list);
# dump_all($obj->history, $response->result);
cmp_deeply( $response->result, noclass($list), "TestCase - test_get_change_history" );
}
sub test_get_components {
my $self = shift;
my $rep = get_rep('test_case_components');
my $obj = Bugzilla::Testopia::TestCase->new( $rep->{'case_id'} );
my $response = $proxy->call( "TestCase.get_components", $rep->{'case_id'} );
check_fault( $response, $self );
my $list = $obj->components;
convert_undef($list);
# dump_all($obj->get_components, $response->result);
cmp_deeply( $response->result, noclass($list), "TestCase - test_get_components" );
}
sub test_get_plans {
my $self = shift;
my $rep = get_rep('test_case_plans');
my $obj = Bugzilla::Testopia::TestCase->new( $rep->{'case_id'} );
my $response = $proxy->call( "TestCase.get_plans", $rep->{'case_id'} );
check_fault( $response, $self );
my $list = $obj->plans;
convert_undef($list);
# dump_all($obj->plans, $response->result);
cmp_deeply( $response->result, noclass($list), "TestCase - test_get_plans" );
}
sub test_get_tags {
my $self = shift;
my $rep = get_rep('test_case_tags');
my $obj = Bugzilla::Testopia::TestCase->new( $rep->{'case_id'} );
my $response = $proxy->call( "TestCase.get_tags", $rep->{'case_id'} );
check_fault( $response, $self );
my @results;
foreach my $tag (@{$obj->tags}){
push @results, $tag->name;
}
# dump_all($obj->get_tags, $response->result);
cmp_deeply( $response->result, \@results, "TestCase - test_get_tags" );
}
sub test_get_text {
my $self = shift;
my $rep = get_rep('test_case_texts');
my $obj = Bugzilla::Testopia::TestCase->new( $rep->{'case_id'} );
my $response = $proxy->call( "TestCase.get_text", $rep->{'case_id'} );
check_fault( $response, $self );
my $list = $obj->text;
convert_undef($list);
# dump_all($obj->get_text, $response->result);
cmp_deeply( $response->result, noclass($list), "TestCase - test_get_text" );
}
sub test_link_plan {
my $self = shift;
my $rep = get_rep('test_cases');
my $obj = Bugzilla::Testopia::TestCase->new( $rep->{'case_id'} );
my $orig_size = scalar @{$obj->plans};
delete $obj->{'plans'};
my $plan = get_rep('test_plans');
my $response = $proxy->call( "TestCase.link_plan", $rep->{'case_id'}, $plan->{'plan_id'} );
check_fault( $response, $self );
# dump_all($tag, $obj->tags);
ok( scalar @{$obj->plans} == ($orig_size + 1), "TestCase - test_link_plan" );
}
sub test_lookup_priority_id_by_name {
my $self = shift;
my $rep = get_rep('priority');
my $response = $proxy->call( "TestCase.lookup_priority_id_by_name", $rep->{'value'} );
check_fault( $response, $self );
# dump_all($rep, $response->result);
cmp_deeply( $response->result, lookup_priority_by_value($rep->{'value'}), "TestCase - lookup_priority_id_by_name" );
}
sub test_lookup_priority_name_by_id {
my $self = shift;
my $rep = get_rep('priority');
my $response = $proxy->call( "TestCase.lookup_priority_name_by_id", $rep->{'id'} );
check_fault( $response, $self );
# dump_all($rep, $response->result);
cmp_deeply( $response->result, lookup_priority($rep->{'id'}), "TestCase - lookup_priority_name_by_id" );
}
sub test_lookup_status_id_by_name {
my $self = shift;
my $rep = get_rep('test_case_status');
my $response = $proxy->call( "TestCase.lookup_status_id_by_name", $rep->{'name'} );
check_fault( $response, $self );
# dump_all(lookup_status_by_name($rep->{'name'}), $response->result);
cmp_deeply( $response->result, lookup_status_by_name($rep->{'name'}), "TestCase - lookup_status_id_by_name" );
}
sub test_lookup_status_name_by_id {
my $self = shift;
my $rep = get_rep('test_case_status');
my $response = $proxy->call( "TestCase.lookup_status_name_by_id", $rep->{'case_status_id'} );
check_fault( $response, $self );
# dump_all($rep, $response->result);
cmp_deeply( $response->result, lookup_status($rep->{'case_status_id'}), "TestCase - lookup_status_name_by_id" );
}
sub test_remove_component {
my $self = shift;
my $rep = get_rep('test_case_components');
my $obj = Bugzilla::Testopia::TestCase->new( $rep->{'case_id'} );
my $orig_size = scalar @{$obj->components};
delete $obj->{'components'};
my $response = $proxy->call( "TestCase.remove_component", $rep->{'case_id'}, $rep->{'component_id'} );
check_fault( $response, $self );
# dump_all($rep, $obj->components);
ok( scalar @{$obj->components} == ($orig_size - 1), "TestCase - test_remove_component" );
}
sub test_remove_tag {
my $self = shift;
my $rep = get_rep('test_case_tags');
my $obj = Bugzilla::Testopia::TestCase->new( $rep->{'case_id'} );
my $tag = Bugzilla::Testopia::TestTag->new( $rep->{'tag_id'} );
my $orig_size = scalar @{$obj->tags};
delete $obj->{'tags'};
my $response = $proxy->call( "TestCase.remove_tag", $rep->{'case_id'}, $tag->name );
check_fault( $response, $self );
# dump_all($rep, $obj->tags);
ok( scalar @{$obj->tags} == ($orig_size - 1), "TestCase - test_remove_tag" );
}
sub test_store_text {
my $self = shift;
my $rep = get_rep('test_cases');
my $obj = Bugzilla::Testopia::TestCase->new( $rep->{'case_id'} );
my $response = $proxy->call( "TestCase.store_text", $rep->{'case_id'},
"API ACTION UPDATE TEST",
"API RESULTS UPDATE TEST",
"API SETUP UPDATE TEST",
"API BREAKDOWN UPDATE TEST" );
check_fault( $response, $self );
# dump_all($obj->version, $response->result);
cmp_deeply( $response->result, noclass($obj->version), "TestCase - test_store_text" );
}
sub test_unlink_plan {
my $self = shift;
my $plan = get_rep('test_plans');
my $rep = get_rep('test_cases');
my $obj = Bugzilla::Testopia::TestCase->new( $rep->{'case_id'} );
$obj->link_plan($plan->{'plan_id'});
delete $obj->{'plans'};
my $orig_size = scalar @{$obj->plans};
delete $obj->{'plans'};
my $response = $proxy->call( "TestCase.unlink_plan", $rep->{'case_id'}, $plan->{'plan_id'} );
check_fault( $response, $self );
# dump_all($rep, $obj->plans);
ok( scalar @{$obj->plans} == ($orig_size - 1), "TestCase - test_unlink_plan" );
}
1;
__END__