mandantAnlegen(); // Die Gruppen in umgekehrter Namensreihenfolge sortiert: Die Liste muss // der Sortierung der Kontengruppen folgen, nicht dem Alphabet. $sparen = Kontengruppe::anlegen('Sparen', '', 1); $liquide = Kontengruppe::anlegen('Liquide Mittel', '', 2); $this->giro = Konto::anlegen([ 'name' => 'Auswahl Giro', 'kontoart' => 'bank', 'anfangssaldo' => 0, 'aktiv' => 1, 'kontengruppe_id' => $liquide, ]); $this->tagesgeld = Konto::anlegen([ 'name' => 'Auswahl Tagesgeld', 'kontoart' => 'bank', 'anfangssaldo' => 0, 'aktiv' => 1, 'kontengruppe_id' => $sparen, ]); $this->bauspar = Konto::anlegen([ 'name' => 'Auswahl Bausparen', 'kontoart' => 'bank', 'anfangssaldo' => 0, 'aktiv' => 1, ]); $this->alt = Konto::anlegen([ 'name' => 'Auswahl Altkonto', 'kontoart' => 'bank', 'anfangssaldo' => 0, 'aktiv' => 0, 'kontengruppe_id' => $sparen, ]); $this->lebensmittel = Kategorie::anlegen(['name' => 'Auswahl Lebensmittel', 'art' => 'ausgabe']); $this->gruppenNurAktivNachKontengruppe(); $this->auswahllisteZeigtUmbuchungskonten(); $this->formularwerteHinUndZurueck(); $this->regelsplitsMitGegenkonto(); $this->regelmaskeHatGemeinsameListe(); $this->buchungsberichtFiltertNachUmbuchungskonto(); $this->exportFiltertNachUmbuchungskonto(); $this->ueberweisungAufEigenesKonto(); $this->vertragUndVorlageMitGegenkonto(); } private function gruppenNurAktivNachKontengruppe(): void { $gruppen = Konto::umbuchungsgruppen(Konto::alle()); $this->assertEquals( ['Umbuchungskonten – Sparen', 'Umbuchungskonten – Liquide Mittel', 'Umbuchungskonten – nicht gruppiert'], array_keys($gruppen), 'Die Umbuchungskonten stehen je Kontengruppe in deren Reihenfolge' ); $namen = array_merge(...array_map( static fn(array $konten): array => array_column($konten, 'name'), array_values($gruppen) )); $this->assert(!in_array('Auswahl Altkonto', $namen, true), 'Ein inaktives Konto wird nicht angeboten'); $mitAltem = Konto::umbuchungsgruppen(Konto::alle(), [$this->alt]); $this->assertEquals( ['Auswahl Altkonto', 'Auswahl Tagesgeld'], array_column($mitAltem['Umbuchungskonten – Sparen'], 'name'), 'Ein schon gewähltes inaktives Konto bleibt in seiner Gruppe stehen' ); $ohneGruppen = Konto::umbuchungsgruppen([ ['id' => 1, 'name' => 'A', 'aktiv' => 1, 'gruppenname' => null], ]); $this->assertEquals(['Umbuchungskonten'], array_keys($ohneGruppen), 'Ohne Kontengruppen eine einzige Überschrift'); } private function auswahllisteZeigtUmbuchungskonten(): void { $html = $this->auswahlliste('kategorie:' . $this->lebensmittel, $this->giro); $this->assert(str_contains($html, ''), 'Die Kategorien stehen oben'); $kategorien = strpos($html, 'Auswahl Lebensmittel'); $tagesgeld = strpos($html, '[Auswahl Tagesgeld]'); $this->assert( $kategorien !== false && $tagesgeld !== false && $kategorien < $tagesgeld, 'Die Umbuchungskonten stehen unter den Kategorien' ); $this->assert( str_contains($html, ''), 'Die Umbuchungskonten sind nach Kontengruppe beschriftet' ); $this->assert(!str_contains($html, '[Auswahl Giro]'), 'Das eigene Konto wird nicht angeboten'); $this->assert( (bool)preg_match('#