diff --git a/phpunit.xml b/phpunit.xml index c44e5a5..72f8c6b 100644 --- a/phpunit.xml +++ b/phpunit.xml @@ -52,7 +52,9 @@ tests/Architecture/AuthzUiTemplateContractTest.php tests/Architecture/DetailActionPolicyContractTest.php tests/Architecture/DetailPageContractTest.php - tests/Architecture/DetailValidationSummaryContractTest.php + tests/Architecture/DetailValidationActionContractTest.php + tests/Architecture/DetailValidationAssetContractTest.php + tests/Architecture/DetailValidationTemplateContractTest.php tests/Architecture/FilterDrawerRuntimeContractTest.php tests/Architecture/FilterDrawerTemplateContractTest.php tests/Architecture/FrontendRuntimeComponentContractTest.php diff --git a/tests/Architecture/DetailValidationActionContractTest.php b/tests/Architecture/DetailValidationActionContractTest.php new file mode 100644 index 0000000..ab1b8f0 --- /dev/null +++ b/tests/Architecture/DetailValidationActionContractTest.php @@ -0,0 +1,18 @@ +readProjectFile($file); + $this->assertStringContainsString('$validationSummaryErrors = $errorBag->toArray();', $content, $file); + } + } +} diff --git a/tests/Architecture/DetailValidationAssetContractTest.php b/tests/Architecture/DetailValidationAssetContractTest.php new file mode 100644 index 0000000..d67c951 --- /dev/null +++ b/tests/Architecture/DetailValidationAssetContractTest.php @@ -0,0 +1,16 @@ +readProjectFile('config/assets.php'); + $this->assertStringContainsString("'css/components/app-details-validation-summary.css'", $content); + } +} diff --git a/tests/Architecture/DetailValidationContractFiles.php b/tests/Architecture/DetailValidationContractFiles.php new file mode 100644 index 0000000..53969ed --- /dev/null +++ b/tests/Architecture/DetailValidationContractFiles.php @@ -0,0 +1,46 @@ + + */ + public static function detailTemplateFiles(): array + { + return [ + 'pages/admin/users/create(default).phtml', + 'pages/admin/users/edit(default).phtml', + 'pages/admin/tenants/create(default).phtml', + 'pages/admin/tenants/edit(default).phtml', + 'pages/admin/departments/create(default).phtml', + 'pages/admin/departments/edit(default).phtml', + 'pages/admin/roles/create(default).phtml', + 'pages/admin/roles/edit(default).phtml', + 'pages/admin/permissions/create(default).phtml', + 'pages/admin/permissions/edit(default).phtml', + 'pages/admin/scheduled-jobs/edit(default).phtml', + ]; + } + + /** + * @return list + */ + public static function detailActionFiles(): array + { + return [ + 'pages/admin/users/create().php', + 'pages/admin/users/edit($id).php', + 'pages/admin/tenants/create().php', + 'pages/admin/tenants/edit($id).php', + 'pages/admin/departments/create().php', + 'pages/admin/departments/edit($id).php', + 'pages/admin/roles/create().php', + 'pages/admin/roles/edit($id).php', + 'pages/admin/permissions/create().php', + 'pages/admin/permissions/edit($id).php', + 'pages/admin/scheduled-jobs/edit($id).php', + ]; + } +} diff --git a/tests/Architecture/DetailValidationSummaryContractTest.php b/tests/Architecture/DetailValidationSummaryContractTest.php deleted file mode 100644 index 1e49d24..0000000 --- a/tests/Architecture/DetailValidationSummaryContractTest.php +++ /dev/null @@ -1,89 +0,0 @@ - - */ - private function detailTemplateFiles(): array - { - return [ - 'pages/admin/users/create(default).phtml', - 'pages/admin/users/edit(default).phtml', - 'pages/admin/tenants/create(default).phtml', - 'pages/admin/tenants/edit(default).phtml', - 'pages/admin/departments/create(default).phtml', - 'pages/admin/departments/edit(default).phtml', - 'pages/admin/roles/create(default).phtml', - 'pages/admin/roles/edit(default).phtml', - 'pages/admin/permissions/create(default).phtml', - 'pages/admin/permissions/edit(default).phtml', - 'pages/admin/scheduled-jobs/edit(default).phtml', - ]; - } - - /** - * @return list - */ - private function detailActionFiles(): array - { - return [ - 'pages/admin/users/create().php', - 'pages/admin/users/edit($id).php', - 'pages/admin/tenants/create().php', - 'pages/admin/tenants/edit($id).php', - 'pages/admin/departments/create().php', - 'pages/admin/departments/edit($id).php', - 'pages/admin/roles/create().php', - 'pages/admin/roles/edit($id).php', - 'pages/admin/permissions/create().php', - 'pages/admin/permissions/edit($id).php', - 'pages/admin/scheduled-jobs/edit($id).php', - ]; - } - - public function testScopedDetailTemplatesUseSharedValidationSummaryPartial(): void - { - foreach ($this->detailTemplateFiles() as $file) { - $content = $this->readProjectFile($file); - $this->assertStringContainsString("require templatePath('partials/app-details-validation-summary.phtml');", $content, $file); - } - } - - public function testScopedDetailTemplatesDoNotInlineLegacyErrorLoop(): void - { - foreach ($this->detailTemplateFiles() as $file) { - $content = $this->readProjectFile($file); - $this->assertSame(0, preg_match('/foreach\s*\(\$errors\s+as\s+\$error\)/', $content), $file); - } - } - - public function testSharedPartialExposesValidationSummaryContract(): void - { - $content = $this->readProjectFile('templates/partials/app-details-validation-summary.phtml'); - $this->assertStringContainsString('data-validation-summary', $content); - $this->assertStringContainsString('data-validation-summary-autofocus=', $content); - $this->assertStringContainsString('data-validation-error-link', $content); - $this->assertStringNotContainsString('class="notice"', $content); - } - - public function testScopedDetailActionsProvideStructuredValidationSummaryErrors(): void - { - foreach ($this->detailActionFiles() as $file) { - $content = $this->readProjectFile($file); - $this->assertStringContainsString('$validationSummaryErrors = $errorBag->toArray();', $content, $file); - } - } - - public function testDefaultStyleGroupIncludesValidationSummaryComponentCss(): void - { - $content = $this->readProjectFile('config/assets.php'); - $this->assertStringContainsString("'css/components/app-details-validation-summary.css'", $content); - } -} diff --git a/tests/Architecture/DetailValidationTemplateContractTest.php b/tests/Architecture/DetailValidationTemplateContractTest.php new file mode 100644 index 0000000..cb26cb9 --- /dev/null +++ b/tests/Architecture/DetailValidationTemplateContractTest.php @@ -0,0 +1,45 @@ +readProjectFile($file); + $this->assertStringContainsString( + "require templatePath('partials/app-details-validation-summary.phtml');", + $content, + $file + ); + $this->assertStringContainsString( + '$validationSummaryErrors = $validationSummaryErrors ?? ($errors ?? []);', + $content, + $file + ); + } + } + + public function testScopedDetailTemplatesDoNotInlineLegacyErrorLoop(): void + { + foreach (DetailValidationContractFiles::detailTemplateFiles() as $file) { + $content = $this->readProjectFile($file); + $this->assertSame(0, preg_match('/foreach\s*\(\$errors\s+as\s+\$error\)/', $content), $file); + } + } + + public function testSharedPartialExposesValidationSummaryContract(): void + { + $content = $this->readProjectFile('templates/partials/app-details-validation-summary.phtml'); + + $this->assertStringContainsString('data-validation-summary', $content); + $this->assertStringContainsString('data-validation-summary-autofocus=', $content); + $this->assertStringContainsString('data-validation-error-link', $content); + $this->assertStringNotContainsString('class="notice"', $content); + } +} diff --git a/tests/README.md b/tests/README.md index cc9fd18..983b511 100644 --- a/tests/README.md +++ b/tests/README.md @@ -32,7 +32,7 @@ ohne dass jede Aenderung immer die komplette Suite im Kopf behalten muss. ## Naechste Refactor-Kandidaten -- `tests/Architecture/DetailValidationSummaryContractTest.php` - `tests/Architecture/DetailActionPolicyContractTest.php` - `tests/Architecture/ContainerFactoryContractTest.php` - `tests/Architecture/SecurityLoggingContractTest.php` +- `tests/Architecture/StatusTaxonomyContractTest.php`