Story 5.3: persistance localStorage

This commit is contained in:
2026-02-04 21:10:40 +01:00
parent fb95a39792
commit a4e0cb71e9
7 changed files with 222 additions and 42 deletions

View File

@@ -0,0 +1,31 @@
<?php
function assertTrue($cond, $msg) {
if (!$cond) {
fwrite(STDERR, $msg . PHP_EOL);
exit(1);
}
}
$statePath = __DIR__ . '/../assets/js/state.js';
assertTrue(file_exists($statePath), 'missing state.js');
$stateContent = file_get_contents($statePath);
assertTrue(strpos($stateContent, 'const AppState') !== false, 'missing AppState');
assertTrue(strpos($stateContent, 'portfolio_contact_form') !== false, 'missing storage key');
assertTrue(strpos($stateContent, 'EXCLUDED_FIELDS') !== false, 'missing excluded fields');
assertTrue(strpos($stateContent, 'csrf_token') !== false, 'missing csrf exclusion');
assertTrue(strpos($stateContent, 'password') !== false, 'missing password exclusion');
assertTrue(strpos($stateContent, 'recaptcha_token') !== false, 'missing recaptcha exclusion');
assertTrue(strpos($stateContent, 'isStorageAvailable') !== false, 'missing isStorageAvailable');
assertTrue(strpos($stateContent, 'saveFormData') !== false, 'missing saveFormData');
assertTrue(strpos($stateContent, 'getFormData') !== false, 'missing getFormData');
assertTrue(strpos($stateContent, 'clearFormData') !== false, 'missing clearFormData');
$contactJs = file_get_contents(__DIR__ . '/../assets/js/contact-form.js');
assertTrue(strpos($contactJs, 'class ContactFormPersistence') !== false, 'missing ContactFormPersistence');
assertTrue(strpos($contactJs, 'formSuccess') !== false, 'missing formSuccess listener');
assertTrue(preg_match('/setTimeout\([^,]+,\s*500\)/', $contactJs) === 1, 'missing debounce 500ms');
assertTrue(strpos($contactJs, 'clear-form-btn') !== false, 'missing clear button hook');
assertTrue(strpos($contactJs, 'confirm(') !== false, 'missing confirm');
fwrite(STDOUT, "OK\n");

View File

@@ -40,6 +40,8 @@ assertTrue(strpos($content, 'data-error="categorie"') !== false, 'missing catego
assertTrue(strpos($content, 'data-error="objet"') !== false, 'missing objet error');
assertTrue(strpos($content, 'data-error="message"') !== false, 'missing message error');
assertTrue(strpos($content, 'id="submit-btn"') !== false, 'missing submit id');
assertTrue(strpos($content, 'id="clear-form-btn"') !== false, 'missing clear button id');
assertTrue(strpos($content, '/assets/js/state.js') !== false, 'missing state script');
assertTrue(strpos($content, '/assets/js/contact-form.js') !== false, 'missing contact script');
assertTrue(preg_match('/id="nom"[^>]*required/', $content) === 1, 'nom missing required');

View File

@@ -22,4 +22,5 @@ php (Join-Path $here 'passions.test.php')
php (Join-Path $here 'testimonials.test.php')
php (Join-Path $here 'contact.test.php')
php (Join-Path $here 'contact-validation.test.php')
php (Join-Path $here 'contact-state.test.php')
'OK'