diff --git a/README.md b/README.md index 8ea05894..d48a431a 100644 --- a/README.md +++ b/README.md @@ -210,8 +210,16 @@ Default report format is `table`: Schema: ./tests/schemas/demo_invalid.yml -OK: ./tests/fixtures/batch/sub/demo-3.csv -Error: ./tests/fixtures/batch/demo-2.csv +Invalid file: ./tests/fixtures/batch/demo-1.csv ++------+------------------+--------------+ demo-1.csv ------------------------------------------+ +| Line | id:Column | Rule | Message | ++------+------------------+--------------+------------------------------------------------------+ +| 3 | 2:Float | max | Value "74605.944" is greater than "74605" | +| 3 | 4:Favorite color | allow_values | Value "blue" is not allowed. Allowed values: ["red", | +| | | | "green", "Blue"] | ++------+------------------+--------------+ demo-1.csv ------------------------------------------+ + +Invalid file: ./tests/fixtures/batch/demo-2.csv +------+------------+------------+----- demo-2.csv ---------------------------------------+ | Line | id:Column | Rule | Message | +------+------------+------------+--------------------------------------------------------+ @@ -225,15 +233,7 @@ Error: ./tests/fixtures/batch/demo-2.csv | 7 | 0:Name | min_length | Value "Lois" (length: 4) is too short. Min length is 5 | +------+------------+------------+----- demo-2.csv ---------------------------------------+ -Error: ./tests/fixtures/batch/demo-1.csv -+------+------------------+--------------+ demo-1.csv ------------------------------------------+ -| Line | id:Column | Rule | Message | -+------+------------------+--------------+------------------------------------------------------+ -| 3 | 2:Float | max | Value "74605.944" is greater than "74605" | -| 3 | 4:Favorite color | allow_values | Value "blue" is not allowed. Allowed values: ["red", | -| | | | "green", "Blue"] | -+------+------------------+--------------+ demo-1.csv ------------------------------------------+ - +OK: ./tests/fixtures/batch/sub/demo-3.csv Found 7 issues in 2 out of 3 CSV files. ``` diff --git a/src/Commands/ValidateCsv.php b/src/Commands/ValidateCsv.php index ffa8cd1c..3a359db0 100644 --- a/src/Commands/ValidateCsv.php +++ b/src/Commands/ValidateCsv.php @@ -91,7 +91,7 @@ protected function executeAction(): int $errorCounter += $errorSuite->count(); if ($this->isTextMode()) { - $this->_('Error: ' . Utils::cutPath($csvFilename->getPathname()), OutLvl::E); + $this->_('Invalid file: ' . Utils::cutPath($csvFilename->getPathname()), OutLvl::E); } $output = $errorSuite->render($this->getOptString('report')); if ($output !== null) { diff --git a/src/Utils.php b/src/Utils.php index 102f2cd6..bac20b63 100644 --- a/src/Utils.php +++ b/src/Utils.php @@ -68,11 +68,12 @@ public static function findFiles(array $paths): array if (\strpos($path, '*') !== false) { $finder = (new Finder()) ->in(\dirname($path)) - // ->depth(self::MAX_DIRECTORY_DEPTH) + ->depth('< ' . self::MAX_DIRECTORY_DEPTH) ->ignoreVCSIgnored(true) ->ignoreDotFiles(true) ->followLinks() - ->name(\basename($path)); + ->name(\basename($path)) + ->sortByName(true); foreach ($finder as $file) { if (!$file->isReadable()) { diff --git a/tests/Blueprint/CommandsTest.php b/tests/Blueprint/CommandsTest.php index a3554654..fb49c9cf 100644 --- a/tests/Blueprint/CommandsTest.php +++ b/tests/Blueprint/CommandsTest.php @@ -76,7 +76,7 @@ public function testCreateValidateNegative(): void $expected = <<<'TXT' Schema: ./tests/schemas/demo_invalid.yml - Error: ./tests/fixtures/demo.csv + Invalid file: ./tests/fixtures/demo.csv +------+------------------+--------------+-- demo.csv --------------------------------------------+ | Line | id:Column | Rule | Message | +------+------------------+--------------+--------------------------------------------------------+ @@ -117,8 +117,16 @@ public function testCreateValidateNegativeMultiple(): void $expected = <<<'TXT' Schema: ./tests/schemas/demo_invalid.yml - OK: ./tests/fixtures/batch/sub/demo-3.csv - Error: ./tests/fixtures/batch/demo-2.csv + Invalid file: ./tests/fixtures/batch/demo-1.csv + +------+------------------+--------------+ demo-1.csv ------------------------------------------+ + | Line | id:Column | Rule | Message | + +------+------------------+--------------+------------------------------------------------------+ + | 3 | 2:Float | max | Value "74605.944" is greater than "74605" | + | 3 | 4:Favorite color | allow_values | Value "blue" is not allowed. Allowed values: ["red", | + | | | | "green", "Blue"] | + +------+------------------+--------------+ demo-1.csv ------------------------------------------+ + + Invalid file: ./tests/fixtures/batch/demo-2.csv +------+------------+------------+----- demo-2.csv ---------------------------------------+ | Line | id:Column | Rule | Message | +------+------------+------------+--------------------------------------------------------+ @@ -132,15 +140,7 @@ public function testCreateValidateNegativeMultiple(): void | 7 | 0:Name | min_length | Value "Lois" (length: 4) is too short. Min length is 5 | +------+------------+------------+----- demo-2.csv ---------------------------------------+ - Error: ./tests/fixtures/batch/demo-1.csv - +------+------------------+--------------+ demo-1.csv ------------------------------------------+ - | Line | id:Column | Rule | Message | - +------+------------------+--------------+------------------------------------------------------+ - | 3 | 2:Float | max | Value "74605.944" is greater than "74605" | - | 3 | 4:Favorite color | allow_values | Value "blue" is not allowed. Allowed values: ["red", | - | | | | "green", "Blue"] | - +------+------------------+--------------+ demo-1.csv ------------------------------------------+ - + OK: ./tests/fixtures/batch/sub/demo-3.csv Found 7 issues in 2 out of 3 CSV files. TXT; @@ -173,7 +173,7 @@ public function testCreateValidateNegativeText(): void $expected = <<<'TXT' Schema: ./tests/schemas/demo_invalid.yml - Error: ./tests/fixtures/demo.csv + Invalid file: ./tests/fixtures/demo.csv "max" at line 5, column "2:Float". Value "74605.944" is greater than "74605". "allow_values" at line 5, column "4:Favorite color". Value "blue" is not allowed. Allowed values: ["red", "green", "Blue"]. "min_length" at line 6, column "0:Name". Value "Carl" (length: 4) is too short. Min length is 5. @@ -204,9 +204,24 @@ public function testCreateValidateNegativeTeamcity(): void $expected = <<<'TXT' Schema: ./tests/schemas/demo_invalid.yml + + Invalid file: ./tests/fixtures/batch/demo-1.csv - OK: ./tests/fixtures/batch/sub/demo-3.csv - Error: ./tests/fixtures/batch/demo-2.csv + ##teamcity[testCount count='2' flowId='42'] + + ##teamcity[testSuiteStarted name='demo-1.csv' flowId='42'] + + ##teamcity[testStarted name='max at column 2:Float' locationHint='php_qn://./tests/fixtures/batch/demo-1.csv' flowId='42'] + "max" at line 3, column "2:Float". Value "74605.944" is greater than "74605". + ##teamcity[testFinished name='max at column 2:Float' flowId='42'] + + ##teamcity[testStarted name='allow_values at column 4:Favorite color' locationHint='php_qn://./tests/fixtures/batch/demo-1.csv' flowId='42'] + "allow_values" at line 3, column "4:Favorite color". Value "blue" is not allowed. Allowed values: ["red", "green", "Blue"]. + ##teamcity[testFinished name='allow_values at column 4:Favorite color' flowId='42'] + + ##teamcity[testSuiteFinished name='demo-1.csv' flowId='42'] + + Invalid file: ./tests/fixtures/batch/demo-2.csv ##teamcity[testCount count='5' flowId='42'] @@ -234,22 +249,7 @@ public function testCreateValidateNegativeTeamcity(): void ##teamcity[testSuiteFinished name='demo-2.csv' flowId='42'] - Error: ./tests/fixtures/batch/demo-1.csv - - ##teamcity[testCount count='2' flowId='42'] - - ##teamcity[testSuiteStarted name='demo-1.csv' flowId='42'] - - ##teamcity[testStarted name='max at column 2:Float' locationHint='php_qn://./tests/fixtures/batch/demo-1.csv' flowId='42'] - "max" at line 3, column "2:Float". Value "74605.944" is greater than "74605". - ##teamcity[testFinished name='max at column 2:Float' flowId='42'] - - ##teamcity[testStarted name='allow_values at column 4:Favorite color' locationHint='php_qn://./tests/fixtures/batch/demo-1.csv' flowId='42'] - "allow_values" at line 3, column "4:Favorite color". Value "blue" is not allowed. Allowed values: ["red", "green", "Blue"]. - ##teamcity[testFinished name='allow_values at column 4:Favorite color' flowId='42'] - - ##teamcity[testSuiteFinished name='demo-1.csv' flowId='42'] - + OK: ./tests/fixtures/batch/sub/demo-3.csv Found 7 issues in 2 out of 3 CSV files. TXT; diff --git a/tests/Blueprint/MiscTest.php b/tests/Blueprint/MiscTest.php index faa90a94..f7197789 100644 --- a/tests/Blueprint/MiscTest.php +++ b/tests/Blueprint/MiscTest.php @@ -139,42 +139,42 @@ public function testFindFiles(): void $this->getFileName(Utils::findFiles(['*.qwerty'])); - isSame(['demo-3.csv', 'demo-2.csv', 'demo-1.csv'], $this->getFileName(Utils::findFiles([ + isSame(['demo-1.csv', 'demo-2.csv', 'demo-3.csv'], $this->getFileName(Utils::findFiles([ PROJECT_ROOT . '/tests/fixtures/batch/*.csv', ]))); - isSame(['demo-3.csv', 'demo-2.csv', 'demo-1.csv'], $this->getFileName(Utils::findFiles([ + isSame(['demo-1.csv', 'demo-2.csv', 'demo-3.csv'], $this->getFileName(Utils::findFiles([ 'tests/fixtures/batch/*.csv', ]))); - isSame(['demo-3.csv', 'demo-2.csv', 'demo-1.csv'], $this->getFileName(Utils::findFiles([ + isSame(['demo-1.csv', 'demo-2.csv', 'demo-3.csv'], $this->getFileName(Utils::findFiles([ './tests/fixtures/batch/*.csv', ]))); - isSame(['demo-3.csv', 'demo-2.csv', 'demo-1.csv'], $this->getFileName(Utils::findFiles(['**/demo-*.csv']))); + isSame(['demo-1.csv', 'demo-2.csv', 'demo-3.csv'], $this->getFileName(Utils::findFiles(['**/demo-*.csv']))); - isSame(['demo-3.csv', 'demo-2.csv', 'demo-1.csv', 'demo.csv'], $this->getFileName(Utils::findFiles([ + isSame(['demo-1.csv', 'demo-2.csv', 'demo-3.csv', 'demo.csv'], $this->getFileName(Utils::findFiles([ PROJECT_ROOT . '/tests/fixtures/batch/*.csv', PROJECT_ROOT . '/tests/fixtures/demo.csv', ]))); - isSame(['demo.csv', 'demo-3.csv', 'demo-2.csv', 'demo-1.csv'], $this->getFileName(Utils::findFiles([ + isSame(['demo.csv', 'demo-1.csv', 'demo-2.csv', 'demo-3.csv'], $this->getFileName(Utils::findFiles([ PROJECT_ROOT . '/tests/fixtures/demo.csv', PROJECT_ROOT . '/tests/fixtures/batch/*.csv', ]))); isSame( [ + 'demo-1.csv', + 'demo-2.csv', + 'demo-3.csv', 'complex_header.csv', - 'simple_no_header.csv', - 'empty_no_header.csv', + 'complex_no_header.csv', + 'demo.csv', 'empty_header.csv', - 'demo-3.csv', - 'demo-2.csv', - 'demo-1.csv', + 'empty_no_header.csv', 'simple_header.csv', - 'demo.csv', - 'complex_no_header.csv', + 'simple_no_header.csv', ], $this->getFileName(Utils::findFiles(['tests/**/*.csv'])), );