diff --git a/composer.json b/composer.json index dbe2bbf..f05444a 100644 --- a/composer.json +++ b/composer.json @@ -44,12 +44,14 @@ "assoconnect/php-percent":"^1.1", "assoconnect/absolute-percent-value-bundle": "^1.5", "webmozart/assert": "^1.11", - "psr/simple-cache": "^1.0" + "psr/simple-cache": "^1.0", + "symfony/cache": "^7.0" }, "require-dev": { "doctrine/cache": "~1.0", "symfony/phpunit-bridge": "^7.0", "symfony/framework-bundle": "^7.0", + "symfony/var-exporter": "^7.0", "symfony/yaml": "^7.0", "dg/bypass-finals": "^1.1", "assoconnect/php-quality-config": "^2.2", diff --git a/config/services.yaml b/config/services.yaml index 50787a1..0187e61 100644 --- a/config/services.yaml +++ b/config/services.yaml @@ -9,8 +9,7 @@ services: AssoConnect\ValidatorBundle\Validator\ConstraintsSetProvider\: resource: '../src/Validator/ConstraintsSetProvider/*' - Pdp\Storage\: - resource: '../../../jeremykendall/php-domain-parser/src/Storage/*' + Pdp\Storage\PublicSuffixListPsr18Client: ~ pdp.cache: class: Symfony\Component\Cache\Psr16Cache diff --git a/src/Test/Functional/App/config/config.yml b/src/Test/Functional/App/config/config.yml index 0afc3d8..4c40186 100644 --- a/src/Test/Functional/App/config/config.yml +++ b/src/Test/Functional/App/config/config.yml @@ -5,7 +5,7 @@ framework: enabled: false validation: enabled: true - enable_annotations: true + enable_attributes: true doctrine: orm: mappings: diff --git a/tests/Functional/PublicSuffixListCacheChainTest.php b/tests/Functional/PublicSuffixListCacheChainTest.php new file mode 100644 index 0000000..1874815 --- /dev/null +++ b/tests/Functional/PublicSuffixListCacheChainTest.php @@ -0,0 +1,57 @@ +get(RulesStorage::class); + self::assertInstanceOf(RulesStorage::class, $rulesStorage); + $rulesStorage->delete(EmailValidator::PUBLIC_SUFFIX_LIST_URI); + + $stub = $container->get(PublicSuffixListClientStub::class); + self::assertInstanceOf(PublicSuffixListClientStub::class, $stub); + + $warmer = $container->get(PublicSuffixListCacheWarmer::class); + self::assertInstanceOf(PublicSuffixListCacheWarmer::class, $warmer); + self::assertFalse($warmer->isOptional()); + + $cacheDir = self::$kernel instanceof \Symfony\Component\HttpKernel\KernelInterface + ? self::$kernel->getCacheDir() + : sys_get_temp_dir(); + + // The kernel boot may already have run the warmer, depending on the Symfony version + $requestsBeforeWarmup = $stub->getRequestCount(); + + self::assertSame([], $warmer->warmUp($cacheDir)); + self::assertSame($requestsBeforeWarmup + 1, $stub->getRequestCount()); + + self::assertSame([], $warmer->warmUp($cacheDir)); + self::assertSame( + $requestsBeforeWarmup + 1, + $stub->getRequestCount(), + 'The second warm-up must be served from the PSR-16 cache' + ); + + self::assertTrue(interface_exists(CacheInterface::class, false)); + } +} diff --git a/tests/Stub/PublicSuffixListClientStub.php b/tests/Stub/PublicSuffixListClientStub.php new file mode 100644 index 0000000..027f012 --- /dev/null +++ b/tests/Stub/PublicSuffixListClientStub.php @@ -0,0 +1,27 @@ +requestCount++; + + return new Response(200, [], "// public suffix list fixture\ncom\n"); + } + + public function getRequestCount(): int + { + return $this->requestCount; + } +} diff --git a/tests/TestKernel.php b/tests/TestKernel.php index 0081cab..a598237 100755 --- a/tests/TestKernel.php +++ b/tests/TestKernel.php @@ -4,19 +4,14 @@ namespace AssoConnect\ValidatorBundle\Tests; -use Symfony\Bundle\FrameworkBundle\FrameworkBundle; +use AssoConnect\ValidatorBundle\Test\Functional\App\TestKernel as FunctionalAppKernel; use Symfony\Component\Config\Loader\LoaderInterface; -use Symfony\Component\HttpKernel\Kernel; -class TestKernel extends Kernel +class TestKernel extends FunctionalAppKernel { - public function registerBundles(): iterable - { - return [new FrameworkBundle()]; - } - public function registerContainerConfiguration(LoaderInterface $loader): void { + parent::registerContainerConfiguration($loader); $loader->load(__DIR__ . '/config/config.yml'); } } diff --git a/tests/config/config.yml b/tests/config/config.yml new file mode 100644 index 0000000..491bbac --- /dev/null +++ b/tests/config/config.yml @@ -0,0 +1,11 @@ +framework: + test: true + +services: + AssoConnect\ValidatorBundle\Tests\Stub\PublicSuffixListClientStub: + public: true + + Psr\Http\Client\ClientInterface: '@AssoConnect\ValidatorBundle\Tests\Stub\PublicSuffixListClientStub' + + Psr\Http\Message\RequestFactoryInterface: + class: GuzzleHttp\Psr7\HttpFactory