Files
netslim-core/tests/Kernel/ModuleRegistryTest.php

85 lines
2.9 KiB
PHP

<?php
declare(strict_types=1);
namespace Tests\Kernel;
use Netig\Netslim\Kernel\Runtime\Module\ModuleInterface;
use Netig\Netslim\Kernel\Runtime\Module\ModuleRegistry;
use Netig\Netslim\Kernel\Runtime\RuntimePaths;
use PHPUnit\Framework\TestCase;
use Tests\Support\TestRuntimeFactory;
final class ModuleRegistryTest extends TestCase
{
protected function setUp(): void
{
TestRuntimeFactory::resetRuntime();
}
protected function tearDown(): void
{
TestRuntimeFactory::resetRuntime();
}
public function testModulesAreDeclaredInExpectedOrderForFixtureApplication(): void
{
TestRuntimeFactory::resetRuntime();
$moduleClasses = array_map(
static fn (ModuleInterface $module): string => $module::class,
ModuleRegistry::modules(),
);
self::assertSame([
'Netig\Netslim\Kernel\Runtime\KernelModule',
'Netig\Netslim\Identity\IdentityModule',
'Netig\Netslim\Settings\SettingsModule',
'Netig\Netslim\AuditLog\AuditLogModule',
'Netig\Netslim\Notifications\NotificationsModule',
'Netig\Netslim\Taxonomy\TaxonomyModule',
'Netig\Netslim\Media\MediaModule',
], $moduleClasses);
}
public function testModuleClassNamesExposeTheActiveApplicationComposition(): void
{
TestRuntimeFactory::resetRuntime();
self::assertSame([
'Netig\Netslim\Kernel\Runtime\KernelModule',
'Netig\Netslim\Identity\IdentityModule',
'Netig\Netslim\Settings\SettingsModule',
'Netig\Netslim\AuditLog\AuditLogModule',
'Netig\Netslim\Notifications\NotificationsModule',
'Netig\Netslim\Taxonomy\TaxonomyModule',
'Netig\Netslim\Media\MediaModule',
], ModuleRegistry::moduleClassNames());
}
public function testApplicationManifestIsResolvedFromTheActiveApplicationRoot(): void
{
TestRuntimeFactory::resetRuntime();
self::assertFileExists(RuntimePaths::getApplicationConfigPath('modules.php'));
}
public function testEveryModuleExposesResolvableMetadata(): void
{
TestRuntimeFactory::resetRuntime();
foreach (ModuleRegistry::modules() as $module) {
self::assertNotSame([], $module->definitions(), $module::class . ' should expose DI definitions.');
foreach ($module->templateNamespaces() as $namespace => $templatePath) {
self::assertNotSame('', $namespace, $module::class . ' should declare a non-empty Twig namespace.');
self::assertDirectoryExists($templatePath, $module::class . ' should point Twig to an existing template directory.');
}
foreach ($module->twigExtensions() as $twigExtensionClass) {
self::assertTrue(class_exists($twigExtensionClass), $module::class . ' should reference an existing Twig extension class.');
}
}
}
}