Skip to content

Commit

Permalink
test: 'override resource name' functionality
Browse files Browse the repository at this point in the history
  • Loading branch information
Mohammad-Alavi committed Jun 9, 2024
1 parent c45b16d commit d2c591a
Showing 1 changed file with 66 additions and 3 deletions.
69 changes: 66 additions & 3 deletions tests/Unit/Services/ResponseTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -141,28 +141,38 @@ public static function fieldsetDataProvider(): array
'without includes' => [
'fieldset' => ['User:id;email'],
'expected' => ['data.id', 'data.email'],
'missing' => ['data.object', 'data.name', 'data.created_at', 'data.updated_at', 'data.children', 'data.books']
],
'only filter nested include keys' => [
'fieldset' => ['Book:author;title'],
'expected' => ['data.object', 'data.id', 'data.email', 'data.name', 'data.created_at', 'data.updated_at', 'data.books.data.0.author', 'data.books.data.0.title'],
'missing' => ['data.books.data.0.id', 'data.books.data.0.created_at', 'data.books.data.0.updated_at']
],
'with first level includes - no filter' => [
'fieldset' => ['User:object,id;email;books'],
'expected' => ['data.object', 'data.id', 'data.email', 'data.books.data.0.object', 'data.books.data.0.id', 'data.books.data.0.title', 'data.books.data.0.author', 'data.books.data.0.created_at', 'data.books.data.0.updated_at'],
'missing' => ['data.name', 'data.created_at', 'data.updated_at']
],
'with first level includes - filter' => [
'fieldset' => ['User:object,id;email;books', 'Book:object,author'],
'expected' => ['data.object', 'data.id', 'data.email', 'data.books.data.0.object', 'data.books.data.0.author'],
'missing' => ['data.children', 'data.books.data.0.id', 'data.books.data.0.title', 'data.books.data.0.created_at', 'data.books.data.0.updated_at', 'data.name', 'data.created_at', 'data.updated_at']
],
'with nested includes - no filter' => [
'fieldset' => ['User:object,id;email,children;books'],
'expected' => ['data.object', 'data.id', 'data.email', 'data.children.data.0.object', 'data.children.data.0.id', 'data.children.data.0.email', 'data.children.data.0.books.data.0.object', 'data.children.data.0.books.data.0.id', 'data.children.data.0.books.data.0.title', 'data.children.data.0.books.data.0.author', 'data.children.data.0.books.data.0.created_at', 'data.children.data.0.books.data.0.updated_at'],
'missing' => ['data.name', 'data.created_at', 'data.updated_at']
],
'with nested includes - filter' => [
'fieldset' => ['User:object,id;email;children;books', 'Books:id'],
'expected' => ['data.object', 'data.id', 'data.email', 'data.children.data.0.object', 'data.children.data.0.id', 'data.children.data.0.email', 'data.children.data.0.books.data.0.id'],
'fieldset' => ['User:id;email;children;books', 'Book:id'],
'expected' => ['data.id', 'data.email', 'data.children.data.0.id', 'data.children.data.0.email', 'data.children.data.0.books.data.0.id'],
'missing' => ['data.object', 'data.children.data.0.object', 'data.children.data.0.books.data.0.object', 'data.children.data.0.books.data.0.title', 'data.children.data.0.books.data.0.author', 'data.children.data.0.books.data.0.created_at', 'data.children.data.0.books.data.0.updated_at', 'data.name', 'data.created_at', 'data.updated_at']
],
];
}

#[DataProvider('fieldsetDataProvider')]
public function testCanFilterResponse($fieldset, $expected): void
public function testCanFilterResponse($fieldset, $expected, $missing): void
{
request()->merge(['include' => 'books,children.books', 'fieldset' => $fieldset]);
$response = Response::createFrom($this->user);
Expand All @@ -174,6 +184,9 @@ public function testCanFilterResponse($fieldset, $expected): void
$result->has($expectation);
$result->has('meta.include', fn (AssertableJson $json) => $json->whereAll(['parent', 'children', 'books']));
}
foreach ($missing as $expectation) {
$result->missing($expectation);
}
}

public static function csvExcludeDataProvider(): array
Expand Down Expand Up @@ -283,4 +296,54 @@ public function testPaginatedResourceMetaDataAndExclude($exclude): void

$result->has('meta.include', fn (AssertableJson $json) => $json->whereAll(['parent', 'children', 'books']));
}

public static function validResourceNameProvider(): array
{
return [
'empty string' => [
'resourceName' => '',
],
'string' => [
'resourceName' => 'wat',
],
];
}

#[DataProvider('validResourceNameProvider')]
public function testCanOverrideMainResourceName($resourceName): void
{
request()->merge(['include' => 'books,children.books', 'fieldset' => ["{$resourceName}:id", 'Book:author,title']]);
$response = Response::createFrom($this->user);
$response->transformWith(UserTransformer::class);
$response->withResourceName($resourceName);

$result = AssertableJson::fromArray($response->toArray());

$result->missing('data.object');
}

public static function invalidResourceNameProvider(): array
{
return [
'null' => [
'resourceName' => null,
],
'false' => [
'resourceName' => false,
],
];
}

#[DataProvider('invalidResourceNameProvider')]
public function testGivenInvalidNameProvidedRevertToDefaultMainResourceName($resourceName): void
{
request()->merge(['include' => 'books,children.books', 'fieldset' => ["{$resourceName}:id", 'Book:author,title']]);
$response = Response::createFrom($this->user);
$response->transformWith(UserTransformer::class);
$response->withResourceName($resourceName);

$result = AssertableJson::fromArray($response->toArray());

$result->has('data.object');
}
}

0 comments on commit d2c591a

Please sign in to comment.