OpenNIT

Quelltext des aktuellen Standes

Fassung 1.1.1

SearchableSelectCustomTest.php

2 KB
<?php

declare(strict_types=1);

/**
 * Sichert den Freitext-Modus des zentralen Dropdowns ab.
 *
 * Der Modus ist bewusst ein Opt-in einzelner Felder: Er gehört nur dorthin, wo
 * die Spalte Text speichert und ein bekannter Eintrag lediglich bevorzugt wird.
 * Felder mit Standort-Fremdschlüssel bleiben reine Auswahl.
 */
return static function (): void {

    $root = dirname(__DIR__);

    test('Die Komponente kennt den Freitext-Modus', function () use ($root) {
        $js  = file_get_contents($root . '/public/assets/js/app.js');
        $css = file_get_contents($root . '/public/assets/css/app.css');

        assertTrue(str_contains($js, "hasAttribute('data-allow-custom')"));
        assertTrue(str_contains($js, 'ss-item-custom'));
        // Wiederverwendung der einmal angelegten Option verhindert Duplikate
        assertTrue(str_contains($js, "getAttribute('data-custom') === '1'"));
        assertTrue(str_contains($css, '.ss-item.ss-item-custom'));
    });

    test('Freitext ist ausschließlich im IPAM-Subnetzformular freigegeben', function () use ($root) {
        $mit = [];
        $it = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($root . '/templates'));
        foreach ($it as $f) {
            if ($f->getExtension() !== 'php') {
                continue;
            }
            if (str_contains(file_get_contents($f->getPathname()), 'data-allow-custom')) {
                $mit[] = basename(dirname($f->getPathname())) . '/' . $f->getBasename();
            }
        }
        sort($mit);
        assertSame(['ipam/subnet_form.php'], $mit);
    });

    test('Das Standortfeld des Subnetzes bleibt ein Textfeld mit Vorschlagsliste', function () use ($root) {
        $tpl = file_get_contents($root . '/templates/ipam/subnet_form.php');

        // Auswahl schreibt den Standortnamen – die Spalte speichert weiterhin Text.
        assertTrue(str_contains($tpl, 'name="location" data-searchable data-allow-custom'));
        assertTrue(str_contains($tpl, 'value="<?= $this->e($sfLoc[\'name\']) ?>"'));
        // Hierarchie wie in den übrigen Modulen
        assertTrue(str_contains($tpl, "data-depth=\"<?= (int)(\$sfLoc['_depth'] ?? 0) ?>\""));
        // Ein bereits frei eingetragener Wert bleibt wählbar und ausgewählt
        assertTrue(str_contains($tpl, 'data-custom="1" selected'));
    });
};