PHPUnit Started (PHPUnit 11.5.55 using PHP 8.3.29 (cli) on WINNT)
Test Runner Configured
Bootstrap Finished (C:\ERP\sistemaGlobal\vendor/autoload.php)
Event Facade Sealed
Test Suite Loaded (2 tests)
Test Runner Started
Test Suite Sorted
Test Runner Execution Started (2 tests)
Test Suite Started (Tests\Feature\ClientDataProtectionTest, 2 tests)
Test Preparation Started (Tests\Feature\ClientDataProtectionTest::test_login_requires_consent_then_new_password_and_records_exact_policy)
Before Test Method Called (Tests\Feature\ClientDataProtectionTest::setUp)
Before Test Method Finished:
- Tests\Feature\ClientDataProtectionTest::setUp
Test Prepared (Tests\Feature\ClientDataProtectionTest::test_login_requires_consent_then_new_password_and_records_exact_policy)
Test Failed (Tests\Feature\ClientDataProtectionTest::test_login_requires_consent_then_new_password_and_records_exact_policy)
Failed asserting that '<!doctype html>\n
<html lang="es">\n
<head>\n
            <meta charset="utf-8">\n
    <meta name="viewport" content="width=device-width, initial-scale=1">\n
    <title>Ley de protección de datos</title>\n
    <style>\n
        :root { --primary: #0f60ad; --text: #111827; --muted: #52606d; --line: #d9e2ec; }\n
        body { margin: 0; font-family: Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Arial, sans-serif; background: #f8fafc; color: var(--text); }\n
        main { min-height: 100vh; display: grid; place-items: center; padding: 24px; box-sizing: border-box; }\n
        .shell { width: min(100%, 448px); }\n
        .brand { display: grid; justify-items: center; gap: 12px; margin-bottom: 24px; text-align: center; }\n
        .brand img { max-width: 220px; max-height: 112px; object-fit: contain; }\n
        .brand strong { font-size: 18px; }\n
        .top-menu { display: flex; justify-content: flex-end; margin-bottom: 14px; }\n
        .panel { background: #fff; border: 1px solid var(--line); border-radius: 12px; padding: 32px; box-shadow: 0 16px 40px rgba(31, 41, 51, .08); }\n
        h1 { margin: 0 0 6px; font-size: 24px; font-weight: 700; letter-spacing: 0; }\n
        .subtitle { color: var(--muted); margin: 0 0 24px; font-size: 14px; }\n
        label { display: block; margin: 16px 0 7px; font-size: 14px; font-weight: 600; }\n
        input[type="text"], input[type="password"] { width: 100%; box-sizing: border-box; border: 1px solid #cbd2d9; border-radius: 8px; padding: 11px 12px; font-size: 15px; outline: none; background: #fff; }\n
        input[type="text"]:focus, input[type="password"]:focus { border-color: var(--primary); box-shadow: 0 0 0 3px rgba(15, 96, 173, .14); }\n
        .actions { display: flex; gap: 10px; margin-top: 24px; flex-wrap: wrap; }\n
        button, .button { border: 0; border-radius: 8px; padding: 11px 16px; font-weight: 700; cursor: pointer; text-decoration: none; display: inline-block; }\n
        .primary { background: var(--primary); color: #fff; }\n
        .secondary { background: #e4e7eb; color: #1f2933; }\n
        .error { color: #b42318; font-size: 13px; margin-top: 6px; }\n
        .status { background: #e8f5e9; border: 1px solid #a5d6a7; padding: 10px; border-radius: 8px; margin-bottom: 14px; }\n
        .policy { max-height: 320px; overflow: auto; border: 1px solid var(--line); border-radius: 8px; padding: 14px; background: #fbfdff; }\n
    </style>\n
    <style>:root { --primary: #1261ab; }</style></head>\n
<body>\n
    <main>\n
        <div class="shell">\n
            <div class="brand">\n
                <img src="http://localhost/img/logo.png" alt="EMPRESA AVISO">\n
                <strong>Sistema Global de Administración</strong>\n
            </div>\n
\n
                            <nav class="top-menu" aria-label="Menú de usuario">\n
                    <form method="POST" action="http://localhost/cliente/salir">\n
                        <input type="hidden" name="_token" value="36EWYIHJQKfMaEX19sOMqhEy4BxGd0zdecdmBfpX" autocomplete="off">                        <button class="secondary" type="submit">Cerrar sesión</button>\n
                    </form>\n
                </nav>\n
            \n
            <section class="panel">\n
                <style>\n
    .shell{width:min(100%,720px)} .top-menu{display:none}\n
    dialog{border:1px solid #d9e2ec;border-radius:16px;padding:28px;width:min(640px,calc(100vw - 64px));max-height:85vh;overflow:auto;color:var(--text);box-shadow:0 20px 70px #0003}\n
    dialog::backdrop{background:rgba(15,23,42,.65)} button:disabled{opacity:.45;cursor:not-allowed}\n
</style>\n
<dialog id="required-modal" aria-labelledby="modal-title">\n
    <h1 id="modal-title">Ley de protección de datos</h1>\n
    <p>EMPRESA AVISO</p>\n
            <div class="policy" style="white-space:pre-wrap">Aviso propio de la empresa &lt;script&gt;alert(1)&lt;/script&gt;</div>\n
        <p><a href="http://localhost/cliente/politica-datos/documento">Descargar documento completo (PDF)</a></p>        <form method="POST" action="http://localhost/cliente/politica-datos/aceptar">\n
            <input type="hidden" name="_token" value="36EWYIHJQKfMaEX19sOMqhEy4BxGd0zdecdmBfpX" autocomplete="off">            <input type="hidden" name="version" value="2362609f-307c-4fae-bcb0-e21f3ee4d0da">\n
            <label><input id="consent" name="acepta_politica" type="checkbox" value="1" required> He leído y acepto el aviso de protección de datos.</label>\n
                                    <div class="actions"><button id="accept" class="primary" type="submit" disabled>Aceptar</button></div>\n
        </form>\n
        <script>document.getElementById('consent').addEventListener('change', event => {document.getElementById('accept').disabled = !event.target.checked;});</script>\n
        <form method="POST" action="http://localhost/cliente/politica-datos/cancelar"><input type="hidden" name="_token" value="36EWYIHJQKfMaEX19sOMqhEy4BxGd0zdecdmBfpX" autocomplete="off">        <div class="actions"><button class="secondary" type="submit">Cancelar</button></div>\n
    </form>\n
</dialog>\n
<script>\n
    const mandatoryModal = document.getElementById('required-modal');\n
    mandatoryModal.addEventListener('cancel', event => event.preventDefault());\n
    mandatoryModal.showModal();\n
</script>\n
            </section>\n
        </div>\n
    </main>\n
</body>\n
</html>\n
' [UTF-8](length: 5303) contains "Empresa aviso" [ASCII](length: 13).
After Test Method Called (Tests\Feature\ClientDataProtectionTest::tearDown)
After Test Method Finished:
- Tests\Feature\ClientDataProtectionTest::tearDown
Test Finished (Tests\Feature\ClientDataProtectionTest::test_login_requires_consent_then_new_password_and_records_exact_policy)
Test Preparation Started (Tests\Feature\ClientDataProtectionTest::test_all_form_routes_are_blocked_before_consent_and_document_is_company_scoped)
Before Test Method Called (Tests\Feature\ClientDataProtectionTest::setUp)
Before Test Method Finished:
- Tests\Feature\ClientDataProtectionTest::setUp
Test Prepared (Tests\Feature\ClientDataProtectionTest::test_all_form_routes_are_blocked_before_consent_and_document_is_company_scoped)
After Test Method Called (Tests\Feature\ClientDataProtectionTest::tearDown)
After Test Method Finished:
- Tests\Feature\ClientDataProtectionTest::tearDown
Test Passed (Tests\Feature\ClientDataProtectionTest::test_all_form_routes_are_blocked_before_consent_and_document_is_company_scoped)
Test Finished (Tests\Feature\ClientDataProtectionTest::test_all_form_routes_are_blocked_before_consent_and_document_is_company_scoped)
After Last Test Method Called (Tests\Feature\ClientDataProtectionTest::tearDownAfterClass)
After Last Test Method Finished:
- Tests\Feature\ClientDataProtectionTest::tearDownAfterClass
Test Suite Finished (Tests\Feature\ClientDataProtectionTest, 2 tests)
Test Runner Execution Finished
Test Runner Finished
PHPUnit Finished (Shell Exit Code: 1)
