From d240e35c1cafe31b00c9a2a8ed7b76b654744a88 Mon Sep 17 00:00:00 2001 From: Andrew Menino-Barlow Date: Tue, 30 Apr 2024 08:41:55 +0100 Subject: [PATCH] fix: Use late static binding in AbstractProvider Switched from self::$NAME to static::$NAME in the getMetadata method of the AbstractProvider class. This change is to ensure the name of the extending provider is used in the metadata. Previously, when extending from AbstractProvider, the metadata name was always AbstractProvider. Signed-off-by: Andrew Menino-Barlow --- src/implementation/provider/AbstractProvider.php | 2 +- tests/TestProvider.php | 13 +++---------- tests/unit/HooksTest.php | 3 --- 3 files changed, 4 insertions(+), 14 deletions(-) diff --git a/src/implementation/provider/AbstractProvider.php b/src/implementation/provider/AbstractProvider.php index 3598d3f..69a8c15 100644 --- a/src/implementation/provider/AbstractProvider.php +++ b/src/implementation/provider/AbstractProvider.php @@ -23,7 +23,7 @@ abstract class AbstractProvider implements Provider public function getMetadata(): MetadataInterface { - return new Metadata(self::$NAME); + return new Metadata(static::$NAME); } abstract public function resolveBooleanValue(string $flagKey, bool $defaultValue, ?EvaluationContext $context = null): ResolutionDetailsInterface; diff --git a/tests/TestProvider.php b/tests/TestProvider.php index c66c2e7..b11619f 100644 --- a/tests/TestProvider.php +++ b/tests/TestProvider.php @@ -4,26 +4,19 @@ namespace OpenFeature\Test; -use OpenFeature\implementation\common\Metadata; +use OpenFeature\implementation\provider\AbstractProvider; use OpenFeature\implementation\provider\ResolutionDetailsFactory; -use OpenFeature\interfaces\common\Metadata as MetadataInterface; use OpenFeature\interfaces\flags\EvaluationContext; use OpenFeature\interfaces\hooks\HooksAwareTrait; -use OpenFeature\interfaces\provider\Provider; use OpenFeature\interfaces\provider\ResolutionDetails; use Psr\Log\LoggerAwareTrait; -class TestProvider implements Provider +class TestProvider extends AbstractProvider { use HooksAwareTrait; use LoggerAwareTrait; - public const NAME = 'TestProvider'; - - public function getMetadata(): MetadataInterface - { - return new Metadata(self::NAME); - } + protected static string $NAME = 'TestProvider'; /** * Resolves the flag value for the provided flag key as a boolean diff --git a/tests/unit/HooksTest.php b/tests/unit/HooksTest.php index 51c7370..e65fd43 100644 --- a/tests/unit/HooksTest.php +++ b/tests/unit/HooksTest.php @@ -143,7 +143,6 @@ public function testEvaluationContextIsImmutableInAfterHooks(): void [$mutationHook], new HookHints(), ); - // @phpstan-ignore-next-line $this->assertNull($additionalEvaluationContext); } @@ -175,7 +174,6 @@ public function testEvaluationContextIsImmutableInErrorHooks(): void new HookHints(), ); - //@phpstan-ignore-next-line $this->assertNull($additionalEvaluationContext); } @@ -206,7 +204,6 @@ public function testEvaluationContextIsImmutableInFinallyHooks(): void new HookHints(), ); - // @phpstan-ignore-next-line $this->assertNull($additionalEvaluationContext); }