diff --git a/composer.json b/composer.json index 679380b28eead44c9aab11ccec3fde92c79be1bb..929a980f815a0c62c2f46bdc558a877a71eaa583 100644 --- a/composer.json +++ b/composer.json @@ -9,7 +9,7 @@ "homepage": "http://library.wur.nl" } ], - "version": "0.3.1", + "version": "0.3.2", "require": { "php": ">=7.0.0", "guzzlehttp/guzzle": "^6.3" diff --git a/src/Library/HttpClientTrait.php b/src/Library/HttpClientTrait.php index f622af603c9fdbe5a3eeae74bd3a8b5db9ffa35f..970da0548669c517e7c7a7a30a94e8d04d4df2a9 100644 --- a/src/Library/HttpClientTrait.php +++ b/src/Library/HttpClientTrait.php @@ -219,7 +219,7 @@ trait HttpClientTrait { /** - * run post request with the http_client + * send post request with the http_client * @param type $url post url * @param type $body post data * @param array $http_options optional http client options, is merged with options from get_http_options() @@ -235,6 +235,22 @@ trait HttpClientTrait { } + /** + * send put request with the http_client + * @param type $url put url + * @param type $body put data + * @param array $http_options optional http client options, is merged with options from get_http_options() + * @return \GuzzleHttp\Psr7\Response + */ + public function http_put(string $url, $body, array $http_options = []) { + + $this->debug("http put, url: $url, data size: " . count($body)); + + $options = $this->get_merged_http_options($http_options); + $options["body"] = $body; + return $this->http_request("PUT", $url, $options); + } + /** * low level routine to send http request with the http_client * @param string $method diff --git a/tests/Library/HttpClientTraitTest.php b/tests/Library/HttpClientTraitTest.php index 3895b278963c01a9d4d72c479a33e72b44db816f..83c8075e63cc9d7e139af2d4a75eb28f4231b43c 100644 --- a/tests/Library/HttpClientTraitTest.php +++ b/tests/Library/HttpClientTraitTest.php @@ -316,6 +316,58 @@ class HttpClientTraitTest extends \PHPUnit_Framework_TestCase { $this->assertEquals("<test>response 3</test>", $response->getBody(), 'request 3 response body'); } + + public function test_http_put() { + + $testclient = new HttpClient(); + //$testclient->set_logger(new \Monolog\Logger('test')); + + $responses = [ + new Response(200, ["Content-Type" => "text/xml"], "<test>response 1</test>"), + new Response(200, ["Content-Type" => "text/xml"], "<test>response 2</test>"), + new Response(200, ["Content-Type" => "text/xml"], "<test>response 3</test>"), + ]; + $request_history = []; + $mock_httpclient = get_mock_httpclient($responses, $request_history); + $testclient->set_http_client($mock_httpclient); + + // + $testclient->set_http_options(["headers" => ["Content-Type" => "text/xml"]]); + $response = $testclient->http_put("http://localhost/1", "<body>1</body>"); + // check if request is correctly done + $request = $request_history[0]['request']; + $this->assertEquals("PUT", $request->getMethod(), 'request 1 with PUT method'); + $this->assertEquals("http://localhost/1", $request->getUri(), 'request 1 url'); + $this->assertEquals(["text/xml"], $request->getHeader("Content-Type"), 'request 1 content type from default options'); + $this->assertEquals("<body>1</body>", $request->getBody(), 'request 1 body'); + // check response + $this->assertEquals($response, $testclient->get_http_response(), 'request 1 response is set in property'); + $this->assertEquals("<test>response 1</test>", $response->getBody(), 'request 1 response body'); + + $testclient->set_http_headers(["Content-Type" => "application/xml"]); + $response = $testclient->http_put("http://localhost/2", "<body>2</body>"); + // check if request is correctly done + $request = $request_history[1]['request']; + $this->assertEquals("PUT", $request->getMethod(), 'request 2 with PUT method'); + $this->assertEquals("http://localhost/2", $request->getUri(), 'request 2 url'); + $this->assertEquals(["application/xml"], $request->getHeader("Content-Type"), 'request 2 content type from default options'); + $this->assertEquals("<body>2</body>", $request->getBody(), 'request 2 body'); + // check response + $this->assertEquals($response, $testclient->get_http_response(), 'request 2 response is set in property'); + $this->assertEquals("<test>response 2</test>", $response->getBody(), 'request 2 response body'); + + $response = $testclient->http_put("http://localhost/3", "<body>3</body>", ["headers" => ["Content-Type" => "last/xml"]]); + // check if request is correctly done + $request = $request_history[2]['request']; + $this->assertEquals("PUT", $request->getMethod(), 'request 3 with PUT method'); + $this->assertEquals("http://localhost/3", $request->getUri(), 'request 3 url'); + $this->assertEquals(["last/xml"], $request->getHeader("Content-Type"), 'request 3 content type from default options'); + $this->assertEquals("<body>3</body>", $request->getBody(), 'request 3 body'); + // check response + $this->assertEquals($response, $testclient->get_http_response(), 'request 3 response is set in property'); + $this->assertEquals("<test>response 3</test>", $response->getBody(), 'request 3 response body'); + } + }