diff --git a/lib/RedMiner/API.pm b/lib/RedMiner/API.pm index 13fac40211353715aea84fc11554a72fe1d87382..c23e6574560aed8584ad7c2a7ff86474368471b6 100644 --- a/lib/RedMiner/API.pm +++ b/lib/RedMiner/API.pm @@ -144,6 +144,10 @@ sub _response return $self->_set_error($response->status_line); } + if ($request->method eq 'PUT' || $request->method eq 'DELETE') { + return {}; + } + return eval { JSON::XS::decode_json($response->decoded_content) } // $self->_set_error($@); diff --git a/t/01-dispatching.t b/t/01-dispatching.t index 0b6907b7e82c5ff28ac99cc1ffabfc86609ab9ea..dd7fe6e52526547dfc7dc792dc03c830d5ef0d98 100644 --- a/t/01-dispatching.t +++ b/t/01-dispatching.t @@ -1,17 +1,16 @@ use strict; use warnings; -use Test::More tests => 30; +use Test::More tests => 29; -BEGIN { use_ok('RedMiner::API') }; +eval 'use RedMiner::API'; # -# Tests for internal name dispatching +# Testing internal name dispatching with a dummy object # - my $redminer = RedMiner::API->new( - host => '', - key => '' + host => '', + key => '', ); my $r; diff --git a/t/02-realworld.t b/t/02-realworld.t new file mode 100644 index 0000000000000000000000000000000000000000..998a05704f0be9ef62a8f2441b3df3e11754e2b8 --- /dev/null +++ b/t/02-realworld.t @@ -0,0 +1,60 @@ +use strict; +use warnings; + +use Test::More; +use JSON::XS qw/encode_json/; + +if ($ENV{REDMINER_API_DEVEL}) { + plan tests => 5; +} else{ + plan skip_all => 'Tests require RedMine installation'; +} + +eval 'use RedMiner::API'; + +# +# Read API key from a simple config file in the format 'host;key' +# +my $host = ''; +my $key = ''; +my $key_fname = $ENV{HOME} . '/.redminer/key'; + +if (!-e $key_fname) { + BAIL_OUT('REDMINER_API_DEVEL set, but key file is not accessible'); +} + +open my $FH_key, '<', $key_fname; +my $key_data = <$FH_key>; +($host, $key) = split /\s*;\s*/, $key_data; +chomp $key_data; +close $FH_key; + +my $redminer = RedMiner::API->new( + host => $host, + key => $key, +); + +my $project = $redminer->createProject({ + identifier => 'redminer-api-test', + name => 'RedMiner API test', +}); +my $project_id = $project->{project}{id}; +ok(defined $project_id, 'New project created with internal ID ' . $project_id); + +ok(!defined $redminer->createProject({ + identifier => 'redminer-api-test', + name => 'RedMiner API test', +}), 'Project already exists, error object is ' . JSON::XS::encode_json($redminer->errorDetails)); + +ok($redminer->updateProject($project_id, { inherit_members => 1 }), 'Project updated'); + +my $issue = $redminer->createIssue({ + project_id => $project_id, + subject => 'Test issue for RedMiner::API', + description => 'Test description', +}); +ok(defined $issue->{issue}{id}, 'Issue created with ID #' . $issue->{issue}{id}); + +ok($redminer->deleteProject($project_id), 'Project deleted'); + +exit; diff --git a/t/RedMiner-API.t b/t/RedMiner-API.t deleted file mode 100644 index dc7a7e278c86fa6e5d2d63eaa7b4b6c627cd5e7c..0000000000000000000000000000000000000000 --- a/t/RedMiner-API.t +++ /dev/null @@ -1,40 +0,0 @@ -use strict; -use warnings; - -use Test::More tests => 1; - -BEGIN { use_ok('RedMiner::API') }; - -my $host = ''; -my $key = ''; -my $key_fname = $ENV{HOME} . '/.redminer/key'; -if (-e $key_fname) { - open my $FH_key, '<', $key_fname; - my $key_data = <$FH_key>; - ($host, $key) = split /\s*;\s*/, $key_data; - chomp $key_data; - close $FH_key; -} - -my $redminer = RedMiner::API->new( - host => $host, - key => $key, -); - -my $response = $redminer->createProject({ - identifier => 'test-ru', - name => 'test.ru', -}); - -use JSON::XS qw/encode_json/; -if ($response) { - say STDERR JSON::XS::encode_json($response); -} else { - say STDERR JSON::XS::encode_json($redminer->errorDetails); -} - -#SKIP: { -# skip 'Development tests skipped', 2 if !$ENV{REDMINER_API_DEVEL}; -#} - -exit;