makeTempCsv($csv); $result = $parser->suggestFormat($file, 'csv'); $this->assert($result !== null, 'suggestFormat() gibt ein Ergebnis zurück'); $this->assertEquals(4, $result['skip_rows'], 'skip_rows korrekt erkannt (4)'); $this->assertEquals(';', $result['delimiter'], 'Delimiter korrekt erkannt (;)'); $this->assertEquals(1, $result['has_header_row'], 'has_header_row gesetzt'); $this->assertNotEmpty($result['header'], 'header-Array nicht leer'); $this->assertNotEmpty($result['mapping'], 'mapping-Array nicht leer'); $this->assert(isset($result['mapping']['col_buchungstag']), 'col_buchungstag gemappt'); $this->assert(isset($result['mapping']['col_wertstellung']), 'col_wertstellung gemappt'); $this->assert(isset($result['mapping']['col_wert']), 'col_wert gemappt (Betrag)'); unlink($file); // CSV ohne Banking-Keywords → kein Vorschlag $csvOhneKeywords = implode("\n", [ 'Foo;Bar;Baz', '1;2;3', ]); $file2 = $this->makeTempCsv($csvOhneKeywords); $result2 = $parser->suggestFormat($file2, 'csv'); $this->assert($result2 === null, 'suggestFormat() gibt null zurück wenn kein Banking-Header erkannt'); unlink($file2); // Comdirect-ähnliche CSV (kein skip_rows) $csvComdirect = implode("\n", [ '"Buchungstag";"Wertstellung";"Vorgang";"Buchungstext";"Betrag (€)"', '"10.01.2026";"10.01.2026";"Lastschrift";"Amazon";"−19,99"', ]); $file3 = $this->makeTempCsv($csvComdirect); $result3 = $parser->suggestFormat($file3, 'csv'); $this->assert($result3 !== null, 'suggestFormat() erkennt Comdirect-ähnliche CSV'); $this->assertEquals(0, $result3['skip_rows'], 'skip_rows=0 bei direktem Header'); unlink($file3); } }