Skip to content

Commit

Permalink
fix(laravel): entrypoint serialization (#6541)
Browse files Browse the repository at this point in the history
  • Loading branch information
dunglas authored Aug 23, 2024
1 parent 4ee209e commit ebc61d5
Show file tree
Hide file tree
Showing 4 changed files with 20 additions and 6 deletions.
6 changes: 3 additions & 3 deletions src/Documentation/Action/EntrypointAction.php
Original file line number Diff line number Diff line change
Expand Up @@ -37,13 +37,13 @@ public function __construct(
private readonly ResourceNameCollectionFactoryInterface $resourceNameCollectionFactory,
private readonly ProviderInterface $provider,
private readonly ProcessorInterface $processor,
private readonly array $documentationFormats = []
private readonly array $documentationFormats = [],
) {
}

public function __invoke(Request $request)
{
static::$resourceNameCollection = $this->resourceNameCollectionFactory->create();
self::$resourceNameCollection = $this->resourceNameCollectionFactory->create();
$context = [
'request' => $request,
'spec_version' => (string) $request->query->get(LegacyOpenApiNormalizer::SPEC_VERSION),
Expand All @@ -65,6 +65,6 @@ class: Entrypoint::class,

public static function provide(): Entrypoint
{
return new Entrypoint(static::$resourceNameCollection);
return new Entrypoint(self::$resourceNameCollection);
}
}
4 changes: 2 additions & 2 deletions src/Laravel/ApiPlatformProvider.php
Original file line number Diff line number Diff line change
Expand Up @@ -535,8 +535,8 @@ public function register(): void
return new DocumentationAction($app->make(ResourceNameCollectionFactoryInterface::class), $config->get('api-platform.title') ?? '', $config->get('api-platform.description') ?? '', $config->get('api-platform.version') ?? '', $app->make(OpenApiFactoryInterface::class), $app->make(ProviderInterface::class), $app->make(ProcessorInterface::class), $app->make(Negotiator::class), $config->get('api-platform.docs_formats'));
});

$this->app->singleton(EntrypointAction::class, function (Application $app) {
return new EntrypointAction($app->make(ResourceNameCollectionFactoryInterface::class), $app->make(ProviderInterface::class), $app->make(ProcessorInterface::class), ['jsonld' => ['application/ld+json']]);
$this->app->singleton(EntrypointAction::class, function (Application $app) use ($config) {
return new EntrypointAction($app->make(ResourceNameCollectionFactoryInterface::class), $app->make(ProviderInterface::class), $app->make(ProcessorInterface::class), $config->get('api-platform.formats'));
});

$this->app->singleton(Pagination::class, function () use ($config) {
Expand Down
2 changes: 1 addition & 1 deletion src/Laravel/Eloquent/Metadata/ModelMetadata.php
Original file line number Diff line number Diff line change
Expand Up @@ -179,7 +179,7 @@ public function getRelations(Model $model): Collection
$file->next();
}

return collect(static::RELATION_METHODS)
return collect(self::RELATION_METHODS)
->contains(fn ($relationMethod) => str_contains($code, '$this->'.$relationMethod.'('));
})
->map(function (\ReflectionMethod $method) use ($model) {
Expand Down
14 changes: 14 additions & 0 deletions src/Laravel/Tests/JsonApiTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,20 @@ protected function defineEnvironment($app): void
});
}

public function testGetEntrypoint(): void
{
$response = $this->get('/api/', ['accept' => ['application/vnd.api+json']]);
$response->assertStatus(200);
$response->assertHeader('content-type', 'application/vnd.api+json; charset=utf-8');
$this->assertJsonContains([
'links' => [
'self' => 'http://localhost/api',
'book' => 'http://localhost/api/books',
],
],
$response->json());
}

public function testGetCollection(): void
{
$response = $this->get('/api/books', ['accept' => ['application/vnd.api+json']]);
Expand Down

0 comments on commit ebc61d5

Please sign in to comment.