diff --git a/CHANGELOG.md b/CHANGELOG.md index 45c703f..929ecc0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,11 @@ CHANGE LOG ========== +## 5.0.6 (UPCOMING) + +* Fixed `ProjectResource` links hydration + + ## 5.0.5 (03/05/2025) * Fixed `FirewallRuleOutbound` hydration diff --git a/src/Entity/ProjectResource.php b/src/Entity/ProjectResource.php index f308b08..f5067ee 100644 --- a/src/Entity/ProjectResource.php +++ b/src/Entity/ProjectResource.php @@ -27,4 +27,15 @@ final class ProjectResource extends AbstractEntity public array $links; public string $status; + + public function build(array $parameters): void + { + foreach ($parameters as $property => $value) { + if ('links' === static::convertToCamelCase($property) && $value instanceof \stdClass) { + $parameters[$property] = \get_object_vars($value); + } + } + + parent::build($parameters); + } } diff --git a/tests/ProjectResourceEntityTest.php b/tests/ProjectResourceEntityTest.php index 388467d..7af8785 100644 --- a/tests/ProjectResourceEntityTest.php +++ b/tests/ProjectResourceEntityTest.php @@ -42,4 +42,23 @@ public function testConstructor(): void self::assertSame(['self' => 'https://api.digitalocean.com/v2/droplets/123456789'], $projectResource->links); self::assertSame('already_assigned', $projectResource->status); } + + public function testConstructorAcceptsApiShapedLinksObject(): void + { + $projectResource = new ProjectResource([ + 'urn' => 'do:droplet:123456789', + 'assigned_at' => '2022-08-04T04:26:24Z', + 'links' => (object) [ + 'self' => 'https://api.digitalocean.com/v2/droplets/123456789', + ], + 'status' => 'already_assigned', + ]); + + self::assertInstanceOf(AbstractEntity::class, $projectResource); + self::assertInstanceOf(ProjectResource::class, $projectResource); + self::assertSame('do:droplet:123456789', $projectResource->urn); + self::assertSame('2022-08-04T04:26:24Z', $projectResource->assignedAt); + self::assertSame(['self' => 'https://api.digitalocean.com/v2/droplets/123456789'], $projectResource->links); + self::assertSame('already_assigned', $projectResource->status); + } }