fix(auth): improve login accessibility semantics and add auth contract test

Task: AUTH-LOGIN-ACCESSIBILITY-001
This commit is contained in:
2026-03-06 20:46:22 +01:00
parent 72886f4784
commit dc6c135473
13 changed files with 611 additions and 57 deletions

View File

@@ -0,0 +1,62 @@
<?php
namespace MintyPHP\Tests\Architecture;
use PHPUnit\Framework\TestCase;
class AuthLoginAccessibilityContractTest extends TestCase
{
use ProjectFileAssertionSupport;
/**
* @return list<string>
*/
private function authLoginTemplates(): array
{
return [
'pages/auth/login(login).phtml',
'pages/auth/register(login).phtml',
'pages/auth/forgot(login).phtml',
'pages/auth/reset(login).phtml',
'pages/auth/verify(login).phtml',
'pages/auth/verify-email(login).phtml',
];
}
public function testAuthLoginTemplatesDoNotUseRoleButtonLinks(): void
{
foreach ($this->authLoginTemplates() as $file) {
$content = $this->readProjectFile($file);
$this->assertStringNotContainsString('role="button"', $content, $file);
}
}
public function testAuthLoginErrorNoticesUseAssertiveLiveRegions(): void
{
foreach ($this->authLoginTemplates() as $file) {
$content = $this->readProjectFile($file);
$this->assertStringContainsString('class="notice" data-variant="error" role="alert" aria-live="assertive"', $content, $file);
}
}
public function testTenantSelectionUsesSemanticFieldsetAndTextLabel(): void
{
$content = $this->readProjectFile('pages/auth/login(login).phtml');
$this->assertStringContainsString('login-tenant-fieldset', $content);
$this->assertStringContainsString('login-tenant-select-label', $content);
$this->assertStringContainsString('login-tenant-choice-text', $content);
$this->assertStringContainsString('login-microsoft-link', $content);
}
public function testAuthLoginFormsExposeErrorDescriptionForInputs(): void
{
$describedByPattern = '/aria-describedby="[^"]*\\$errorNoticeId[^"]*"/';
foreach ($this->authLoginTemplates() as $file) {
$content = $this->readProjectFile($file);
$this->assertMatchesRegularExpression($describedByPattern, $content, $file);
$this->assertStringContainsString('aria-invalid="true"', $content, $file);
}
}
}