Commit 1ab43733 authored by Bas de Nooijer's avatar Bas de Nooijer

Added unittests

parent edc49c22
......@@ -54,11 +54,13 @@ class Solarium_Client_Adapter_PeclHttp extends Solarium_Client_Adapter
*/
protected function _init()
{
// @codeCoverageIgnoreStart
if (!function_exists('http_get')) {
throw new Solarium_Exception('Pecl_http is not available, install it to use the PeclHttp adapter');
}
parent::_init();
// @codeCoverageIgnoreEnd
}
/**
......@@ -82,6 +84,7 @@ class Solarium_Client_Adapter_PeclHttp extends Solarium_Client_Adapter
*/
protected function _getData($request)
{
// @codeCoverageIgnoreStart
$uri = $this->getBaseUri() . $request->getUri();
$method = $request->getMethod();
$options = $this->_createOptions($request);
......@@ -112,6 +115,7 @@ class Solarium_Client_Adapter_PeclHttp extends Solarium_Client_Adapter
}
return array($data, $headers);
// @codeCoverageIgnoreEnd
}
/**
......@@ -124,6 +128,7 @@ class Solarium_Client_Adapter_PeclHttp extends Solarium_Client_Adapter
*/
protected function _createOptions($request)
{
// @codeCoverageIgnoreStart
$options = array(
'timeout' => $this->getTimeout()
);
......@@ -134,6 +139,7 @@ class Solarium_Client_Adapter_PeclHttp extends Solarium_Client_Adapter
}
}
return $options;
// @codeCoverageIgnoreEnd
}
/**
......
<?php
/**
* Copyright 2011 Bas de Nooijer. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this listof conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*
* The views and conclusions contained in the software and documentation are
* those of the authors and should not be interpreted as representing official
* policies, either expressed or implied, of the copyright holder.
*/
class Solarium_Client_Adapter_PeclHttpTest extends PHPUnit_Framework_TestCase
{
/**
* @var Solarium_Client_Adapter_PeclHttp
*/
protected $_adapter;
public function setUp()
{
if (!function_exists('http_get')) {
$this->markTestSkipped('Pecl_http not available, skipping PeclHttp adapter tests');
}
$this->_adapter = new Solarium_Client_Adapter_PeclHttp();
}
public function testCheck()
{
$data = 'data';
$headers = array('X-dummy: data');
// this should be ok, no exception
$this->_adapter->check($data, $headers);
$data = '';
$headers = array();
$this->setExpectedException('Solarium_Exception');
$this->_adapter->check($data, $headers);
}
public function testExecute()
{
$headers = array('HTTP/1.0 200 OK');
$body = 'data';
$data = array($body, $headers);
$request = new Solarium_Client_Request();
$mock = $this->getMock('Solarium_Client_Adapter_PeclHttp', array('_getData'));
$mock->expects($this->once())
->method('_getData')
->with($request)
->will($this->returnValue($data));
$response = $mock->execute($request);
$this->assertEquals($body,$response->getBody());
$this->assertEquals($headers,$response->getHeaders());
}
}
\ No newline at end of file
<?php
/**
* Copyright 2011 Bas de Nooijer. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this listof conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*
* The views and conclusions contained in the software and documentation are
* those of the authors and should not be interpreted as representing official
* policies, either expressed or implied, of the copyright holder.
*/
class Solarium_Client_RequestBuilder_MoreLikeThisTest extends PHPUnit_Framework_TestCase
{
/**
* @var Solarium_Query_MoreLikeThis
*/
protected $_query;
/**
* @var Solarium_Client_RequestBuilder_MoreLikeThis
*/
protected $_builder;
public function setUp()
{
$this->_query = new Solarium_Query_MoreLikeThis;
$this->_builder = new Solarium_Client_RequestBuilder_MoreLikeThis;
}
public function testBuildParams()
{
$this->_query->setInterestingTerms('test');
$this->_query->setMatchInclude(true);
$this->_query->setStart(12);
$this->_query->setMltFields('description,name');
$this->_query->setMinimumTermFrequency(1);
$this->_query->setMinimumDocumentFrequency(3);
$this->_query->setMinimumWordLength(2);
$this->_query->setMaximumWordLength(15);
$this->_query->setMaximumQueryTerms(4);
$this->_query->setMaximumNumberOfTokens(5);
$this->_query->setBoost(true);
$this->_query->setQueryFields('description');
$request = $this->_builder->build($this->_query);
$this->assertEquals(
array(
'mlt.interestingTerms' => 'test',
'mlt.match.include' => 'true',
'mlt.match.offset' => 12,
'mlt.fl' => 'description,name',
'mlt.mintf' => 1,
'mlt.mindf' => 3,
'mlt.minwl' => 2,
'mlt.maxwl' => 15,
'mlt.maxqt' => 4,
'mlt.maxntp' => 5,
'mlt.boost' => 'true',
'mlt.qf' => 'description',
'q' => '*:*',
'fl' => '*,score',
'rows' => 10,
'start' => 12,
'wt' => 'json'
),
$request->getParams()
);
$this->assertEquals(
Solarium_Client_Request::METHOD_GET,
$request->getMethod()
);
}
public function testBuildWithQueryStream()
{
$content = 'test content';
$this->_query->setQuery($content);
$this->_query->setQueryStream(true);
$request = $this->_builder->build($this->_query);
$this->assertEquals(Solarium_Client_Request::METHOD_POST,$request->getMethod());
$this->assertEquals(null,$request->getParam('q'));
$this->assertEquals($content,$request->getRawData());
$this->assertTrue(in_array('Content-Type: text/plain; charset=utf-8', $request->getHeaders()));
}
}
\ No newline at end of file
<?php
/**
* Copyright 2011 Bas de Nooijer. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this listof conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*
* The views and conclusions contained in the software and documentation are
* those of the authors and should not be interpreted as representing official
* policies, either expressed or implied, of the copyright holder.
*/
class Solarium_Client_ResponseParser_MoreLikeThisTest extends PHPUnit_Framework_TestCase
{
public function testParse()
{
$data = array(
'response' => array(
'docs' => array(
array('fieldA' => 1, 'fieldB' => 'Test'),
array('fieldA' => 2, 'fieldB' => 'Test2')
),
'numFound' => 503
),
'responseHeader' => array(
'status' => 1,
'QTime' => 13,
),
'interestingTerms' => array(
'key1', 'value1', 'key2', 'value2'
),
'match' => array(
'docs' => array(
array('fieldA' => 5, 'fieldB' => 'Test5'),
),
),
);
$query = new Solarium_Query_MoreLikeThis();
$query->setInterestingTerms('details');
$query->setMatchInclude(true);
$resultStub = $this->getMock('Solarium_Result_MoreLikeThis', array(), array(), '', false);
$resultStub->expects($this->any())
->method('getData')
->will($this->returnValue($data));
$resultStub->expects($this->any())
->method('getQuery')
->will($this->returnValue($query));
$parser = new Solarium_Client_ResponseParser_MoreLikeThis;
$result = $parser->parse($resultStub);
$this->assertEquals(array('key1' => 'value1', 'key2' => 'value2'), $result['interestingTerms']);
$this->assertEquals(5, $result['match']->fieldA);
}
}
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