From 9b6ec1f545da1cc4088ddf9cc117747954e58e65 Mon Sep 17 00:00:00 2001 From: David Lawrence Date: Fri, 26 Feb 2016 17:57:55 +0000 Subject: Bug 1069799 - move the QA repository into the main repository r=LpSolit --- xt/webservice/bug_get.t | 150 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 150 insertions(+) create mode 100644 xt/webservice/bug_get.t (limited to 'xt/webservice/bug_get.t') diff --git a/xt/webservice/bug_get.t b/xt/webservice/bug_get.t new file mode 100644 index 000000000..e05fe2cb2 --- /dev/null +++ b/xt/webservice/bug_get.t @@ -0,0 +1,150 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +# +# This Source Code Form is "Incompatible With Secondary Licenses", as +# defined by the Mozilla Public License, v. 2.0. + +########################################### +# Test for xmlrpc call to Bug.get() # +########################################### + +use 5.10.1; +use strict; +use warnings; + +use FindBin qw($RealBin); +use lib "$RealBin/../lib"; + +use Data::Dumper; +use DateTime; +use QA::Util; +use QA::Tests qw(bug_tests PRIVATE_BUG_USER); +use Test::More tests => 988; +my ($config, @clients) = get_rpc_clients(); + +my $xmlrpc = $clients[0]; +our $creation_time = DateTime->now(); +our ($public_bug, $private_bug) = $xmlrpc->bz_create_test_bugs('private'); +my $private_id = $private_bug->{id}; +my $public_id = $public_bug->{id}; + +my $base_url = $config->{browser_url} . "/" + . $config->{bugzilla_installation} . '/'; + +# Set a few fields on the private bug, including setting up +# a dependency relationship. +$xmlrpc->bz_log_in(PRIVATE_BUG_USER); +$xmlrpc->bz_call_success('Bug.update', { + ids => [$private_id], + blocks => { set => [$public_id] }, + dupe_of => $public_id, + is_creator_accessible => 0, + keywords => { set => ['test-keyword-1', 'test-keyword-2'] }, + see_also => { add => ["${base_url}show_bug.cgi?id=$public_id", + "http://landfill.bugzilla.org/show_bug.cgi?id=123456"] }, + cf_qa_status => ['in progress', 'verified'], + cf_single_select => 'two', +}, 'Update the private bug'); +$xmlrpc->bz_call_success('User.logout'); + +$private_bug->{blocks} = [$public_id]; +$private_bug->{dupe_of} = $public_id; +$private_bug->{status} = 'RESOLVED'; +$private_bug->{is_open} = 0; +$private_bug->{resolution} = 'DUPLICATE'; +$private_bug->{is_creator_accessible} = 0; +$private_bug->{is_cc_accessible} = 1; +$private_bug->{keywords} = ['test-keyword-1', 'test-keyword-2']; +$private_bug->{see_also} = ["${base_url}show_bug.cgi?id=$public_id", + "http://landfill.bugzilla.org/show_bug.cgi?id=123456"]; +$private_bug->{cf_qa_status} = ['in progress', 'verified']; +$private_bug->{cf_single_select} = 'two'; + +$public_bug->{depends_on} = [$private_id]; +$public_bug->{dupe_of} = undef; +$public_bug->{resolution} = ''; +$public_bug->{is_open} = 1; +$public_bug->{is_creator_accessible} = 1; +$public_bug->{is_cc_accessible} = 1; +$public_bug->{keywords} = []; +# Local Bugzilla bugs are automatically updated. +$public_bug->{see_also} = ["${base_url}show_bug.cgi?id=$private_id"]; +$public_bug->{cf_qa_status} = []; +$public_bug->{cf_single_select} = '---'; + +# Fill in the timetracking fields on the public bug. +$xmlrpc->bz_log_in('admin'); +$xmlrpc->bz_call_success('Bug.update', { + ids => [$public_id], + deadline => '2038-01-01', + estimated_time => '10.0', + remaining_time => '5.0', +}); +$xmlrpc->bz_call_success('User.logout'); + +# Populate other fields. +$public_bug->{classification} = 'Unclassified'; +$private_bug->{classification} = 'Unclassified'; +$private_bug->{groups} = ['QA-Selenium-TEST']; +$public_bug->{groups} = []; + +# The user filing $private_bug doesn't have permission to set the status +# or qa_contact, so they differ from normal $public_bug values. +$private_bug->{qa_contact} = $config->{PRIVATE_BUG_USER . '_user_login'}; + +sub post_success { + my ($call, $t, $rpc) = @_; + + is(scalar @{ $call->result->{bugs} }, 1, "Got exactly one bug"); + my $bug = $call->result->{bugs}->[0]; + + if ($t->{user} && $t->{user} eq 'admin') { + ok(exists $bug->{estimated_time} && exists $bug->{remaining_time}, + 'Admin correctly gets time-tracking fields'); + is($bug->{deadline}, '2038-01-01', 'deadline is correct'); + cmp_ok($bug->{estimated_time}, '==', '10.0', + 'estimated_time is correct'); + cmp_ok($bug->{remaining_time}, '==', '5.0', + 'remaining_time is correct'); + } + else { + ok(!exists $bug->{estimated_time} && !exists $bug->{remaining_time}, + 'Time-tracking fields are not returned to non-privileged users'); + } + + if ($t->{user}) { + ok($bug->{update_token}, 'Update token returned for logged-in user'); + } + else { + ok(!exists $bug->{update_token}, + 'Update token not returned for logged-out users'); + } + + my $expect = $bug->{id} == $private_bug->{id} ? $private_bug : $public_bug; + + my @fields = sort keys %$expect; + push(@fields, 'creation_time', 'last_change_time'); + + $rpc->bz_test_bug(\@fields, $bug, $expect, $t, $creation_time); +} + +my @tests = ( + @{ bug_tests($public_id, $private_id) }, + { args => { ids => [$public_id], + include_fields => ['id', 'summary', 'groups'] }, + test => 'include_fields', + }, + { args => { ids => [$public_id], + exclude_fields => ['assigned_to', 'cf_qa_status'] }, + test => 'exclude_fields' }, + { args => { ids => [$public_id], + include_fields => ['id', 'summary', 'groups'], + exclude_fields => ['summary'] }, + test => 'exclude_fields overrides include_fields' }, +); + +foreach my $rpc (@clients) { + $rpc->bz_run_tests(tests => \@tests, method => 'Bug.get', + post_success => \&post_success); +} -- cgit v1.2.3-24-g4f1b