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_attachments.t | 155 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 155 insertions(+) create mode 100644 xt/webservice/bug_attachments.t (limited to 'xt/webservice/bug_attachments.t') diff --git a/xt/webservice/bug_attachments.t b/xt/webservice/bug_attachments.t new file mode 100644 index 000000000..d5283685d --- /dev/null +++ b/xt/webservice/bug_attachments.t @@ -0,0 +1,155 @@ +# 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. + +use 5.10.1; +use strict; +use warnings; + +use FindBin qw($RealBin); +use lib "$RealBin/../lib"; + +use QA::Util; +use QA::Tests qw(STANDARD_BUG_TESTS PRIVATE_BUG_USER); +use Data::Dumper; +use List::Util qw(first); +use MIME::Base64; +use Test::More tests => 313; +my ($config, @clients) = get_rpc_clients(); + +################ +# Bug ID Tests # +################ + +our %attachments; + +sub post_bug_success { + my ($call, $t) = @_; + + my $bugs = $call->result->{bugs}; + is(scalar keys %$bugs, 1, "Got exactly one bug") + or diag(Dumper($call->result)); + + my $bug_attachments = (values %$bugs)[0]; + # Collect attachment ids + foreach my $alias (qw(public_bug private_bug)) { + foreach my $is_private (0, 1) { + my $find_desc = "${alias}_${is_private}"; + my $attachment = first { $_->{summary} eq $find_desc } + reverse @$bug_attachments; + if ($attachment) { + $attachments{$find_desc} = $attachment->{id}; + } + } + } +} + +foreach my $rpc (@clients) { + $rpc->bz_run_tests(tests => STANDARD_BUG_TESTS, method => 'Bug.attachments', + post_success => \&post_bug_success); +} + +foreach my $alias (qw(public_bug private_bug)) { + foreach my $is_private (0, 1) { + ok($attachments{"${alias}_${is_private}"}, + "Found attachment id for ${alias}_${is_private}"); + } +} + +#################### +# Attachment Tests # +#################### + +my $content_file = $config->{bugzilla_path} . '/xt/config/generate_test_data.pl'; +open(my $fh, '<', $content_file) or die "$content_file: $!"; +my $content; +{ local $/; $content = <$fh>; } +close($fh); + +# Access tests for public/private stuff, and also validate that the +# format of each return value is correct. + +my @tests = ( + # Logged-out user + { args => { attachment_ids => [$attachments{'public_bug_0'}] }, + test => 'Logged-out user can access public attachment on public' + . ' bug by id', + }, + { args => { attachment_ids => [$attachments{'public_bug_1'}] }, + test => 'Logged-out user cannot access private attachment on public bug', + error => 'Sorry, you are not authorized', + }, + { args => { attachment_ids => [$attachments{'private_bug_0'}] }, + test => 'Logged-out user cannot access attachments by id on private bug', + error => 'You are not authorized to access', + }, + { args => { attachment_ids => [$attachments{'private_bug_1'}] }, + test => 'Logged-out user cannot access private attachment on ' + . ' private bug', + error => 'You are not authorized to access', + }, + + # Logged-in, unprivileged user. + { user => 'unprivileged', + args => { attachment_ids => [$attachments{'public_bug_0'}] }, + test => 'Logged-in user can see a public attachment on a public bug by id', + }, + { user => 'unprivileged', + args => { attachment_ids => [$attachments{'public_bug_1'}] }, + test => 'Logged-in user cannot access private attachment on public bug', + error => 'Sorry, you are not authorized', + }, + { user => 'unprivileged', + args => { attachment_ids => [$attachments{'private_bug_0'}] }, + test => 'Logged-in user cannot access attachments by id on private bug', + error => "You are not authorized to access", + }, + { user => 'unprivileged', + args => { attachment_ids => [$attachments{'private_bug_1'}] }, + test => 'Logged-in user cannot access private attachment on private bug', + error => "You are not authorized to access", + }, + + # User who can see private bugs and private attachments + { user => PRIVATE_BUG_USER, + args => { attachment_ids => [$attachments{'public_bug_1'}] }, + test => PRIVATE_BUG_USER . ' can see private attachment on public bug', + }, + { user => PRIVATE_BUG_USER, + args => { attachment_ids => [$attachments{'private_bug_1'}] }, + test => PRIVATE_BUG_USER . ' can see private attachment on private bug', + }, +); + +sub post_success { + my ($call, $t, $rpc) = @_; + is(scalar keys %{ $call->result->{attachments} }, 1, + "Got exactly one attachment"); + my $attachment = (values %{ $call->result->{attachments} })[0]; + + cmp_ok($attachment->{last_change_time}, '=~', $rpc->DATETIME_REGEX, + "last_change_time is in the right format"); + cmp_ok($attachment->{creation_time}, '=~', $rpc->DATETIME_REGEX, + "creation_time is in the right format"); + is($attachment->{is_obsolete}, 0, 'is_obsolete is 0'); + cmp_ok($attachment->{bug_id}, '=~', qr/^\d+$/, "bug_id is an integer"); + cmp_ok($attachment->{id}, '=~', qr/^\d+$/, "id is an integer"); + is($attachment->{content_type}, 'application/x-perl', + "content_type is correct"); + cmp_ok($attachment->{file_name}, '=~', qr/^\w+\.pl$/, + "filename is in the expected format"); + is($attachment->{creator}, $config->{QA_Selenium_TEST_user_login}, + "creator is the correct user"); + my $data = $attachment->{data}; + $data = decode_base64($data) if $rpc->isa('QA::RPC::JSONRPC'); + is($data, $content, 'data is correct'); + is($attachment->{size}, length($data), "size matches data's size"); +} + +foreach my $rpc (@clients) { + $rpc->bz_run_tests(method => 'Bug.attachments', tests => \@tests, + post_success => \&post_success); +} -- cgit v1.2.3-24-g4f1b