Skip to content

Commit fe7c60c

Browse files
committed
Add transformer test
1 parent 06a6820 commit fe7c60c

File tree

5 files changed

+44
-13
lines changed

5 files changed

+44
-13
lines changed

src/Commands/stubs/transformer.inc.stub

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ class DummyClass extends TransformerAbstract
1414
* @param \App\Dummy $dummy
1515
* @return array
1616
*/
17-
public function transform(Dummy $dummy)
17+
public function transform(Dummy $dummy): array
1818
{
1919
return [
2020
'id' => (int) $dummy->id,

src/Commands/stubs/transformer.stub

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ class DummyClass extends TransformerAbstract
1111
* @param \App\Dummy $dummy
1212
* @return array
1313
*/
14-
public function transform(Dummy $dummy)
14+
public function transform(Dummy $dummy): array
1515
{
1616
return [
1717
'id' => (int) $dummy->id,

src/Transformers/FractalTransformer.php

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
namespace Yajra\DataTables\Transformers;
44

5+
use Illuminate\Support\Collection as LaravelCollection;
56
use League\Fractal\Manager;
67
use League\Fractal\Resource\Collection;
78
use League\Fractal\Serializer\SerializerAbstract;
@@ -17,7 +18,7 @@ class FractalTransformer
1718
/**
1819
* FractalTransformer constructor.
1920
*
20-
* @param \League\Fractal\Manager $fractal
21+
* @param \League\Fractal\Manager $fractal
2122
*/
2223
public function __construct(Manager $fractal)
2324
{
@@ -27,24 +28,27 @@ public function __construct(Manager $fractal)
2728
/**
2829
* Transform output using the given transformer and serializer.
2930
*
30-
* @param array $output
31+
* @param array|\Illuminate\Support\Collection $output
3132
* @param iterable $transformer
3233
* @param SerializerAbstract|null $serializer
3334
* @return array
3435
*/
35-
public function transform(array $output, iterable $transformer, SerializerAbstract $serializer = null): array
36-
{
36+
public function transform(
37+
array|LaravelCollection $output,
38+
iterable $transformer,
39+
SerializerAbstract $serializer = null
40+
): array {
3741
if ($serializer !== null) {
3842
$this->fractal->setSerializer($this->createSerializer($serializer));
3943
}
4044

4145
$collector = [];
4246
foreach ($transformer as $transform) {
4347
if ($transform != null) {
44-
$resource = new Collection($output, $this->createTransformer($transform));
45-
$collection = $this->fractal->createData($resource)->toArray();
46-
$transformed = $collection['data'] ?? $collection;
47-
$collector = array_map(
48+
$resource = new Collection($output, $this->createTransformer($transform));
49+
$collection = $this->fractal->createData($resource)->toArray();
50+
$transformed = $collection['data'] ?? $collection;
51+
$collector = array_map(
4852
function ($item_collector, $item_transformed) {
4953
if (! is_array($item_collector)) {
5054
$item_collector = [];

tests/FractalTest.php

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55

66
use Illuminate\Foundation\Testing\DatabaseTransactions;
77
use Yajra\DataTables\Fractal\Tests\Models\User;
8+
use Yajra\DataTables\Fractal\Tests\Transformers\UserTransformer;
89

910
class FractalTest extends TestCase
1011
{
@@ -13,21 +14,26 @@ class FractalTest extends TestCase
1314
/** @test */
1415
public function it_can_transform_response()
1516
{
16-
$response = $this->getAjax('/users');
17+
$json = $this->getAjax('/users');
1718

18-
$response->assertJson([
19+
$json->assertJson([
1920
'draw' => 0,
2021
'recordsTotal' => 20,
2122
'recordsFiltered' => 20,
2223
]);
24+
25+
$this->assertIsInt($json['data'][0]['id']);
26+
$this->assertIsString($json['data'][0]['name']);
2327
}
2428

2529
protected function setUp(): void
2630
{
2731
parent::setUp();
2832

2933
$this->app['router']->get('/users', function () {
30-
return datatables()->eloquent(User::query())->toJson();
34+
return datatables()->eloquent(User::query())
35+
->setTransformer(UserTransformer::class)
36+
->toJson();
3137
});
3238
}
3339
}
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
<?php
2+
3+
namespace Yajra\DataTables\Fractal\Tests\Transformers;
4+
5+
use League\Fractal\TransformerAbstract;
6+
use Yajra\DataTables\Fractal\Tests\Models\User;
7+
8+
class UserTransformer extends TransformerAbstract
9+
{
10+
/**
11+
* @param \Yajra\DataTables\Fractal\Tests\Models\User $user
12+
* @return array
13+
*/
14+
public function transform(User $user): array
15+
{
16+
return [
17+
'id' => (int) $user->id,
18+
'name' => $user->name,
19+
];
20+
}
21+
}

0 commit comments

Comments
 (0)