From aa35648e454b428489f8e7743a4c7c8eb1446e35 Mon Sep 17 00:00:00 2001 From: Nicolas Valverde <64469669+n-valverde@users.noreply.github.com> Date: Sat, 19 Oct 2024 08:53:04 +0200 Subject: [PATCH 1/2] Add monolog.logger.algolia --- composer.json | 1 + .../AlgoliaSearchExtension.php | 3 +++ src/Services/AlgoliaSearchService.php | 9 ++++++- tests/Kernel.php | 1 + tests/TestCase/SearchServiceTest.php | 26 +++++++++++++++++++ 5 files changed, 39 insertions(+), 1 deletion(-) diff --git a/composer.json b/composer.json index 5b6d7c4..737549d 100644 --- a/composer.json +++ b/composer.json @@ -41,6 +41,7 @@ "phpunit/phpunit": "^8.5 || ^9.0", "roave/security-advisories": "dev-master", "symfony/framework-bundle": "^7.0", + "symfony/monolog-bundle": "^3.10", "symfony/phpunit-bridge": "^7.0", "symfony/proxy-manager-bridge": "*", "symfony/yaml": "^7.0" diff --git a/src/DependencyInjection/AlgoliaSearchExtension.php b/src/DependencyInjection/AlgoliaSearchExtension.php index 9aca9e9..b59ce19 100644 --- a/src/DependencyInjection/AlgoliaSearchExtension.php +++ b/src/DependencyInjection/AlgoliaSearchExtension.php @@ -7,6 +7,7 @@ use Algolia\SearchBundle\Settings\SettingsManager; use Symfony\Component\Config\FileLocator; use Symfony\Component\DependencyInjection\ContainerBuilder; +use Symfony\Component\DependencyInjection\ContainerInterface; use Symfony\Component\DependencyInjection\Definition; use Symfony\Component\DependencyInjection\Loader; use Symfony\Component\DependencyInjection\Reference; @@ -70,8 +71,10 @@ public function load(array $configs, ContainerBuilder $container) new Reference($config['serializer']), $engineDefinition, $config, + new Reference('logger', ContainerInterface::IGNORE_ON_INVALID_REFERENCE), ] )); + $searchServiceDefinition->addTag('monolog.logger', ['channel' => 'algolia']); $searchServiceDefinitionForAtomicReindex = (clone $searchServiceDefinition); $searchServiceDefinitionForAtomicReindex->replaceArgument( diff --git a/src/Services/AlgoliaSearchService.php b/src/Services/AlgoliaSearchService.php index 24405b9..2942006 100644 --- a/src/Services/AlgoliaSearchService.php +++ b/src/Services/AlgoliaSearchService.php @@ -2,6 +2,7 @@ namespace Algolia\SearchBundle\Services; +use Algolia\AlgoliaSearch\Algolia; use Algolia\AlgoliaSearch\RequestOptions\RequestOptions; use Algolia\SearchBundle\Engine; use Algolia\SearchBundle\Entity\Aggregator; @@ -10,6 +11,8 @@ use Algolia\SearchBundle\SearchService; use Algolia\SearchBundle\Util\ClassInfo; use Doctrine\Persistence\ObjectManager; +use Psr\Log\LoggerInterface; +use Psr\Log\NullLogger; use Symfony\Component\Config\Definition\Exception\Exception; use Symfony\Component\PropertyAccess\PropertyAccess; @@ -62,15 +65,19 @@ final class AlgoliaSearchService implements SearchService private $normalizer; + private LoggerInterface $logger; + /** * @param array $configuration */ - public function __construct($normalizer, Engine $engine, array $configuration) + public function __construct($normalizer, Engine $engine, array $configuration, ?LoggerInterface $logger = null) { $this->normalizer = $normalizer; $this->engine = $engine; $this->configuration = $configuration; $this->propertyAccessor = PropertyAccess::createPropertyAccessor(); + $this->logger = $logger ?? new NullLogger(); + Algolia::setLogger($this->logger); $this->setSearchableEntities(); $this->setAggregatorsAndEntitiesAggregators(); diff --git a/tests/Kernel.php b/tests/Kernel.php index aca3c70..d41ab99 100644 --- a/tests/Kernel.php +++ b/tests/Kernel.php @@ -19,6 +19,7 @@ public function registerBundles(): array new \Symfony\Bundle\FrameworkBundle\FrameworkBundle(), new \Doctrine\Bundle\DoctrineBundle\DoctrineBundle(), new \JMS\SerializerBundle\JMSSerializerBundle(), + new \Symfony\Bundle\MonologBundle\MonologBundle(), new AlgoliaSearchBundle(), ]; } diff --git a/tests/TestCase/SearchServiceTest.php b/tests/TestCase/SearchServiceTest.php index 475b587..19b98e6 100644 --- a/tests/TestCase/SearchServiceTest.php +++ b/tests/TestCase/SearchServiceTest.php @@ -2,6 +2,7 @@ namespace Algolia\SearchBundle\TestCase; +use Algolia\AlgoliaSearch\Algolia; use Algolia\SearchBundle\BaseTest; use Algolia\SearchBundle\TestApp\Entity\Comment; use Algolia\SearchBundle\TestApp\Entity\ContentAggregator; @@ -9,6 +10,9 @@ use Algolia\SearchBundle\TestApp\Entity\Link; use Algolia\SearchBundle\TestApp\Entity\Post; use Algolia\SearchBundle\TestApp\Entity\Tag; +use PHPUnit\Framework\Constraint\IsType; +use Psr\Log\LoggerInterface; +use Psr\Log\LogLevel; class SearchServiceTest extends BaseTest { @@ -211,4 +215,26 @@ public function testShouldNotBeIndexed(): void self::assertFalse($this->searchService->shouldBeIndexed($link)); $this->cleanUp(); } + + public function testUseLogger(): void + { + $logger = $this->createMock(LoggerInterface::class); + + self::ensureKernelShutdown(); + self::getContainer()->set('monolog.logger.algolia', $logger); + $this->searchService = $this->get('search.service'); + + $this->assertSame($logger, Algolia::getLogger()); + $logger + ->expects($this->atLeastOnce()) + ->method('log') + ->with( + LogLevel::DEBUG, + new IsType('string'), + new IsType('array') + ) + ; + + $this->cleanUp(); + } } From 140a98efb48aae75a0260657092fd1a4ea84e4af Mon Sep 17 00:00:00 2001 From: Nicolas Valverde <64469669+n-valverde@users.noreply.github.com> Date: Wed, 23 Oct 2024 11:50:07 +0200 Subject: [PATCH 2/2] Add stan exception for nullable $logger --- phpstan.neon.dist | 1 + 1 file changed, 1 insertion(+) diff --git a/phpstan.neon.dist b/phpstan.neon.dist index 0919687..80eda6d 100644 --- a/phpstan.neon.dist +++ b/phpstan.neon.dist @@ -20,3 +20,4 @@ parameters: - '#Class Algolia\\SearchBundle\\Settings\\SettingsManager is neither abstract nor final.#' - '#Class Algolia\\SearchBundle\\EventListener\\SearchIndexerSubscriber is neither abstract nor final.#' - '#Method Algolia\\SearchBundle\\Model\\Aggregator::normalize\(\) has parameter .* with a nullable type declaration.#' + - '#Method Algolia\\SearchBundle\\.*::__construct\(\) has parameter \$logger with a nullable type declaration.#'