Add getters tests

This commit is contained in:
Toby Zerner 2021-01-07 11:18:50 +10:00
parent b9f6858a19
commit 9846de5267
1 changed files with 129 additions and 3 deletions

View File

@ -11,24 +11,150 @@
namespace Tobyz\Tests\JsonApiServer\feature; namespace Tobyz\Tests\JsonApiServer\feature;
use Tobyz\JsonApiServer\Context;
use Tobyz\JsonApiServer\JsonApi;
use Tobyz\JsonApiServer\Schema\Type;
use Tobyz\Tests\JsonApiServer\AbstractTestCase; use Tobyz\Tests\JsonApiServer\AbstractTestCase;
use Tobyz\Tests\JsonApiServer\MockAdapter;
class FieldGettersTest extends AbstractTestCase class FieldGettersTest extends AbstractTestCase
{ {
/**
* @var JsonApi
*/
private $api;
/**
* @var MockAdapter
*/
private $adapter;
public function setUp(): void public function setUp(): void
{ {
$this->api = new JsonApi('/');
$this->adapter = new MockAdapter([
'1' => (object) [
'id' => '1',
'test' => 'value',
'animal' => (object) ['id' => '1'],
'animals' => [
(object) ['id' => '1'],
(object) ['id' => '2']
]
]
]);
} }
public function test_attribute_values_are_retrieved_via_the_adapter_by_default() public function test_attribute_values_are_retrieved_via_the_adapter_by_default()
{ {
$this->markTestIncomplete(); $this->api->resource('users', $this->adapter, function (Type $type) {
$type->attribute('test');
});
$response = $this->api->handle(
$this->buildRequest('GET', '/users/1')
);
$document = json_decode($response->getBody());
$this->assertEquals('value', $document->data->attributes->test ?? null);
} }
public function test_attribute_getters_allow_a_custom_value_to_be_used() public function test_attribute_getters_allow_a_custom_value_to_be_used()
{ {
$this->markTestIncomplete(); $this->api->resource('users', $this->adapter, function (Type $type) {
$type->attribute('test')
->get(function ($model, Context $context) {
return 'custom';
});
});
$response = $this->api->handle(
$this->buildRequest('GET', '/users/1')
);
$document = json_decode($response->getBody());
$this->assertEquals('custom', $document->data->attributes->test ?? null);
} }
// to_one, to_many... public function test_has_one_values_are_retrieved_via_the_adapter_by_default()
{
$this->api->resource('users', $this->adapter, function (Type $type) {
$type->hasOne('animal')->withLinkage();
});
$this->api->resource('animals', new MockAdapter);
$response = $this->api->handle(
$this->buildRequest('GET', '/users/1')
);
$document = json_decode($response->getBody());
$this->assertEquals('1', $document->data->relationships->animal->data->id ?? null);
}
public function test_has_one_getters_allow_a_custom_value_to_be_used()
{
$this->api->resource('users', $this->adapter, function (Type $type) {
$type->hasOne('animal')->withLinkage()
->get(function ($model, Context $context) {
return (object) ['id' => '2'];
});
});
$this->api->resource('animals', new MockAdapter);
$response = $this->api->handle(
$this->buildRequest('GET', '/users/1')
);
$document = json_decode($response->getBody());
$this->assertEquals('2', $document->data->relationships->animal->data->id ?? null);
}
public function test_has_many_values_are_retrieved_via_the_adapter_by_default()
{
$this->api->resource('users', $this->adapter, function (Type $type) {
$type->hasMany('animals')->withLinkage();
});
$this->api->resource('animals', new MockAdapter);
$response = $this->api->handle(
$this->buildRequest('GET', '/users/1')
);
$document = json_decode($response->getBody());
$this->assertEquals('1', $document->data->relationships->animals->data[0]->id ?? null);
$this->assertEquals('2', $document->data->relationships->animals->data[1]->id ?? null);
}
public function test_has_many_getters_allow_a_custom_value_to_be_used()
{
$this->api->resource('users', $this->adapter, function (Type $type) {
$type->hasMany('animals')->withLinkage()
->get(function ($model, Context $context) {
return [
(object) ['id' => '2'],
(object) ['id' => '3']
];
});
});
$this->api->resource('animals', new MockAdapter);
$response = $this->api->handle(
$this->buildRequest('GET', '/users/1')
);
$document = json_decode($response->getBody());
$this->assertEquals('2', $document->data->relationships->animals->data[0]->id ?? null);
$this->assertEquals('3', $document->data->relationships->animals->data[1]->id ?? null);
}
} }