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
$response = $client->request();
// throw an exception in case of a HTTP error
if ($response->isError()) {
throw new HttpException(
$response->getMessage(),
$response->getStatus()
return $this->prepareResponse(
$request,
$response
);
}
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
* response
......@@ -266,10 +252,5 @@ class ZendHttp extends Configurable implements AdapterInterface
file_get_contents($filename),
'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
);
}
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()
{
$timeout = 13;
......
......@@ -133,6 +133,28 @@ class PeclHttpTest extends \PHPUnit_Framework_TestCase
), $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()
{
$request = new Request;
......
......@@ -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
'username' => 'testuser',
'password' => 'testpass',
),
'file' => __FILE__,
);
$this->request->setOptions($options);
......@@ -494,7 +495,7 @@ authentication: Array
resource: /myHandler?param1=1&param2=test+content
resource urldecoded: /myHandler?param1=1&param2=test content
raw data: post data
file upload:
file upload: ' . __FILE__ . '
',
(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