forked from fa/breadcrumb-the-shire
Split status taxonomy contracts
This commit is contained in:
@@ -26,7 +26,11 @@
|
||||
<file>tests/Architecture/ModuleProviderContractTest.php</file>
|
||||
<file>tests/Architecture/ModuleUiContractTest.php</file>
|
||||
<file>tests/Architecture/RepositoryInterfaceContractTest.php</file>
|
||||
<file>tests/Architecture/StatusTaxonomyContractTest.php</file>
|
||||
<file>tests/Architecture/StatusTaxonomyDataContractTest.php</file>
|
||||
<file>tests/Architecture/StatusTaxonomyEnumContractTest.php</file>
|
||||
<file>tests/Architecture/StatusTaxonomyFilterSchemaContractTest.php</file>
|
||||
<file>tests/Architecture/StatusTaxonomyLiteralGuardContractTest.php</file>
|
||||
<file>tests/Architecture/StatusTaxonomyUiContractTest.php</file>
|
||||
</testsuite>
|
||||
<testsuite name="ArchitectureSecurity">
|
||||
<file>tests/Architecture/AuthzAdminMasterDataContractTest.php</file>
|
||||
|
||||
@@ -2,16 +2,12 @@
|
||||
|
||||
namespace MintyPHP\Tests\Architecture;
|
||||
|
||||
use PHPUnit\Framework\TestCase;
|
||||
|
||||
class StatusTaxonomyContractTest extends TestCase
|
||||
final class StatusTaxonomyContractFiles
|
||||
{
|
||||
use ProjectFileAssertionSupport;
|
||||
|
||||
/**
|
||||
* @return list<string>
|
||||
*/
|
||||
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<string,list<string>>
|
||||
*/
|
||||
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<string>
|
||||
*/
|
||||
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<string>
|
||||
*/
|
||||
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<string>
|
||||
*/
|
||||
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);
|
||||
}
|
||||
}
|
||||
19
tests/Architecture/StatusTaxonomyDataContractTest.php
Normal file
19
tests/Architecture/StatusTaxonomyDataContractTest.php
Normal file
@@ -0,0 +1,19 @@
|
||||
<?php
|
||||
|
||||
namespace MintyPHP\Tests\Architecture;
|
||||
|
||||
use PHPUnit\Framework\TestCase;
|
||||
|
||||
final class StatusTaxonomyDataContractTest extends TestCase
|
||||
{
|
||||
use ProjectFileAssertionSupport;
|
||||
|
||||
public function testDataEndpointsUseEnumBasedBadgeAndLabelResolution(): void
|
||||
{
|
||||
foreach (StatusTaxonomyContractFiles::taxonomyDataEndpointFiles() as $file) {
|
||||
$content = $this->readProjectFile($file);
|
||||
$this->assertStringContainsString('->badgeVariant()', $content, $file);
|
||||
$this->assertStringContainsString('->labelToken()', $content, $file);
|
||||
}
|
||||
}
|
||||
}
|
||||
21
tests/Architecture/StatusTaxonomyEnumContractTest.php
Normal file
21
tests/Architecture/StatusTaxonomyEnumContractTest.php
Normal file
@@ -0,0 +1,21 @@
|
||||
<?php
|
||||
|
||||
namespace MintyPHP\Tests\Architecture;
|
||||
|
||||
use PHPUnit\Framework\TestCase;
|
||||
|
||||
final class StatusTaxonomyEnumContractTest extends TestCase
|
||||
{
|
||||
use ProjectFileAssertionSupport;
|
||||
|
||||
public function testTaxonomyEnumFilesUseSharedTraitAndRequiredMethods(): void
|
||||
{
|
||||
foreach (StatusTaxonomyContractFiles::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);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
<?php
|
||||
|
||||
namespace MintyPHP\Tests\Architecture;
|
||||
|
||||
use PHPUnit\Framework\TestCase;
|
||||
|
||||
final class StatusTaxonomyFilterSchemaContractTest extends TestCase
|
||||
{
|
||||
use ProjectFileAssertionSupport;
|
||||
|
||||
public function testFilterSchemasReadTaxonomyValuesFromEnums(): void
|
||||
{
|
||||
foreach (StatusTaxonomyContractFiles::taxonomySchemaExpectations() as $file => $snippets) {
|
||||
$content = $this->readProjectFile($file);
|
||||
foreach ($snippets as $snippet) {
|
||||
$this->assertStringContainsString($snippet, $content, $file);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
<?php
|
||||
|
||||
namespace MintyPHP\Tests\Architecture;
|
||||
|
||||
use PHPUnit\Framework\TestCase;
|
||||
|
||||
final class StatusTaxonomyLiteralGuardContractTest extends TestCase
|
||||
{
|
||||
use ProjectFileAssertionSupport;
|
||||
|
||||
public function testNoLegacyLiteralTaxonomyChecksRemainInMigratedFiles(): void
|
||||
{
|
||||
foreach (StatusTaxonomyContractFiles::taxonomyLiteralGuardFiles() as $file) {
|
||||
$content = $this->readProjectFile($file);
|
||||
foreach (StatusTaxonomyContractFiles::forbiddenLiteralPatterns() as $pattern) {
|
||||
$this->assertSame(0, preg_match($pattern, $content), $file . ' pattern=' . $pattern);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
20
tests/Architecture/StatusTaxonomyUiContractTest.php
Normal file
20
tests/Architecture/StatusTaxonomyUiContractTest.php
Normal file
@@ -0,0 +1,20 @@
|
||||
<?php
|
||||
|
||||
namespace MintyPHP\Tests\Architecture;
|
||||
|
||||
use PHPUnit\Framework\TestCase;
|
||||
|
||||
final class StatusTaxonomyUiContractTest extends TestCase
|
||||
{
|
||||
use ProjectFileAssertionSupport;
|
||||
|
||||
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);
|
||||
}
|
||||
}
|
||||
@@ -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`
|
||||
|
||||
Reference in New Issue
Block a user