From b37a7723cbe4db3d4408afbd1ae8c11c07e167e2 Mon Sep 17 00:00:00 2001 From: Kristian Hempel Date: Fri, 25 Jul 2025 21:34:44 +0200 Subject: [PATCH 1/5] fix: add exception message for invalid path value --- src/Domain/Value/Link.php | 2 +- tests/Unit/Domain/Value/LinkTest.php | 15 +++++++++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/src/Domain/Value/Link.php b/src/Domain/Value/Link.php index a9943bf..8af5945 100644 --- a/src/Domain/Value/Link.php +++ b/src/Domain/Value/Link.php @@ -72,7 +72,7 @@ public function __construct(array $values) Assert::keyExists($values, 'path'); if (null !== $values['path']) { - $path = TrimmedNonEmptyString::fromString($values['path'])->toString(); + $path = TrimmedNonEmptyString::fromString($values['path'], 'The value of key "path" is invalid.')->toString(); } $this->path = $path ?? null; diff --git a/tests/Unit/Domain/Value/LinkTest.php b/tests/Unit/Domain/Value/LinkTest.php index 7005371..e5b8c8e 100644 --- a/tests/Unit/Domain/Value/LinkTest.php +++ b/tests/Unit/Domain/Value/LinkTest.php @@ -14,6 +14,8 @@ namespace Storyblok\Api\Tests\Unit\Domain\Value; +use Ergebnis\DataProvider\StringProvider; +use PHPUnit\Framework\Attributes\DataProviderExternal; use PHPUnit\Framework\Attributes\Test; use PHPUnit\Framework\TestCase; use Storyblok\Api\Domain\Value\Link; @@ -153,6 +155,19 @@ public function pathKeyMustExist(): void new Link($values); } + #[DataProviderExternal(StringProvider::class, 'blank')] + #[DataProviderExternal(StringProvider::class, 'empty')] + #[Test] + public function pathMustBeValidString(string $value): void + { + $values = self::faker()->linkResponse(['path' => $value]); + + self::expectExceptionMessage('The value of key "path" is invalid.'); + self::expectException(\InvalidArgumentException::class); + + new Link($values); + } + #[Test] public function isFolder(): void { From fabf6ccf168fc39c478d31135ca7c1ce03492276 Mon Sep 17 00:00:00 2001 From: Kristian Hempel Date: Tue, 29 Jul 2025 16:54:00 +0200 Subject: [PATCH 2/5] fix --- src/Domain/Value/Link.php | 2 +- tests/Unit/Domain/Value/LinkTest.php | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/src/Domain/Value/Link.php b/src/Domain/Value/Link.php index 8af5945..fe8f853 100644 --- a/src/Domain/Value/Link.php +++ b/src/Domain/Value/Link.php @@ -71,7 +71,7 @@ public function __construct(array $values) Assert::keyExists($values, 'path'); - if (null !== $values['path']) { + if (null !== $values['path'] && '' !== $values['path']) { $path = TrimmedNonEmptyString::fromString($values['path'], 'The value of key "path" is invalid.')->toString(); } diff --git a/tests/Unit/Domain/Value/LinkTest.php b/tests/Unit/Domain/Value/LinkTest.php index e5b8c8e..280eb61 100644 --- a/tests/Unit/Domain/Value/LinkTest.php +++ b/tests/Unit/Domain/Value/LinkTest.php @@ -156,7 +156,6 @@ public function pathKeyMustExist(): void } #[DataProviderExternal(StringProvider::class, 'blank')] - #[DataProviderExternal(StringProvider::class, 'empty')] #[Test] public function pathMustBeValidString(string $value): void { From 13fbe922c5ecb52bd9d60d0a111888cf72f4b8a8 Mon Sep 17 00:00:00 2001 From: Kristian Hempel Date: Fri, 5 Sep 2025 14:09:53 +0200 Subject: [PATCH 3/5] fix: update exception message --- src/Domain/Value/Link.php | 2 +- tests/Unit/Domain/Value/LinkTest.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Domain/Value/Link.php b/src/Domain/Value/Link.php index fe8f853..6d32e3a 100644 --- a/src/Domain/Value/Link.php +++ b/src/Domain/Value/Link.php @@ -72,7 +72,7 @@ public function __construct(array $values) Assert::keyExists($values, 'path'); if (null !== $values['path'] && '' !== $values['path']) { - $path = TrimmedNonEmptyString::fromString($values['path'], 'The value of key "path" is invalid.')->toString(); + $path = TrimmedNonEmptyString::fromString($values['path'], 'The value of key "path" must be an trimmed non empty string')->toString(); } $this->path = $path ?? null; diff --git a/tests/Unit/Domain/Value/LinkTest.php b/tests/Unit/Domain/Value/LinkTest.php index 280eb61..d22e284 100644 --- a/tests/Unit/Domain/Value/LinkTest.php +++ b/tests/Unit/Domain/Value/LinkTest.php @@ -161,7 +161,7 @@ public function pathMustBeValidString(string $value): void { $values = self::faker()->linkResponse(['path' => $value]); - self::expectExceptionMessage('The value of key "path" is invalid.'); + self::expectExceptionMessage('The value of key "path" must be an trimmed non empty string'); self::expectException(\InvalidArgumentException::class); new Link($values); From 85a53f7183a4aa5f04704177f395697ef17be496 Mon Sep 17 00:00:00 2001 From: Kristian Hempel Date: Fri, 5 Sep 2025 14:22:04 +0200 Subject: [PATCH 4/5] fix: add exception messages --- src/Domain/Value/Link.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Domain/Value/Link.php b/src/Domain/Value/Link.php index 6d32e3a..f1eac6d 100644 --- a/src/Domain/Value/Link.php +++ b/src/Domain/Value/Link.php @@ -64,10 +64,10 @@ public function __construct(array $values) $this->uuid = new Uuid($values['uuid']); Assert::keyExists($values, 'name'); - $this->name = TrimmedNonEmptyString::fromString($values['name'])->toString(); + $this->name = TrimmedNonEmptyString::fromString($values['name'], 'The value of key "name" must be an trimmed non empty string')->toString(); Assert::keyExists($values, 'slug'); - $this->slug = TrimmedNonEmptyString::fromString($values['slug'])->toString(); + $this->slug = TrimmedNonEmptyString::fromString($values['slug'], 'The value of key "slug" must be an trimmed non empty string')->toString(); Assert::keyExists($values, 'path'); @@ -78,7 +78,7 @@ public function __construct(array $values) $this->path = $path ?? null; Assert::keyExists($values, 'real_path'); - $this->realPath = TrimmedNonEmptyString::fromString($values['real_path'])->toString(); + $this->realPath = TrimmedNonEmptyString::fromString($values['real_path'], 'The value of key "real_path" must be an trimmed non empty string')->toString(); Assert::keyExists($values, 'position'); Assert::integer($values['position']); From 9f4ef25e3bac1599de72d6a490cfc78e4bb6c077 Mon Sep 17 00:00:00 2001 From: Kristian Hempel Date: Fri, 5 Sep 2025 14:35:32 +0200 Subject: [PATCH 5/5] fix --- src/Domain/Value/Link.php | 14 +++++++------- tests/Unit/Domain/Value/LinkTest.php | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/Domain/Value/Link.php b/src/Domain/Value/Link.php index f1eac6d..1ca0c2e 100644 --- a/src/Domain/Value/Link.php +++ b/src/Domain/Value/Link.php @@ -45,7 +45,7 @@ public function __construct(array $values) { Assert::keyExists($values, 'id'); - Assert::integer($values['id']); + Assert::integer($values['id'], 'The value of the "id" key must be an integer. Got: %s'); $this->id = new Id($values['id']); Assert::keyExists($values, 'parent_id'); @@ -64,24 +64,24 @@ public function __construct(array $values) $this->uuid = new Uuid($values['uuid']); Assert::keyExists($values, 'name'); - $this->name = TrimmedNonEmptyString::fromString($values['name'], 'The value of key "name" must be an trimmed non empty string')->toString(); + $this->name = TrimmedNonEmptyString::fromString($values['name'], 'The value of the "name" key must be a non-empty, trimmed string. Got: %s')->toString(); Assert::keyExists($values, 'slug'); - $this->slug = TrimmedNonEmptyString::fromString($values['slug'], 'The value of key "slug" must be an trimmed non empty string')->toString(); + $this->slug = TrimmedNonEmptyString::fromString($values['slug'], 'The value of the "slug" key must be a non-empty, trimmed string. Got: %s')->toString(); Assert::keyExists($values, 'path'); if (null !== $values['path'] && '' !== $values['path']) { - $path = TrimmedNonEmptyString::fromString($values['path'], 'The value of key "path" must be an trimmed non empty string')->toString(); + $path = TrimmedNonEmptyString::fromString($values['path'], 'The value of the "path" key must be a non-empty, trimmed string. Got: %s')->toString(); } $this->path = $path ?? null; Assert::keyExists($values, 'real_path'); - $this->realPath = TrimmedNonEmptyString::fromString($values['real_path'], 'The value of key "real_path" must be an trimmed non empty string')->toString(); + $this->realPath = TrimmedNonEmptyString::fromString($values['real_path'], 'The value of the "real_path" key must be a non-empty, trimmed string. Got: %s')->toString(); Assert::keyExists($values, 'position'); - Assert::integer($values['position']); + Assert::integer($values['position'], 'The value of the "position" key must be an integer. Got: %s'); $this->position = $values['position']; Assert::keyExists($values, 'is_folder'); @@ -94,7 +94,7 @@ public function __construct(array $values) $this->isPublished = true === $values['published']; Assert::keyExists($values, 'alternates'); - Assert::isArray($values['alternates']); + Assert::isArray($values['alternates'], 'The value of the "alternates" key must be an array. Got: %s'); $this->alternates = array_map(static fn (array $values) => new LinkAlternate($values), $values['alternates']); } diff --git a/tests/Unit/Domain/Value/LinkTest.php b/tests/Unit/Domain/Value/LinkTest.php index d22e284..e5fa444 100644 --- a/tests/Unit/Domain/Value/LinkTest.php +++ b/tests/Unit/Domain/Value/LinkTest.php @@ -161,7 +161,7 @@ public function pathMustBeValidString(string $value): void { $values = self::faker()->linkResponse(['path' => $value]); - self::expectExceptionMessage('The value of key "path" must be an trimmed non empty string'); + self::expectExceptionMessage('The value of the "path" key must be a non-empty, trimmed string. Got: ""'); self::expectException(\InvalidArgumentException::class); new Link($values);