diff --git a/phpunit.xml b/phpunit.xml index 93e8811..a49056b 100644 --- a/phpunit.xml +++ b/phpunit.xml @@ -26,7 +26,11 @@ tests/Architecture/ModuleProviderContractTest.php tests/Architecture/ModuleUiContractTest.php tests/Architecture/RepositoryInterfaceContractTest.php - tests/Architecture/StatusTaxonomyContractTest.php + tests/Architecture/StatusTaxonomyDataContractTest.php + tests/Architecture/StatusTaxonomyEnumContractTest.php + tests/Architecture/StatusTaxonomyFilterSchemaContractTest.php + tests/Architecture/StatusTaxonomyLiteralGuardContractTest.php + tests/Architecture/StatusTaxonomyUiContractTest.php tests/Architecture/AuthzAdminMasterDataContractTest.php diff --git a/tests/Architecture/StatusTaxonomyContractTest.php b/tests/Architecture/StatusTaxonomyContractFiles.php similarity index 63% rename from tests/Architecture/StatusTaxonomyContractTest.php rename to tests/Architecture/StatusTaxonomyContractFiles.php index a4bdb07..9889698 100644 --- a/tests/Architecture/StatusTaxonomyContractTest.php +++ b/tests/Architecture/StatusTaxonomyContractFiles.php @@ -2,16 +2,12 @@ namespace MintyPHP\Tests\Architecture; -use PHPUnit\Framework\TestCase; - -class StatusTaxonomyContractTest extends TestCase +final class StatusTaxonomyContractFiles { - use ProjectFileAssertionSupport; - /** * @return list */ - private function taxonomyEnumFiles(): array + public static function taxonomyEnumFiles(): array { return [ 'lib/Domain/Taxonomy/SystemAuditOutcome.php', @@ -32,7 +28,7 @@ class StatusTaxonomyContractTest extends TestCase /** * @return array> */ - private function taxonomySchemaExpectations(): array + public static function taxonomySchemaExpectations(): array { return [ 'pages/admin/system-audit/filter-schema.php' => [ @@ -63,7 +59,7 @@ class StatusTaxonomyContractTest extends TestCase /** * @return list */ - private function taxonomyDataEndpointFiles(): array + public static function taxonomyDataEndpointFiles(): array { return [ 'pages/admin/system-audit/data().php', @@ -79,7 +75,7 @@ class StatusTaxonomyContractTest extends TestCase /** * @return list */ - private function taxonomyLiteralGuardFiles(): array + public static function taxonomyLiteralGuardFiles(): array { return [ 'lib/Service/Audit/SystemAuditService.php', @@ -113,39 +109,12 @@ class StatusTaxonomyContractTest extends TestCase ]; } - public function testTaxonomyEnumFilesUseSharedTraitAndRequiredMethods(): void + /** + * @return list + */ + public static function forbiddenLiteralPatterns(): array { - foreach ($this->taxonomyEnumFiles() as $file) { - $content = $this->readProjectFile($file); - $this->assertStringContainsString('enum ', $content, $file); - $this->assertStringContainsString('use SupportsStringTaxonomy;', $content, $file); - $this->assertStringContainsString('function labelToken()', $content, $file); - $this->assertStringContainsString('function badgeVariant()', $content, $file); - } - } - - public function testFilterSchemasReadTaxonomyValuesFromEnums(): void - { - foreach ($this->taxonomySchemaExpectations() as $file => $snippets) { - $content = $this->readProjectFile($file); - foreach ($snippets as $snippet) { - $this->assertStringContainsString($snippet, $content, $file); - } - } - } - - public function testDataEndpointsUseEnumBasedBadgeAndLabelResolution(): void - { - foreach ($this->taxonomyDataEndpointFiles() as $file) { - $content = $this->readProjectFile($file); - $this->assertStringContainsString('->badgeVariant()', $content, $file); - $this->assertStringContainsString('->labelToken()', $content, $file); - } - } - - public function testNoLegacyLiteralTaxonomyChecksRemainInMigratedFiles(): void - { - $forbiddenPatterns = [ + return [ "/\\bstatus\\s*=\\s*'(running|success|partial|failed|skipped|queued|sent|active|inactive)'/", "/\\boutcome\\s*=\\s*'(success|failed|denied)'/", "/\\bchannel\\s*=\\s*'(web|api|scheduler|cli)'/", @@ -155,22 +124,5 @@ class StatusTaxonomyContractTest extends TestCase "/['\\\"]actions['\\\"]\\s*=>\\s*'restore'/", "/in_array\\([^\\n]*\\[(?:[^\\]]*'(?:success|failed|denied|running|partial|skipped|queued|sent|active|inactive|scheduler|manual|web|api|cli|deactivate|delete|restore|ok|lock_not_acquired|unexpected_error)')/", ]; - - foreach ($this->taxonomyLiteralGuardFiles() as $file) { - $content = $this->readProjectFile($file); - foreach ($forbiddenPatterns as $pattern) { - $this->assertSame(0, preg_match($pattern, $content), $file . ' pattern=' . $pattern); - } - } - } - - public function testImportAuditIndexTemplateDoesNotUseLegacyStatusMapper(): void - { - $content = $this->readProjectFile('pages/admin/import-audit/index(default).phtml'); - $moduleContent = $this->readProjectFile('web/js/pages/admin-import-audit-index.js'); - $this->assertStringNotContainsString('const statusLabel = (value) =>', $moduleContent); - $this->assertStringNotContainsString("if (key === 'running')", $moduleContent); - $this->assertStringContainsString('cell.label || \'-\'', $moduleContent); - $this->assertStringContainsString("assetVersion('js/pages/admin-import-audit-index.js')", $content); } } diff --git a/tests/Architecture/StatusTaxonomyDataContractTest.php b/tests/Architecture/StatusTaxonomyDataContractTest.php new file mode 100644 index 0000000..b884c4d --- /dev/null +++ b/tests/Architecture/StatusTaxonomyDataContractTest.php @@ -0,0 +1,19 @@ +readProjectFile($file); + $this->assertStringContainsString('->badgeVariant()', $content, $file); + $this->assertStringContainsString('->labelToken()', $content, $file); + } + } +} diff --git a/tests/Architecture/StatusTaxonomyEnumContractTest.php b/tests/Architecture/StatusTaxonomyEnumContractTest.php new file mode 100644 index 0000000..02889de --- /dev/null +++ b/tests/Architecture/StatusTaxonomyEnumContractTest.php @@ -0,0 +1,21 @@ +readProjectFile($file); + $this->assertStringContainsString('enum ', $content, $file); + $this->assertStringContainsString('use SupportsStringTaxonomy;', $content, $file); + $this->assertStringContainsString('function labelToken()', $content, $file); + $this->assertStringContainsString('function badgeVariant()', $content, $file); + } + } +} diff --git a/tests/Architecture/StatusTaxonomyFilterSchemaContractTest.php b/tests/Architecture/StatusTaxonomyFilterSchemaContractTest.php new file mode 100644 index 0000000..856657e --- /dev/null +++ b/tests/Architecture/StatusTaxonomyFilterSchemaContractTest.php @@ -0,0 +1,20 @@ + $snippets) { + $content = $this->readProjectFile($file); + foreach ($snippets as $snippet) { + $this->assertStringContainsString($snippet, $content, $file); + } + } + } +} diff --git a/tests/Architecture/StatusTaxonomyLiteralGuardContractTest.php b/tests/Architecture/StatusTaxonomyLiteralGuardContractTest.php new file mode 100644 index 0000000..e248c5a --- /dev/null +++ b/tests/Architecture/StatusTaxonomyLiteralGuardContractTest.php @@ -0,0 +1,20 @@ +readProjectFile($file); + foreach (StatusTaxonomyContractFiles::forbiddenLiteralPatterns() as $pattern) { + $this->assertSame(0, preg_match($pattern, $content), $file . ' pattern=' . $pattern); + } + } + } +} diff --git a/tests/Architecture/StatusTaxonomyUiContractTest.php b/tests/Architecture/StatusTaxonomyUiContractTest.php new file mode 100644 index 0000000..ba86382 --- /dev/null +++ b/tests/Architecture/StatusTaxonomyUiContractTest.php @@ -0,0 +1,20 @@ +readProjectFile('pages/admin/import-audit/index(default).phtml'); + $moduleContent = $this->readProjectFile('web/js/pages/admin-import-audit-index.js'); + $this->assertStringNotContainsString('const statusLabel = (value) =>', $moduleContent); + $this->assertStringNotContainsString("if (key === 'running')", $moduleContent); + $this->assertStringContainsString('cell.label || \'-\'', $moduleContent); + $this->assertStringContainsString("assetVersion('js/pages/admin-import-audit-index.js')", $content); + } +} diff --git a/tests/README.md b/tests/README.md index d0eaf1b..a3b3105 100644 --- a/tests/README.md +++ b/tests/README.md @@ -33,6 +33,6 @@ ohne dass jede Aenderung immer die komplette Suite im Kopf behalten muss. ## Naechste Refactor-Kandidaten - `tests/Architecture/ContainerFactoryContractTest.php` -- `tests/Architecture/StatusTaxonomyContractTest.php` - `tests/Architecture/AuthLoginAccessibilityContractTest.php` - `tests/Architecture/SecurityCryptoContractTest.php` +- `tests/Architecture/AsideNavigationContractTest.php`