test: add ShareLinkTest + PureLogicTest (TDD), fix coverMap undefined in SearchController

This commit is contained in:
Pontoporeia
2026-05-08 10:56:27 +02:00
parent 15d54fa19e
commit 6ba13e00ea
16 changed files with 1274 additions and 68 deletions

View File

@@ -15,12 +15,14 @@
* bool $required — whether at least one checkbox must be checked; default false
* string $hxPost — optional hx-post URL for HTMX live update
* string $hxTarget — optional hx-target CSS selector for HTMX swap
* string $hxSwap — optional hx-swap value; default 'outerHTML'
*/
$checked = $checked ?? [];
$required = $required ?? false;
$hxPost = $hxPost ?? '';
$hxTarget = $hxTarget ?? '';
$hxSwap = $hxSwap ?? 'outerHTML';
?>
<div>
<span class="admin-row-label"><?= htmlspecialchars($label) ?><?= $required ? ' <span class="asterisk">*</span>' : '' ?></span>
@@ -31,7 +33,7 @@ $hxTarget = $hxTarget ?? '';
hx-target="<?= htmlspecialchars($hxTarget) ?>"
hx-trigger="change"
hx-include="this, #website-url-fieldset"
hx-swap="outerHTML"
hx-swap="<?= htmlspecialchars($hxSwap) ?>"
<?php endif; ?>>
<legend class="sr-only"><?= htmlspecialchars($label) ?></legend>
<ul>
@@ -50,4 +52,4 @@ $hxTarget = $hxTarget ?? '';
</fieldset>
</div>
<?php
unset($checked, $hxPost, $hxTarget);
unset($checked, $hxPost, $hxTarget, $hxSwap);

View File

@@ -132,7 +132,7 @@ $checkedFormatsForSiteWeb = $checkedFormatsForSiteWeb ?? [];
<?php endif; ?>
<?php endif; ?>
<form action="<?= $formAction ?>" method="post" enctype="multipart/form-data" class="admin-form"<?= $mode === 'edit' ? ' data-beforeunload-guard' : '' ?>>
<form action="<?= $formAction ?>" method="post" enctype="multipart/form-data" class="admin-form" data-beforeunload-guard>
<?= $hiddenFields ?>
<p class="required-note"><span class="asterisk">*</span> Champs obligatoires</p>
@@ -173,50 +173,31 @@ $checkedFormatsForSiteWeb = $checkedFormatsForSiteWeb ?? [];
$options = $languages;
$checked = $formData["languages"] ?? [];
$required = true;
$hxPost = "/language-autre-fragment.php";
$hxTarget = "#language-autre-row";
$hxSwap = "outerHTML";
include APP_ROOT . "/templates/partials/form/checkbox-list.php";
unset($hxSwap);
?>
<?php
$name = "language_autre";
$label = "Autre(s) langue(s) :";
$value = $oldFn("language_autre");
$required = empty($formData["languages"]);
$hint =
"Si votre TFE contient une langue absente de la liste, précisez-la ici.";
include APP_ROOT . "/templates/partials/form/text-field.php";
$_langAutreRequired = empty($formData["languages"]);
$_langAutreValue = $oldFn("language_autre");
?>
<div id="language-autre-row">
<div>
<label for="language_autre">Autre(s) langue(s) :<?= $_langAutreRequired ? ' <span class="asterisk">*</span>' : '' ?></label>
<div>
<input type="text"
id="language_autre"
name="language_autre"
value="<?= $_langAutreValue ?>"
<?= $_langAutreRequired ? 'required' : '' ?>>
<small>Si votre TFE contient une langue absente de la liste, précisez-la ici.</small>
</div>
</div>
</div>
<?php unset($_langAutreRequired, $_langAutreValue); ?>
</fieldset>
<script>
(function () {
var fs = document.getElementById('languages-fieldset');
if (!fs) return;
var autreInput = fs.querySelector('input[name="language_autre"]');
if (!autreInput) return;
var autreLabel = fs.querySelector('label[for="language_autre"]');
function update() {
var anyChecked = fs.querySelectorAll('input[name="languages[]"]').length > 0
? Array.from(fs.querySelectorAll('input[name="languages[]"]')).some(function(cb){ return cb.checked; })
: false;
autreInput.required = !anyChecked;
if (autreLabel) {
var star = autreLabel.querySelector('.asterisk');
if (!anyChecked && !star) {
var s = document.createElement('span');
s.className = 'asterisk';
s.textContent = '*';
autreLabel.appendChild(document.createTextNode(' '));
autreLabel.appendChild(s);
} else if (anyChecked && star) {
star.previousSibling && star.previousSibling.nodeType === 3 && star.previousSibling.remove();
star.remove();
}
}
}
fs.addEventListener('change', function(e) {
if (e.target && e.target.name === 'languages[]') update();
});
update();
})();
</script>
<!-- ═══════════════════ Mots-clés ═══════════════════ -->
<fieldset>