diff --git a/Creational/AbstractFactory/CsvParser.php b/Creational/AbstractFactory/CsvParser.php index fc259f6..5b02697 100644 --- a/Creational/AbstractFactory/CsvParser.php +++ b/Creational/AbstractFactory/CsvParser.php @@ -24,6 +24,7 @@ class CsvParser implements Parser foreach (explode(PHP_EOL, $input) as $line) { if (!$headerWasParsed && $this->skipHeaderLine === self::OPTION_CONTAINS_HEADER) { + $headerWasParsed = true; continue; } diff --git a/Creational/AbstractFactory/Tests/AbstractFactoryTest.php b/Creational/AbstractFactory/Tests/AbstractFactoryTest.php index 1500837..4ef2433 100644 --- a/Creational/AbstractFactory/Tests/AbstractFactoryTest.php +++ b/Creational/AbstractFactory/Tests/AbstractFactoryTest.php @@ -17,6 +17,39 @@ class AbstractFactoryTest extends TestCase $this->assertInstanceOf(CsvParser::class, $parser); } + public function testCsvParserCanParse() + { + $factory = new ParserFactory(); + $parser = $factory->createCsvParser(CsvParser::OPTION_CONTAINS_NO_HEADER); + + $result = $parser->parse("A0,A1,A2\nB0,B1,B2\nC0,C1,C2"); + + $this->assertEquals( + [ + ['A0', 'A1', 'A2'], + ['B0', 'B1', 'B2'], + ['C0', 'C1', 'C2'] + ], + $result + ); + } + + public function testCsvParserCanSkipHeader() + { + $factory = new ParserFactory(); + $parser = $factory->createCsvParser(CsvParser::OPTION_CONTAINS_HEADER); + + $result = $parser->parse("A0,A1,A2\nB0,B1,B2\nC0,C1,C2"); + + $this->assertEquals( + [ + ['B0', 'B1', 'B2'], + ['C0', 'C1', 'C2'] + ], + $result + ); + } + public function testCanCreateJsonParser() { $factory = new ParserFactory();