diff --git a/Logger/ContextExtractorLocator.php b/Logger/ContextExtractorLocator.php index bfde568..adbf8d5 100644 --- a/Logger/ContextExtractorLocator.php +++ b/Logger/ContextExtractorLocator.php @@ -15,16 +15,13 @@ namespace FRZB\Component\MetricsPower\Logger; -use Fp\Collections\HashMap; use FRZB\Component\DependencyInjection\Attribute\AsService; use FRZB\Component\MetricsPower\Logger\ContextExtractor\ContextExtractorInterface; use FRZB\Component\MetricsPower\Logger\ContextExtractor\DefaultContextExtractor; use FRZB\Component\MetricsPower\Logger\Exception\ContextExtractorLocatorException; use Psr\Container\ContainerExceptionInterface; use Psr\Container\NotFoundExceptionInterface; -use Symfony\Component\DependencyInjection\Attribute\TaggedIterator; use Symfony\Component\DependencyInjection\Attribute\TaggedLocator; -use Symfony\Component\DependencyInjection\ServiceLocator; use Symfony\Contracts\Service\ServiceProviderInterface; #[AsService] @@ -33,8 +30,7 @@ public function __construct( #[TaggedLocator(ContextExtractorInterface::class, defaultIndexMethod: 'getType')] private ServiceProviderInterface $serviceProvider, - ) { - } + ) {} public function get(object|string $target): ContextExtractorInterface { diff --git a/Logger/Exception/ContextExtractorLocatorException.php b/Logger/Exception/ContextExtractorLocatorException.php index e064e5f..dbf5f94 100644 --- a/Logger/Exception/ContextExtractorLocatorException.php +++ b/Logger/Exception/ContextExtractorLocatorException.php @@ -2,10 +2,19 @@ declare(strict_types=1); +/** + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * + * Copyright (c) 2024 Mykhailo Shtanko fractalzombie@gmail.com + * + * For the full copyright and license information, please view the LICENSE.MD + * file that was distributed with this source code. + */ + namespace FRZB\Component\MetricsPower\Logger\Exception; use FRZB\Component\MetricsPower\Exception\MetricsPowerException; -final class ContextExtractorLocatorException extends MetricsPowerException -{ -} \ No newline at end of file +final class ContextExtractorLocatorException extends MetricsPowerException {} diff --git a/Logger/MetricsPowerLogger.php b/Logger/MetricsPowerLogger.php index 5e02fc4..0a5a5ca 100644 --- a/Logger/MetricsPowerLogger.php +++ b/Logger/MetricsPowerLogger.php @@ -16,7 +16,6 @@ namespace FRZB\Component\MetricsPower\Logger; use FRZB\Component\DependencyInjection\Attribute\AsService; -use FRZB\Component\MetricsPower\Attribute\OptionsInterface; use Psr\Log\LoggerInterface; #[AsService] diff --git a/Logger/MetricsPowerLoggerInterface.php b/Logger/MetricsPowerLoggerInterface.php index 8dc0ada..1f538a5 100644 --- a/Logger/MetricsPowerLoggerInterface.php +++ b/Logger/MetricsPowerLoggerInterface.php @@ -18,7 +18,6 @@ namespace FRZB\Component\MetricsPower\Logger; use FRZB\Component\DependencyInjection\Attribute\AsAlias; -use FRZB\Component\MetricsPower\Attribute\OptionsInterface; /** * @template TTarget of object diff --git a/Tests/Dump/AttributeHelperTest.php b/Tests/Dump/AttributeHelperTest.php deleted file mode 100644 index 477e6e8..0000000 --- a/Tests/Dump/AttributeHelperTest.php +++ /dev/null @@ -1,108 +0,0 @@ - [ -// 'class_name' => TransactionalOnTerminateMessage::class, -// 'has_attributes' => true, -// ]; -// -// yield sprintf('%s', ClassHelper::getShortName(TransactionalOnResponseMessage::class)) => [ -// 'class_name' => TransactionalOnResponseMessage::class, -// 'has_attributes' => true, -// ]; -// -// yield sprintf('%s', ClassHelper::getShortName(TransactionalOnHandledMessage::class)) => [ -// 'class_name' => TransactionalOnHandledMessage::class, -// 'has_attributes' => true, -// ]; -// -// yield sprintf('%s', ClassHelper::getShortName(ExtendedTransactionalMessage::class)) => [ -// 'class_name' => ExtendedTransactionalMessage::class, -// 'has_attributes' => true, -// ]; -// -// yield sprintf('%s', ClassHelper::getShortName(NonTransactionalMessage::class)) => [ -// 'class_name' => NonTransactionalMessage::class, -// 'has_attributes' => false, -// ]; -// -// yield 'InvalidClassName' => [ -// 'class_name' => 'InvalidClassName', -// 'has_attributes' => false, -// ]; -// } -// } diff --git a/Tests/Dump/ClassHelperTest.php b/Tests/Dump/ClassHelperTest.php deleted file mode 100644 index 757a5db..0000000 --- a/Tests/Dump/ClassHelperTest.php +++ /dev/null @@ -1,201 +0,0 @@ - [ -// 'class_name' => TransactionalOnTerminateMessage::class, -// 'short_class_name' => 'TransactionalOnTerminateMessage', -// ]; -// -// yield sprintf('%s', ClassHelper::getShortName(TransactionalOnResponseMessage::class)) => [ -// 'class_name' => TransactionalOnResponseMessage::class, -// 'short_class_name' => 'TransactionalOnResponseMessage', -// ]; -// -// yield sprintf('%s', ClassHelper::getShortName(TransactionalOnHandledMessage::class)) => [ -// 'class_name' => TransactionalOnHandledMessage::class, -// 'short_class_name' => 'TransactionalOnHandledMessage', -// ]; -// -// yield sprintf('%s', ClassHelper::getShortName(NonTransactionalMessage::class)) => [ -// 'class_name' => NonTransactionalMessage::class, -// 'short_class_name' => 'NonTransactionalMessage', -// ]; -// -// yield 'InvalidClassName' => [ -// 'class_name' => 'InvalidClassName', -// 'short_class_name' => 'InvalidClassName', -// ]; -// } -// -// public function reflectionProvider(): iterable -// { -// yield sprintf('%s', ClassHelper::getShortName(TransactionalOnTerminateMessage::class)) => [ -// 'class_name' => TransactionalOnTerminateMessage::class, -// 'is_null' => false, -// ]; -// -// yield sprintf('%s', ClassHelper::getShortName(TransactionalOnResponseMessage::class)) => [ -// 'class_name' => TransactionalOnResponseMessage::class, -// 'is_null' => false, -// ]; -// -// yield sprintf('%s', ClassHelper::getShortName(TransactionalOnHandledMessage::class)) => [ -// 'class_name' => TransactionalOnHandledMessage::class, -// 'is_null' => false, -// ]; -// -// yield sprintf('%s', ClassHelper::getShortName(ExtendedTransactionalMessage::class)) => [ -// 'class_name' => ExtendedTransactionalMessage::class, -// 'is_null' => false, -// ]; -// -// yield sprintf('%s', ClassHelper::getShortName(NonTransactionalMessage::class)) => [ -// 'class_name' => NonTransactionalMessage::class, -// 'is_null' => false, -// ]; -// -// yield 'InvalidClassName' => [ -// 'class_name' => 'InvalidClassName', -// 'is_null' => true, -// ]; -// } -// -// public function parentReflectionProvider(): iterable -// { -// yield sprintf('%s', ClassHelper::getShortName(TransactionalOnTerminateMessage::class)) => [ -// 'class_name' => TransactionalOnTerminateMessage::class, -// 'is_null' => true, -// ]; -// -// yield sprintf('%s', ClassHelper::getShortName(TransactionalOnResponseMessage::class)) => [ -// 'class_name' => TransactionalOnResponseMessage::class, -// 'is_null' => true, -// ]; -// -// yield sprintf('%s', ClassHelper::getShortName(TransactionalOnHandledMessage::class)) => [ -// 'class_name' => TransactionalOnHandledMessage::class, -// 'is_null' => true, -// ]; -// -// yield sprintf('%s', ClassHelper::getShortName(ExtendedTransactionalMessage::class)) => [ -// 'class_name' => ExtendedTransactionalMessage::class, -// 'is_null' => false, -// ]; -// -// yield sprintf('%s', ClassHelper::getShortName(NonTransactionalMessage::class)) => [ -// 'class_name' => NonTransactionalMessage::class, -// 'is_null' => true, -// ]; -// -// yield 'InvalidClassName' => [ -// 'class_name' => 'InvalidClassName', -// 'is_null' => true, -// ]; -// } -// -// public function reflectionAttributesProvider(): iterable -// { -// yield sprintf('%s', ClassHelper::getShortName(TransactionalOnTerminateMessage::class)) => [ -// 'class_name' => TransactionalOnTerminateMessage::class, -// 'is_empty' => false, -// ]; -// -// yield sprintf('%s', ClassHelper::getShortName(TransactionalOnResponseMessage::class)) => [ -// 'class_name' => TransactionalOnResponseMessage::class, -// 'is_empty' => false, -// ]; -// -// yield sprintf('%s', ClassHelper::getShortName(TransactionalOnHandledMessage::class)) => [ -// 'class_name' => TransactionalOnHandledMessage::class, -// 'is_empty' => false, -// ]; -// -// yield sprintf('%s', ClassHelper::getShortName(ExtendedTransactionalMessage::class)) => [ -// 'class_name' => ExtendedTransactionalMessage::class, -// 'is_empty' => true, -// ]; -// -// yield sprintf('%s', ClassHelper::getShortName(NonTransactionalMessage::class)) => [ -// 'class_name' => NonTransactionalMessage::class, -// 'is_empty' => true, -// ]; -// -// yield 'InvalidClassName' => [ -// 'class_name' => 'InvalidClassName', -// 'is_empty' => true, -// ]; -// } -// } diff --git a/Tests/Dump/EnvelopeHelperTest.php b/Tests/Dump/EnvelopeHelperTest.php deleted file mode 100644 index 8789c18..0000000 --- a/Tests/Dump/EnvelopeHelperTest.php +++ /dev/null @@ -1,66 +0,0 @@ -getMessage()::class; -// -// self::assertInstanceOf(Envelope::class, $envelope); -// self::assertSame($messageClass, $envelope->getMessage()::class); -// self::assertNotNull($envelope->last(DispatchAfterCurrentBusStamp::class)); -// } -// -// public function dataProvider(): iterable -// { -// yield sprintf('%s', ClassHelper::getShortName(TransactionalOnTerminateMessage::class)) => [ -// 'target' => new TransactionalOnTerminateMessage(), -// 'has_attributes' => true, -// ]; -// -// yield sprintf('%s', ClassHelper::getShortName(Envelope::class)) => [ -// 'target' => Envelope::wrap(new TransactionalOnTerminateMessage()), -// 'has_attributes' => false, -// ]; -// } -// } diff --git a/Tests/Pest.php b/Tests/Pest.php index adf32bb..0c4c804 100644 --- a/Tests/Pest.php +++ b/Tests/Pest.php @@ -1,4 +1,4 @@ -in('Feature'); +uses() + ->group('feature') + ->in('Feature'); + +uses() + ->group('unit') + ->in('Unit'); /* |-------------------------------------------------------------------------- @@ -48,11 +54,6 @@ | */ -function getSentryHub(): HubInterface|LegacyMockInterface|MockInterface -{ - return Mockery::mock(HubInterface::class); -} - function createTestMessage(): TestMessage { return new TestMessage(TestConstants::DEFAULT_ID); @@ -61,7 +62,7 @@ function createTestMessage(): TestMessage /** * @template TMessage * - * @param null|TMessage $message + * @param ?TMessage $message * * @return Envelope */ diff --git a/Tests/Stub/Message/TestMessageWithNoOptions.php b/Tests/Stub/Message/TestMessageWithNoOptions.php new file mode 100644 index 0000000..781de91 --- /dev/null +++ b/Tests/Stub/Message/TestMessageWithNoOptions.php @@ -0,0 +1,29 @@ +getShortName(); + } +} diff --git a/Tests/Unit/Helper/AttributeHelperTest.php b/Tests/Unit/Helper/AttributeHelperTest.php new file mode 100644 index 0000000..91e9c87 --- /dev/null +++ b/Tests/Unit/Helper/AttributeHelperTest.php @@ -0,0 +1,64 @@ + [ + 'class_name' => TestMessage::class, + 'has_attributes' => true, + ], + sprintf('%s', ClassHelper::getShortName(TestMessageWithAllOptions::class)) => [ + 'class_name' => TestMessageWithAllOptions::class, + 'has_attributes' => true, + ], + sprintf('%s', ClassHelper::getShortName(TestMessageWithNoOptions::class)) => [ + 'class_name' => TestMessageWithNoOptions::class, + 'has_attributes' => false, + ], + 'InvalidClassName' => [ + 'class_name' => 'InvalidClassName', + 'has_attributes' => false, + ], +]); + +test('It can get attributes', function (string $className, bool $hasAttributes): void { + $hasAttributes + ? expect(AttributeHelper::getAttributes($className, Metrical::class))->not()->toBeEmpty() + : expect(AttributeHelper::getAttributes($className, Metrical::class))->toBeEmpty(); +})->with('messages'); + +test('It can get attribute', function (string $className, bool $hasAttributes): void { + $hasAttributes + ? expect(AttributeHelper::getAttribute($className, Metrical::class))->not()->toBeEmpty() + : expect(AttributeHelper::getAttribute($className, Metrical::class))->toBeEmpty(); +})->with('messages'); + +test('It can get reflection attributes', function (string $className, bool $hasAttributes): void { + $hasAttributes + ? expect(AttributeHelper::getReflectionAttributes($className, Metrical::class))->not()->toBeEmpty() + : expect(AttributeHelper::getReflectionAttributes($className, Metrical::class))->toBeEmpty(); +})->with('messages'); + +test('It has attribute', function (string $className, bool $hasAttributes): void { + expect(AttributeHelper::hasAttribute($className, Metrical::class))->toBe($hasAttributes); +})->with('messages'); diff --git a/Tests/Unit/Helper/ClassHelperTest.php b/Tests/Unit/Helper/ClassHelperTest.php new file mode 100644 index 0000000..0f690b5 --- /dev/null +++ b/Tests/Unit/Helper/ClassHelperTest.php @@ -0,0 +1,95 @@ +toBe(ClassHelper::getShortName($className)); +})->with([ + sprintf('%s', ClassHelper::getShortName(TestMessage::class)) => [ + 'class_name' => TestMessage::class, + 'short_class_name' => 'TestMessage', + ], + sprintf('%s', ClassHelper::getShortName(TestMessageWithAllOptions::class)) => [ + 'class_name' => TestMessageWithAllOptions::class, + 'short_class_name' => 'TestMessageWithAllOptions', + ], + 'InvalidClassName' => [ + 'class_name' => 'InvalidClassName', + 'short_class_name' => 'InvalidClassName', + ], +]); + +test('it can get reflection class', function (string $className, bool $isNull): void { + $isNull + ? expect(ClassHelper::getReflectionClass($className))->toBeNull() + : expect(ClassHelper::getReflectionClass($className))->not()->toBeNull(); +})->with([ + sprintf('%s', ClassHelper::getShortName(TestMessage::class)) => [ + 'class_name' => TestMessage::class, + 'is_null' => false, + ], + sprintf('%s', ClassHelper::getShortName(TestMessageWithAllOptions::class)) => [ + 'class_name' => TestMessageWithAllOptions::class, + 'is_null' => false, + ], + 'InvalidClassName' => [ + 'class_name' => 'InvalidClassName', + 'is_null' => true, + ], +]); + +test('it can get parent reflection class', function (string $className, bool $isNull): void { + $isNull + ? expect(ClassHelper::getParentReflectionClass($className))->toBeNull() + : expect(ClassHelper::getParentReflectionClass($className))->not()->toBeNull(); +})->with([ + sprintf('%s', ClassHelper::getShortName(TestMessage::class)) => [ + 'class_name' => TestMessage::class, + 'is_null' => true, + ], + sprintf('%s', ClassHelper::getShortName(TestMessageWithAllOptions::class)) => [ + 'class_name' => TestMessageWithAllOptions::class, + 'is_null' => true, + ], + 'InvalidClassName' => [ + 'class_name' => 'InvalidClassName', + 'is_null' => true, + ], +]); + +test('it can get reflection attributes class', function (string $className, bool $isNull): void { + $isNull + ? expect(ClassHelper::getReflectionAttributes($className, Metrical::class))->toBeEmpty() + : expect(ClassHelper::getReflectionAttributes($className, Metrical::class))->not()->toBeEmpty(); +})->with([ + sprintf('%s', ClassHelper::getShortName(TestMessage::class)) => [ + 'class_name' => TestMessage::class, + 'is_empty' => false, + ], + sprintf('%s', ClassHelper::getShortName(TestMessageWithAllOptions::class)) => [ + 'class_name' => TestMessageWithAllOptions::class, + 'is_empty' => false, + ], + 'InvalidClassName' => [ + 'class_name' => 'InvalidClassName', + 'is_null' => true, + ], +]); diff --git a/Tests/Unit/Helper/EnvelopeHelperTest.php b/Tests/Unit/Helper/EnvelopeHelperTest.php new file mode 100644 index 0000000..5614fa3 --- /dev/null +++ b/Tests/Unit/Helper/EnvelopeHelperTest.php @@ -0,0 +1,42 @@ +getMessage()::class; + + expect() + ->and($envelope)->toBeInstanceOf(Envelope::class) + ->and($messageClass)->toBe($envelope->getMessage()::class) + ->and($envelope->last(DispatchAfterCurrentBusStamp::class))->not()->toBeNull(); +})->with([ + sprintf('%s', ClassHelper::getShortName(TestMessage::class)) => [ + 'target' => createTestMessage(), + 'has_attributes' => true, + ], + sprintf('%s', ClassHelper::getShortName(Envelope::class)) => [ + 'target' => Envelope::wrap(new TestMessage(TestConstants::DEFAULT_ID)), + 'has_attributes' => false, + ], +]);