Commit bb517cea authored by Bas de Nooijer's avatar Bas de Nooijer

Improved client adapter unittests to 100% coverage, including some fixes

parent 892eb74c
...@@ -201,26 +201,12 @@ class ZendHttp extends Configurable implements AdapterInterface ...@@ -201,26 +201,12 @@ class ZendHttp extends Configurable implements AdapterInterface
$response = $client->request(); $response = $client->request();
// throw an exception in case of a HTTP error return $this->prepareResponse(
if ($response->isError()) { $request,
throw new HttpException( $response
$response->getMessage(),
$response->getStatus()
); );
} }
if ($request->getMethod() == Request::METHOD_HEAD) {
$data = '';
} else {
$data = $response->getBody();
}
// this is used because getHeaders doesn't return the HTTP header...
$headers = explode("\n", $response->getHeadersAsString());
return new Response($data, $headers);
}
/** /**
* Prepare a solarium response from the given request and client * Prepare a solarium response from the given request and client
* response * response
...@@ -266,10 +252,5 @@ class ZendHttp extends Configurable implements AdapterInterface ...@@ -266,10 +252,5 @@ class ZendHttp extends Configurable implements AdapterInterface
file_get_contents($filename), file_get_contents($filename),
'application/octet-stream; charset=binary' 'application/octet-stream; charset=binary'
); );
// set query params as "multipart/form-data" fields
foreach ($request->getParams() as $name => $value) {
$client->setFileUpload(null, $name, $value, 'text/plain; charset=utf-8');
}
} }
} }
...@@ -162,6 +162,26 @@ class HttpTest extends \PHPUnit_Framework_TestCase ...@@ -162,6 +162,26 @@ class HttpTest extends \PHPUnit_Framework_TestCase
); );
} }
public function testCreateContextPostFileRequest()
{
$timeout = 13;
$method = Request::METHOD_POST;
$data = 'test123';
$request = new Request();
$request->setMethod($method);
$request->setFileUpload(__FILE__);
$endpoint = new Endpoint();
$endpoint->setTimeout($timeout);
$context = $this->adapter->createContext($request, $endpoint);
$this->assertEquals(
array('http' => array('method' => $method, 'timeout' => $timeout, 'content' => file_get_contents(__FILE__), 'header' => 'Content-Type: multipart/form-data')),
stream_context_get_options($context)
);
}
public function testCreateContextWithAuthorization() public function testCreateContextWithAuthorization()
{ {
$timeout = 13; $timeout = 13;
......
...@@ -133,6 +133,28 @@ class PeclHttpTest extends \PHPUnit_Framework_TestCase ...@@ -133,6 +133,28 @@ class PeclHttpTest extends \PHPUnit_Framework_TestCase
), $httpRequest->getOptions()); ), $httpRequest->getOptions());
} }
public function testToHttpRequestWithFile()
{
$request = new Request();
$request->setMethod(Request::METHOD_POST);
$request->setFileUpload(__FILE__);
$endpoint = new Endpoint();
$endpoint->setTimeout(10);
$httpRequest = $this->adapter->toHttpRequest($request, $endpoint);
$this->assertEquals(
array(
array(
'name' => 'content',
'type' => 'application/octet-stream; charset=binary',
'file' => __FILE__,
)
),
$httpRequest->getPostFiles()
);
}
public function testToHttpRequestWithDefaultContentType() public function testToHttpRequestWithDefaultContentType()
{ {
$request = new Request; $request = new Request;
......
...@@ -175,4 +175,39 @@ class ZendHttpTest extends \PHPUnit_Framework_TestCase ...@@ -175,4 +175,39 @@ class ZendHttpTest extends \PHPUnit_Framework_TestCase
); );
} }
public function testExecuteWithInvalidMethod()
{
$request = new Request();
$request->setMethod('invalid');
$endpoint = new Endpoint();
$this->setExpectedException('Solarium\Exception\OutOfBoundsException');
$this->adapter->execute($request, $endpoint);
}
public function testExecuteWithFileUpload()
{
$request = new Request();
$request->setMethod(Request::METHOD_POST);
$request->setFileUpload(__FILE__);
$endpoint = new Endpoint();
$response = new \Zend_Http_Response(200, array('status' => 'HTTP 1.1 200 OK'), 'dummy');
$mock = $this->getMock('Zend_Http_Client');
$mock->expects($this->once())
->method('setFileUpload')
->with(
$this->equalTo('content'),
$this->equalTo('content'),
$this->equalTo(file_get_contents(__FILE__)),
$this->equalTo('application/octet-stream; charset=binary')
);
$mock->expects($this->once())
->method('request')
->will($this->returnValue($response));
$this->adapter->setZendHttp($mock);
$this->adapter->execute($request, $endpoint);
}
} }
...@@ -475,6 +475,7 @@ class RequestTest extends \PHPUnit_Framework_TestCase ...@@ -475,6 +475,7 @@ class RequestTest extends \PHPUnit_Framework_TestCase
'username' => 'testuser', 'username' => 'testuser',
'password' => 'testpass', 'password' => 'testpass',
), ),
'file' => __FILE__,
); );
$this->request->setOptions($options); $this->request->setOptions($options);
...@@ -494,7 +495,7 @@ authentication: Array ...@@ -494,7 +495,7 @@ authentication: Array
resource: /myHandler?param1=1&param2=test+content resource: /myHandler?param1=1&param2=test+content
resource urldecoded: /myHandler?param1=1&param2=test content resource urldecoded: /myHandler?param1=1&param2=test content
raw data: post data raw data: post data
file upload: file upload: ' . __FILE__ . '
', ',
(string) $this->request (string) $this->request
); );
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment