From 8ce2f8f28341a14c49e8efd180774c29ddb0f8b6 Mon Sep 17 00:00:00 2001
From: Anton Soldatov <igelhaus@gmail.com>
Date: Thu, 10 Apr 2014 12:56:24 +0400
Subject: [PATCH] * Redminer::API: PUT and DELETE requests return empty hash
 refs on success * t/RedMiner-API.t renamed to t/02-realworld.t * Tests
 updated

---
 lib/RedMiner/API.pm |  4 +++
 t/01-dispatching.t  | 11 ++++-----
 t/02-realworld.t    | 60 +++++++++++++++++++++++++++++++++++++++++++++
 t/RedMiner-API.t    | 40 ------------------------------
 4 files changed, 69 insertions(+), 46 deletions(-)
 create mode 100644 t/02-realworld.t
 delete mode 100644 t/RedMiner-API.t

diff --git a/lib/RedMiner/API.pm b/lib/RedMiner/API.pm
index 13fac40..c23e657 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 0b6907b..dd7fe6e 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 0000000..998a057
--- /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 dc7a7e2..0000000
--- 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;
-- 
GitLab