*/ protected array $requiredExtensions = [ 'plugins/sirsoft-gdpr', ]; #[Test] public function template_composer_emits_active_modules_meta_view_variable(): void { Template::factory()->create([ 'identifier' => 'sirsoft-admin_basic', 'type' => 'admin', 'status' => 'active', ]); $capturedActiveModules = null; $capturedActivePlugins = null; $view = $this->mock(View::class); $view->shouldReceive('with') ->withArgs(function ($key, $value = null) use (&$capturedActiveModules, &$capturedActivePlugins) { if ($key === 'activeModulesMeta') { $capturedActiveModules = $value; } if ($key === 'activePluginsMeta') { $capturedActivePlugins = $value; } return true; // 모든 with() 호출 허용 }); $composer = app(TemplateComposer::class); $composer->compose($view); $this->assertIsArray($capturedActiveModules, 'activeModulesMeta 가 배열로 전달되어야 함'); $this->assertIsArray($capturedActivePlugins, 'activePluginsMeta 가 배열로 전달되어야 함'); // 각 항목 shape 검증: identifier / display_name / version foreach ($capturedActiveModules as $module) { $this->assertIsArray($module); $this->assertArrayHasKey('identifier', $module); $this->assertArrayHasKey('display_name', $module); $this->assertArrayHasKey('version', $module); $this->assertIsString($module['identifier']); $this->assertIsString($module['version']); } foreach ($capturedActivePlugins as $plugin) { $this->assertIsArray($plugin); $this->assertArrayHasKey('identifier', $plugin); $this->assertArrayHasKey('display_name', $plugin); $this->assertArrayHasKey('version', $plugin); $this->assertIsString($plugin['identifier']); $this->assertIsString($plugin['version']); } } #[Test] public function legacy_modules_and_plugins_keys_remain_present_for_backward_compat(): void { Template::factory()->create([ 'identifier' => 'sirsoft-admin_basic', 'type' => 'admin', 'status' => 'active', ]); $sawModulesKey = false; $sawPluginsKey = false; $sawModuleAssetsKey = false; $sawPluginAssetsKey = false; $view = $this->mock(View::class); $view->shouldReceive('with') ->withArgs(function ($key, $value = null) use (&$sawModulesKey, &$sawPluginsKey, &$sawModuleAssetsKey, &$sawPluginAssetsKey) { if ($key === 'moduleSettings') { $sawModulesKey = true; } if ($key === 'pluginSettings') { $sawPluginsKey = true; } if ($key === 'moduleAssets') { $sawModuleAssetsKey = true; } if ($key === 'pluginAssets') { $sawPluginAssetsKey = true; } return true; }); $composer = app(TemplateComposer::class); $composer->compose($view); $this->assertTrue($sawModulesKey, '기존 moduleSettings 키 보존'); $this->assertTrue($sawPluginsKey, '기존 pluginSettings 키 보존'); $this->assertTrue($sawModuleAssetsKey, '기존 moduleAssets 키 보존'); $this->assertTrue($sawPluginAssetsKey, '기존 pluginAssets 키 보존'); } }