Skip to content

Commit

Permalink
added essential functions for API calls (solariumphp#650)
Browse files Browse the repository at this point in the history
* added essential functions for API calls
* switched to V1 as default
  • Loading branch information
Markus Kalkbrenner authored Feb 5, 2019
1 parent 1d46fc1 commit bc0b705
Show file tree
Hide file tree
Showing 4 changed files with 238 additions and 1 deletion.
71 changes: 70 additions & 1 deletion src/QueryType/Server/Api/Query.php
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ class Query extends AbstractQuery
* @var array
*/
protected $options = [
'version' => Request::API_V2,
'version' => Request::API_V1,
'method' => Request::METHOD_GET,
'resultclass' => QueryType::class,
];
Expand Down Expand Up @@ -79,6 +79,75 @@ public function getMethod(): string
return $this->getOption('method');
}

/**
* Set accept option.
*
* @param string $accept
*
* @return self Provides fluent interface
*/
public function setAccept($accept): self
{
$this->setOption('accept', $accept);
return $this;
}

/**
* Get accept option.
*
* @return string|null
*/
public function getAccept(): ?string
{
return $this->getOption('accept');
}

/**
* Set contenttype option.
*
* @param string $contentType
*
* @return self Provides fluent interface
*/
public function setContentType($contentType): self
{
$this->setOption('contenttype', $contentType);
return $this;
}

/**
* Get contenttype option.
*
* @return string|null
*/
public function getContentType(): ?string
{
return $this->getOption('contenttype');
}

/**
* Set rawdata option.
*
* @param string $rawData
*
* @return self Provides fluent interface
*/
public function setRawData($rawData): self
{
$this->setOption('rawdata', $rawData);
return $this;
}

/**
* Get method option.
*
* @return string|null
*/
public function getRawData(): ?string
{
return $this->getOption('rawdata');
}

/**
* Get a requestbuilder for this query.
*
Expand Down
12 changes: 12 additions & 0 deletions src/QueryType/Server/Api/RequestBuilder.php
Original file line number Diff line number Diff line change
Expand Up @@ -22,9 +22,21 @@ class RequestBuilder extends BaseRequestBuilder
public function build(QueryInterface $query)
{
$request = parent::build($query);

$request->setMethod($query->getMethod());
$request->setApi($query->getVersion());
$request->setIsServerRequest(true);

if ($accept = $query->getAccept()) {
$request->addHeader('Accept: '.$accept);
}
if ($contentType = $query->getContentType()) {
$request->addHeader('Content-Type: '.$contentType);
}
if ($rawData = $query->getRawData()) {
$request->setRawData($rawData);
}

return $request;
}
}
34 changes: 34 additions & 0 deletions tests/QueryType/Server/Api/QueryTest.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
<?php

namespace Solarium\Tests\QueryType\Server\Api;

use PHPUnit\Framework\TestCase;
use Solarium\Core\Client\Client;
use Solarium\Core\Client\Request;
use Solarium\QueryType\Server\Api\Query;

class QueryTest extends TestCase
{
/**
* @var Query
*/
protected $query;

public function setUp()
{
$this->query = new Query();
}

public function testGetType()
{
$this->assertSame(Client::QUERY_API, $this->query->getType());
}

public function testSetGetVersion()
{
$this->assertSame(Request::API_V1, $this->query->getVersion());

$this->query->setVersion(Request::API_V2);
$this->assertSame(Request::API_V2, $this->query->getVersion());
}
}
122 changes: 122 additions & 0 deletions tests/QueryType/Server/Api/RequestBuilderTest.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,122 @@
<?php

namespace Solarium\Tests\QueryType\Server\Api;

use PHPUnit\Framework\TestCase;
use Solarium\Core\Client\Request;
use Solarium\QueryType\Server\Api\Query;
use Solarium\QueryType\Server\Api\RequestBuilder;

class RequestBuilderTest extends TestCase
{
/**
* @var Query
*/
protected $query;

/**
* @var RequestBuilder
*/
protected $builder;

public function setUp()
{
$this->query = new Query();
$this->builder = new RequestBuilder();
}

public function testBuildParams()
{
$request = $this->builder->build($this->query);

$this->assertEquals(
[
'wt' => 'json',
'json.nl' => 'flat',
],
$request->getParams()
);
$this->assertSame(Request::METHOD_GET, $request->getMethod());
$this->assertTrue($request->getIsServerRequest());
$this->assertSame('?wt=json&json.nl=flat', $request->getUri());

$this->query->setHandler('dummy');
$request = $this->builder->build($this->query);

$this->assertEquals(
[
'wt' => 'json',
'json.nl' => 'flat',
],
$request->getParams()
);
$this->assertSame(Request::METHOD_GET, $request->getMethod());
$this->assertTrue($request->getIsServerRequest());
$this->assertSame('dummy?wt=json&json.nl=flat', $request->getUri());

$this->query->setAccept('foo/bar');
$request = $this->builder->build($this->query);

$this->assertEquals(
[
'wt' => 'json',
'json.nl' => 'flat',
],
$request->getParams()
);
$this->assertSame(Request::METHOD_GET, $request->getMethod());
$this->assertTrue($request->getIsServerRequest());
$this->assertSame('dummy?wt=json&json.nl=flat', $request->getUri());
$this->arrayHasKey('Accept: foo/bar', array_flip($request->getHeaders()));

$this->query->setContentType('foo;bar');
$request = $this->builder->build($this->query);

$this->assertEquals(
[
'wt' => 'json',
'json.nl' => 'flat',
],
$request->getParams()
);
$this->assertSame(Request::METHOD_GET, $request->getMethod());
$this->assertTrue($request->getIsServerRequest());
$this->assertSame('dummy?wt=json&json.nl=flat', $request->getUri());
$this->arrayHasKey('Accept: foo/bar', array_flip($request->getHeaders()));
$this->arrayHasKey('Content-Type: foo;bar', array_flip($request->getHeaders()));

$this->query->setMethod(Request::METHOD_HEAD);
$request = $this->builder->build($this->query);

$this->assertEquals(
[
'wt' => 'json',
'json.nl' => 'flat',
],
$request->getParams()
);
$this->assertSame(Request::METHOD_HEAD, $request->getMethod());
$this->assertTrue($request->getIsServerRequest());
$this->assertSame('dummy?wt=json&json.nl=flat', $request->getUri());
$this->arrayHasKey('Accept: foo/bar', array_flip($request->getHeaders()));
$this->arrayHasKey('Content-Type: foo;bar', array_flip($request->getHeaders()));

$this->query->setMethod(Request::METHOD_POST);
$this->query->setRawData('some data');
$request = $this->builder->build($this->query);

$this->assertEquals(
[
'wt' => 'json',
'json.nl' => 'flat',
],
$request->getParams()
);
$this->assertSame(Request::METHOD_POST, $request->getMethod());
$this->assertTrue($request->getIsServerRequest());
$this->assertSame('dummy?wt=json&json.nl=flat', $request->getUri());
$this->arrayHasKey('Accept: foo/bar', array_flip($request->getHeaders()));
$this->arrayHasKey('Content-Type: foo;bar', array_flip($request->getHeaders()));
$this->assertSame('some data', $request->getRawData());
}
}

0 comments on commit bc0b705

Please sign in to comment.