first commit
This commit is contained in:
87
tests/Kernel/ModuleRegistryTest.php
Normal file
87
tests/Kernel/ModuleRegistryTest.php
Normal file
@@ -0,0 +1,87 @@
|
||||
<?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;
|
||||
|
||||
final class ModuleRegistryTest extends TestCase
|
||||
{
|
||||
protected function setUp(): void
|
||||
{
|
||||
RuntimePaths::resetApplicationRoot();
|
||||
RuntimePaths::resetProjectRoot();
|
||||
ModuleRegistry::reset();
|
||||
}
|
||||
|
||||
protected function tearDown(): void
|
||||
{
|
||||
RuntimePaths::resetApplicationRoot();
|
||||
RuntimePaths::resetProjectRoot();
|
||||
ModuleRegistry::reset();
|
||||
}
|
||||
|
||||
public function testModulesAreDeclaredInExpectedOrderForFixtureApplication(): void
|
||||
{
|
||||
RuntimePaths::setApplicationRoot(dirname(__DIR__, 2) . '/tests/Fixtures/Application');
|
||||
|
||||
$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
|
||||
{
|
||||
RuntimePaths::setApplicationRoot(dirname(__DIR__, 2) . '/tests/Fixtures/Application');
|
||||
|
||||
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
|
||||
{
|
||||
RuntimePaths::setApplicationRoot(dirname(__DIR__, 2) . '/tests/Fixtures/Application');
|
||||
|
||||
self::assertFileExists(RuntimePaths::getApplicationConfigPath('modules.php'));
|
||||
}
|
||||
|
||||
public function testEveryModuleExposesResolvableMetadata(): void
|
||||
{
|
||||
RuntimePaths::setApplicationRoot(dirname(__DIR__, 2) . '/tests/Fixtures/Application');
|
||||
|
||||
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.');
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user