85 lines
2.9 KiB
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.');
|
|
}
|
|
}
|
|
}
|
|
}
|