diff options
Diffstat (limited to 'qa/t/webservice_bug_add_attachment.t')
-rw-r--r-- | qa/t/webservice_bug_add_attachment.t | 411 |
1 files changed, 223 insertions, 188 deletions
diff --git a/qa/t/webservice_bug_add_attachment.t b/qa/t/webservice_bug_add_attachment.t index 382e5bf99..8b4759c42 100644 --- a/qa/t/webservice_bug_add_attachment.t +++ b/qa/t/webservice_bug_add_attachment.t @@ -13,215 +13,250 @@ use MIME::Base64 qw(encode_base64 decode_base64); use Test::More tests => 187; my ($config, $xmlrpc, $jsonrpc, $jsonrpc_get) = get_rpc_clients(); -use constant INVALID_BUG_ID => -1; +use constant INVALID_BUG_ID => -1; use constant INVALID_BUG_ALIAS => random_string(20); -use constant PRIVS_USER => 'QA_Selenium_TEST'; +use constant PRIVS_USER => 'QA_Selenium_TEST'; sub attach { - my ($id, $override) = @_; - my %fields = ( - ids => [$id], - data => 'data-' . random_string(100), - file_name => 'file_name-' . random_string(60), - summary => 'summary-' . random_string(100), - content_type => 'text/plain', - comment => 'comment-' . random_string(100), - ); + my ($id, $override) = @_; + my %fields = ( + ids => [$id], + data => 'data-' . random_string(100), + file_name => 'file_name-' . random_string(60), + summary => 'summary-' . random_string(100), + content_type => 'text/plain', + comment => 'comment-' . random_string(100), + ); - foreach my $key (keys %{ $override || {} }) { - my $value = $override->{$key}; - if (defined $value) { - $fields{$key} = $value; - } - else { - delete $fields{$key}; - } + foreach my $key (keys %{$override || {}}) { + my $value = $override->{$key}; + if (defined $value) { + $fields{$key} = $value; + } + else { + delete $fields{$key}; } - return \%fields; + } + return \%fields; } -my ($public_bug, $private_bug) = - $xmlrpc->bz_create_test_bugs('private'); -my $public_id = $public_bug->{id}; +my ($public_bug, $private_bug) = $xmlrpc->bz_create_test_bugs('private'); +my $public_id = $public_bug->{id}; my $private_id = $private_bug->{id}; my @tests = ( - # Permissions - { args => attach($public_id), - error => 'You must log in', - test => 'Logged-out user cannot add an attachment to a public bug', - }, - { args => attach($private_id), - error => "You must log in", - test => 'Logged-out user cannot add an attachment to a private bug', - }, - { user => 'editbugs', - args => attach($private_id), - error => "not authorized to access", - test => "Editbugs user can't add an attachment to a private bug", - }, - - # Test ID parameter - { user => 'unprivileged', - args => attach(undef, { ids => undef }), - error => 'a ids argument', - test => 'Failing to pass the "ids" param fails', - }, - { user => 'unprivileged', - args => attach(INVALID_BUG_ID), - error => "It does not seem like bug number", - test => 'Passing invalid bug id returns error "Invalid Bug ID"', - }, - { user => 'unprivileged', - args => attach(''), - error => "You must enter a valid bug number", - test => 'Passing empty bug id returns error "Invalid Bug ID"', - }, - { user => 'unprivileged', - args => attach(INVALID_BUG_ALIAS), - error => "nor an alias to a bug", - test => 'Passing invalid bug alias returns error "Invalid Bug Alias"', - }, - - # Test Comment parameter - { user => 'unprivileged', - args => attach($public_id, { data => undef }), - error => 'a data argument', - test => 'Failing to pass the "data" parameter fails', - }, - { user => 'unprivileged', - args => attach($public_id, { data => '' }), - error => "The file you are trying to attach is empty", - test => 'Passing empty data fails', - }, - { user => 'unprivileged', - args => attach($public_id, { data => random_string(300_000) }), - error => "Attachments cannot be more than", - test => "Passing an attachment that's too large fails", - }, - - # Test the private parameter - { user => 'unprivileged', - args => attach($public_id, { is_private => 1 }), - error => 'attachments as private', - test => 'Unprivileged user cannot add a private attachment' - }, - - # Content-type - { user => 'unprivileged', - args => attach($public_id, { content_type => 'foo/bar' }), - error => "Valid types must be of the form", - test => "Well-formed but invalid content type fails", - }, - { user => 'unprivileged', - args => attach($public_id, { content_type => undef }), - error => 'Valid types must be of the form', - test => "Failing to pass content_type fails", - }, - { user => 'unprivileged', - args => attach($public_id, { content_type => '' }), - error => 'Valid types must be of the form', - test => "Empty content type fails", - }, - - # Summary - { user => 'unprivileged', - args => attach($public_id, { summary => undef }), - error => 'You must enter a description for the attachment', - test => "Failing to pass summary fails", - }, - { user => 'unprivileged', - args => attach($public_id, { summary => '' }), - error => 'You must enter a description for the attachment', - test => "Empty summary fails", - }, - - # Filename - { user => 'unprivileged', - args => attach($public_id, { file_name => undef }), - error => 'You did not specify a file to attach', - test => "Failing to pass file_name fails", - }, - { user => 'unprivileged', - args => attach($public_id, { file_name => '' }), - error => 'You did not specify a file to attach', - test => "Empty file_name fails", - }, - - # Success tests - { user => 'unprivileged', - args => attach($public_id), - test => 'Unprivileged user can add an attachment to a public bug', - }, - { user => 'unprivileged', - args => attach($public_id, { is_patch => 1, content_type => undef }), - test => 'Attaching a patch with no content type works', - }, - { user => 'unprivileged', - args => attach($public_id, { is_patch => 1, - content_type => 'application/octet-stream' }), - test => 'Attaching a patch with a bad content_type works', - }, - { user => PRIVS_USER, - args => attach($private_id), - test => 'Privileged user can add an attachment to a private bug', - }, - { user => PRIVS_USER, - args => attach($public_id, { is_private => 1 }), - test => 'Insidergroup user can add a private attachment', - }, + + # Permissions + { + args => attach($public_id), + error => 'You must log in', + test => 'Logged-out user cannot add an attachment to a public bug', + }, + { + args => attach($private_id), + error => "You must log in", + test => 'Logged-out user cannot add an attachment to a private bug', + }, + { + user => 'editbugs', + args => attach($private_id), + error => "not authorized to access", + test => "Editbugs user can't add an attachment to a private bug", + }, + + # Test ID parameter + { + user => 'unprivileged', + args => attach(undef, {ids => undef}), + error => 'a ids argument', + test => 'Failing to pass the "ids" param fails', + }, + { + user => 'unprivileged', + args => attach(INVALID_BUG_ID), + error => "It does not seem like bug number", + test => 'Passing invalid bug id returns error "Invalid Bug ID"', + }, + { + user => 'unprivileged', + args => attach(''), + error => "You must enter a valid bug number", + test => 'Passing empty bug id returns error "Invalid Bug ID"', + }, + { + user => 'unprivileged', + args => attach(INVALID_BUG_ALIAS), + error => "nor an alias to a bug", + test => 'Passing invalid bug alias returns error "Invalid Bug Alias"', + }, + + # Test Comment parameter + { + user => 'unprivileged', + args => attach($public_id, {data => undef}), + error => 'a data argument', + test => 'Failing to pass the "data" parameter fails', + }, + { + user => 'unprivileged', + args => attach($public_id, {data => ''}), + error => "The file you are trying to attach is empty", + test => 'Passing empty data fails', + }, + { + user => 'unprivileged', + args => attach($public_id, {data => random_string(300_000)}), + error => "Attachments cannot be more than", + test => "Passing an attachment that's too large fails", + }, + + # Test the private parameter + { + user => 'unprivileged', + args => attach($public_id, {is_private => 1}), + error => 'attachments as private', + test => 'Unprivileged user cannot add a private attachment' + }, + + # Content-type + { + user => 'unprivileged', + args => attach($public_id, {content_type => 'foo/bar'}), + error => "Valid types must be of the form", + test => "Well-formed but invalid content type fails", + }, + { + user => 'unprivileged', + args => attach($public_id, {content_type => undef}), + error => 'Valid types must be of the form', + test => "Failing to pass content_type fails", + }, + { + user => 'unprivileged', + args => attach($public_id, {content_type => ''}), + error => 'Valid types must be of the form', + test => "Empty content type fails", + }, + + # Summary + { + user => 'unprivileged', + args => attach($public_id, {summary => undef}), + error => 'You must enter a description for the attachment', + test => "Failing to pass summary fails", + }, + { + user => 'unprivileged', + args => attach($public_id, {summary => ''}), + error => 'You must enter a description for the attachment', + test => "Empty summary fails", + }, + + # Filename + { + user => 'unprivileged', + args => attach($public_id, {file_name => undef}), + error => 'You did not specify a file to attach', + test => "Failing to pass file_name fails", + }, + { + user => 'unprivileged', + args => attach($public_id, {file_name => ''}), + error => 'You did not specify a file to attach', + test => "Empty file_name fails", + }, + + # Success tests + { + user => 'unprivileged', + args => attach($public_id), + test => 'Unprivileged user can add an attachment to a public bug', + }, + { + user => 'unprivileged', + args => attach($public_id, {is_patch => 1, content_type => undef}), + test => 'Attaching a patch with no content type works', + }, + { + user => 'unprivileged', + args => attach( + $public_id, {is_patch => 1, content_type => 'application/octet-stream'} + ), + test => 'Attaching a patch with a bad content_type works', + }, + { + user => PRIVS_USER, + args => attach($private_id), + test => 'Privileged user can add an attachment to a private bug', + }, + { + user => PRIVS_USER, + args => attach($public_id, {is_private => 1}), + test => 'Insidergroup user can add a private attachment', + }, ); -$jsonrpc_get->bz_call_fail('Bug.add_attachment', attach($public_id), - 'must use HTTP POST', 'add_attachment fails over GET'); +$jsonrpc_get->bz_call_fail( + 'Bug.add_attachment', attach($public_id), + 'must use HTTP POST', 'add_attachment fails over GET' +); foreach my $rpc ($jsonrpc, $xmlrpc) { - $rpc->bz_run_tests(tests => \@tests, method => 'Bug.add_attachment', - post_success => \&post_success, pre_call => \&pre_call); + $rpc->bz_run_tests( + tests => \@tests, + method => 'Bug.add_attachment', + post_success => \&post_success, + pre_call => \&pre_call + ); } # We have to encode data manually when using JSON-RPC, else it fails. sub pre_call { - my ($t, $rpc) = @_; - return if !$rpc->isa('QA::RPC::JSONRPC'); - return if !defined $t->{args}->{data}; + my ($t, $rpc) = @_; + return if !$rpc->isa('QA::RPC::JSONRPC'); + return if !defined $t->{args}->{data}; - $t->{args}->{data} = encode_base64($t->{args}->{data}, ''); + $t->{args}->{data} = encode_base64($t->{args}->{data}, ''); } sub post_success { - my ($call, $t, $rpc) = @_; - - my $ids = [ keys %{ $call->result->{attachments} } ]; - $call = $rpc->bz_call_success("Bug.attachments", {attachment_ids => $ids}); - my $attachments = $call->result->{attachments}; - - foreach my $id (keys %$attachments) { - my $attachment = $attachments->{$id}; - if ($t->{args}->{is_private}) { - ok($attachment->{is_private}, - $rpc->TYPE . ": Attachment $id is private"); - } - else { - ok(!$attachment->{is_private}, - $rpc->TYPE . ": Attachment $id is NOT private"); - } - - if ($t->{args}->{is_patch}) { - is($attachment->{content_type}, 'text/plain', - $rpc->TYPE . ": Patch $id content type is text/plain"); - } - else { - is($attachment->{content_type}, $t->{args}->{content_type}, - $rpc->TYPE . ": Attachment $id content type is correct"); - } - - if ($rpc->isa('QA::RPC::JSONRPC')) { - # We encoded data in pre_call(), so we have to restore it to its original content. - $t->{args}->{data} = decode_base64($t->{args}->{data}); - $attachment->{data} = decode_base64($attachment->{data}); - } - is($attachment->{data}, $t->{args}->{data}, - $rpc->TYPE . ": Attachment $id data is correct"); + my ($call, $t, $rpc) = @_; + + my $ids = [keys %{$call->result->{attachments}}]; + $call = $rpc->bz_call_success("Bug.attachments", {attachment_ids => $ids}); + my $attachments = $call->result->{attachments}; + + foreach my $id (keys %$attachments) { + my $attachment = $attachments->{$id}; + if ($t->{args}->{is_private}) { + ok($attachment->{is_private}, $rpc->TYPE . ": Attachment $id is private"); + } + else { + ok(!$attachment->{is_private}, $rpc->TYPE . ": Attachment $id is NOT private"); + } + + if ($t->{args}->{is_patch}) { + is($attachment->{content_type}, + 'text/plain', $rpc->TYPE . ": Patch $id content type is text/plain"); } + else { + is( + $attachment->{content_type}, + $t->{args}->{content_type}, + $rpc->TYPE . ": Attachment $id content type is correct" + ); + } + + if ($rpc->isa('QA::RPC::JSONRPC')) { + + # We encoded data in pre_call(), so we have to restore it to its original content. + $t->{args}->{data} = decode_base64($t->{args}->{data}); + $attachment->{data} = decode_base64($attachment->{data}); + } + is( + $attachment->{data}, + $t->{args}->{data}, + $rpc->TYPE . ": Attachment $id data is correct" + ); + } } |