$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.'); } } } }