Compare commits

..

1 commit

Author SHA1 Message Date
ed90282ef7 deblan/csv dependency 2017-01-11 15:41:10 +01:00
8 changed files with 45 additions and 119 deletions

2
.gitignore vendored
View file

@ -1 +1,3 @@
*.swp
tags
vendor vendor

View file

@ -21,4 +21,3 @@ SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

View file

@ -1,7 +1,7 @@
csv-validator csv-validator
============= =============
[![](https://phpci.gitnet.fr/build-status/image/2?branch=master&label=PHPCensor&style=flat-square)](https://phpci.gitnet.fr/build-status/view/2) ![](https://phpci.gitnet.fr//build-status/image/1)
CSV validator library CSV validator library
@ -45,7 +45,7 @@ $validator->addFieldConstraint(0, new Email());
$validator->addFieldConstraint(1, new Date()); $validator->addFieldConstraint(1, new Date());
// Validate the legend // Validate the legend
$validator->setExpectedHeaders(['foo', 'bar', 'bim']); $validator->setExpectedLegend(array('foo', 'bar', 'bim'));
// An line must contain 3 columns // An line must contain 3 columns
$validator->addDataConstraint(new Callback(function($data, ExecutionContextInterface $context) { $validator->addDataConstraint(new Callback(function($data, ExecutionContextInterface $context) {
@ -55,10 +55,10 @@ $validator->addDataConstraint(new Callback(function($data, ExecutionContextInter
})); }));
// Initialisation of the parser // Initialisation of the parser
$parser = new CsvParser(); $parser = new CsvParser(__DIR__.'/tests/fixtures/example.csv');
$parser->setHasHeaders(true); $parser->setHasLegend(true);
$validator->validate($parser->parseFile(__DIR__.'/tests/fixtures/example.csv')); $validator->validate($parser);
if ($validator->isValid() === false) { if ($validator->isValid() === false) {
foreach ($validator->getErrors() as $error) { foreach ($validator->getErrors() as $error) {
@ -80,39 +80,6 @@ EOF;
} }
``` ```
Run `example.php` and see results:
```
<ul>
<li>Line: 1</li>
<li>Column: </li>
<li>
<p>Invalid legend.</p>
</li>
</ul>
<ul>
<li>Line: 4</li>
<li>Column: </li>
<li>
<p>The line must contain 3 columns</p>
</li>
</ul>
<ul>
<li>Line: 2</li>
<li>Column: 1</li>
<li>
<p>This value is not a valid email address.</p>
</li>
</ul>
<ul>
<li>Line: 3</li>
<li>Column: 2</li>
<li>
<p>This value is not a valid date.</p>
</li>
</ul>
```
Contributors Contributors
------------ ------------

View file

@ -16,7 +16,7 @@
"minimum-stability": "dev", "minimum-stability": "dev",
"require": { "require": {
"php": ">=5.6.0", "php": ">=5.6.0",
"symfony/validator": "3.*", "symfony/validator": "2.*",
"deblan/csv": "v2.0.*" "deblan/csv": "v1.2"
} }
} }

View file

@ -2,6 +2,7 @@
use Deblan\Csv\CsvParser; use Deblan\Csv\CsvParser;
use Deblan\CsvValidator\Validator; use Deblan\CsvValidator\Validator;
use Symfony\Component\Validator\Validation;
use Symfony\Component\Validator\Constraints\Email; use Symfony\Component\Validator\Constraints\Email;
use Symfony\Component\Validator\Constraints\Date; use Symfony\Component\Validator\Constraints\Date;
use Symfony\Component\Validator\Constraints\Callback; use Symfony\Component\Validator\Constraints\Callback;
@ -19,7 +20,7 @@ $validator->addFieldConstraint(0, new Email());
$validator->addFieldConstraint(1, new Date()); $validator->addFieldConstraint(1, new Date());
// Validate the legend // Validate the legend
$validator->setExpectedHeaders(['foo', 'bar', 'bim']); $validator->setExpectedLegend(array('foo', 'bar', 'bim'));
// An line must contain 3 columns // An line must contain 3 columns
$validator->addDataConstraint(new Callback(function($data, ExecutionContextInterface $context) { $validator->addDataConstraint(new Callback(function($data, ExecutionContextInterface $context) {
@ -29,10 +30,10 @@ $validator->addDataConstraint(new Callback(function ($data, ExecutionContextInte
})); }));
// Initialisation of the parser // Initialisation of the parser
$parser = new CsvParser(); $parser = new CsvParser(__DIR__.'/tests/fixtures/example.csv');
$parser->setHasHeaders(true); $parser->setHasLegend(true);
$validator->validate($parser->parseFile(__DIR__.'/tests/fixtures/example.csv')); $validator->validate($parser);
if ($validator->isValid() === false) { if ($validator->isValid() === false) {
foreach ($validator->getErrors() as $error) { foreach ($validator->getErrors() as $error) {

View file

@ -49,7 +49,7 @@ class Validator
/** /**
* @var array * @var array
*/ */
protected $expectedHeaders = []; protected $expectedLegend = [];
/** /**
* Constructor. * Constructor.
@ -105,9 +105,9 @@ class Validator
* *
* @return Validator * @return Validator
*/ */
public function setExpectedHeaders(array $legend) public function setExpectedLegend(array $legend)
{ {
$this->expectedHeaders = $legend; $this->expectedLegend = $legend;
return $this; return $this;
} }
@ -121,12 +121,13 @@ class Validator
{ {
if ($this->parser !== $parser) { if ($this->parser !== $parser) {
$this->parser = $parser; $this->parser = $parser;
$this->parser->parse();
$this->errors = []; $this->errors = [];
} elseif ($this->hasValidate) { } elseif ($this->hasValidate) {
return; return;
} }
$this->validateHeaders(); $this->validateLegend();
$this->validateDatas(); $this->validateDatas();
$this->validateFields(); $this->validateFields();
@ -136,17 +137,17 @@ class Validator
/** /**
* Validates the legend. * Validates the legend.
*/ */
protected function validateHeaders() protected function validateLegend()
{ {
if (!$this->parser->getHasHeaders()) { if (!$this->parser->getHasLegend()) {
return; return;
} }
if (empty($this->expectedHeaders)) { if (empty($this->expectedLegend)) {
return; return;
} }
if ($this->parser->getHeaders() !== $this->expectedHeaders) { if ($this->parser->getLegend() !== $this->expectedLegend) {
$this->mergeErrorMessage('Invalid legend.', 1); $this->mergeErrorMessage('Invalid legend.', 1);
} }
} }
@ -293,7 +294,7 @@ class Validator
*/ */
protected function getTrueLine($line) protected function getTrueLine($line)
{ {
if ($this->parser->getHasHeaders()) { if ($this->parser->getHasLegend()) {
++$line; ++$line;
} }

View file

@ -1,44 +0,0 @@
<?php
/**
* class ExampleTest.
*
* @author Simon Vieille <simon@deblan.fr>
*/
class ExampleTest extends \PHPUnit_Framework_TestCase
{
public function testExemple()
{
$content = shell_exec('php -f '.__DIR__.'/../example.php');
$this->assertEquals('<ul>
<li>Line: 1</li>
<li>Column: </li>
<li>
<p>Invalid legend.</p>
</li>
</ul>
<ul>
<li>Line: 4</li>
<li>Column: </li>
<li>
<p>The line must contain 3 columns</p>
</li>
</ul>
<ul>
<li>Line: 2</li>
<li>Column: 1</li>
<li>
<p>This value is not a valid email address.</p>
</li>
</ul>
<ul>
<li>Line: 3</li>
<li>Column: 2</li>
<li>
<p>This value is not a valid date.</p>
</li>
</ul>
', $content);
}
}

View file

@ -16,20 +16,20 @@ class ValidatorTest extends \PHPUnit_Framework_TestCase
$validator->isValid(); $validator->isValid();
} }
public function testExpectedHeaders() public function testExpectedLegend()
{ {
$parser = $this->generateParser('example.csv'); $parser = $this->generateParser('example.csv');
$parser->setHasHeaders(true); $parser->setHasLegend(true);
$validator = $this->generateValidator(); $validator = $this->generateValidator();
$validator->setExpectedHeaders(['foo', 'bar', 'boo']); $validator->setExpectedLegend(['foo', 'bar', 'boo']);
$validator->validate($parser->parseFile(__DIR__.'/fixtures/example.csv')); $validator->validate($parser);
$this->assertEquals(true, $validator->isValid()); $this->assertEquals(true, $validator->isValid());
$this->assertEquals(0, count($validator->getErrors())); $this->assertEquals(0, count($validator->getErrors()));
$validator = $this->generateValidator(); $validator = $this->generateValidator();
$validator->setExpectedHeaders(['bad', 'legend']); $validator->setExpectedLegend(['bad', 'legend']);
$validator->validate($parser->parseFile(__DIR__.'/fixtures/example.csv')); $validator->validate($parser);
$this->assertEquals(false, $validator->isValid()); $this->assertEquals(false, $validator->isValid());
$this->assertEquals(1, count($validator->getErrors())); $this->assertEquals(1, count($validator->getErrors()));
} }
@ -38,7 +38,7 @@ class ValidatorTest extends \PHPUnit_Framework_TestCase
{ {
$parser = $this->generateParser('example.csv'); $parser = $this->generateParser('example.csv');
$validator = $this->generateValidator(); $validator = $this->generateValidator();
$validator->validate($parser->parseFile(__DIR__.'/fixtures/example.csv')); $validator->validate($parser);
$this->assertEquals(true, $validator->isValid()); $this->assertEquals(true, $validator->isValid());
} }
@ -47,14 +47,14 @@ class ValidatorTest extends \PHPUnit_Framework_TestCase
$parser = $this->generateParser('example.csv'); $parser = $this->generateParser('example.csv');
$validator = $this->generateValidator(); $validator = $this->generateValidator();
$validator->addFieldConstraint(0, new NotBlank()); $validator->addFieldConstraint(0, new NotBlank());
$validator->validate($parser->parseFile(__DIR__.'/fixtures/example.csv')); $validator->validate($parser);
$this->assertEquals(true, $validator->isValid()); $this->assertEquals(true, $validator->isValid());
$this->assertEquals(0, count($validator->getErrors())); $this->assertEquals(0, count($validator->getErrors()));
$parser = $this->generateParser('example.csv'); $parser = $this->generateParser('example.csv');
$validator = $this->generateValidator(); $validator = $this->generateValidator();
$validator->addFieldConstraint(1, new NotBlank()); $validator->addFieldConstraint(1, new NotBlank());
$validator->validate($parser->parseFile(__DIR__.'/fixtures/example.csv')); $validator->validate($parser);
$this->assertEquals(true, $validator->isValid()); $this->assertEquals(true, $validator->isValid());
$this->assertEquals(0, count($validator->getErrors())); $this->assertEquals(0, count($validator->getErrors()));
@ -62,24 +62,24 @@ class ValidatorTest extends \PHPUnit_Framework_TestCase
$validator = $this->generateValidator(); $validator = $this->generateValidator();
$validator->addFieldConstraint(0, new NotBlank()); $validator->addFieldConstraint(0, new NotBlank());
$validator->addFieldConstraint(1, new NotBlank()); $validator->addFieldConstraint(1, new NotBlank());
$validator->validate($parser->parseFile(__DIR__.'/fixtures/example.csv')); $validator->validate($parser);
$this->assertEquals(true, $validator->isValid()); $this->assertEquals(true, $validator->isValid());
$this->assertEquals(0, count($validator->getErrors())); $this->assertEquals(0, count($validator->getErrors()));
} }
public function testFieldContraintsKo() public function testFieldContraintsKo()
{ {
$parser = $this->generateParser(); $parser = $this->generateParser('example.csv');
$validator = $this->generateValidator(); $validator = $this->generateValidator();
$validator->addFieldConstraint(0, new Email()); $validator->addFieldConstraint(0, new Email());
$validator->validate($parser->parseFile(__DIR__.'/fixtures/example.csv')); $validator->validate($parser);
$this->assertEquals(false, $validator->isValid()); $this->assertEquals(false, $validator->isValid());
$this->assertEquals(2, count($validator->getErrors())); $this->assertEquals(2, count($validator->getErrors()));
$parser = $this->generateParser(); $parser = $this->generateParser('example.csv');
$validator = $this->generateValidator(); $validator = $this->generateValidator();
$validator->addFieldConstraint(1, new Email()); $validator->addFieldConstraint(1, new Email());
$validator->validate($parser->parseFile(__DIR__.'/fixtures/example.csv')); $validator->validate($parser);
$this->assertEquals(false, $validator->isValid()); $this->assertEquals(false, $validator->isValid());
$this->assertEquals(5, count($validator->getErrors())); $this->assertEquals(5, count($validator->getErrors()));
@ -87,14 +87,14 @@ class ValidatorTest extends \PHPUnit_Framework_TestCase
$validator = $this->generateValidator(); $validator = $this->generateValidator();
$validator->addFieldConstraint(0, new Email()); $validator->addFieldConstraint(0, new Email());
$validator->addFieldConstraint(1, new Email()); $validator->addFieldConstraint(1, new Email());
$validator->validate($parser->parseFile(__DIR__.'/fixtures/example.csv')); $validator->validate($parser);
$this->assertEquals(false, $validator->isValid()); $this->assertEquals(false, $validator->isValid());
$this->assertEquals(7, count($validator->getErrors())); $this->assertEquals(7, count($validator->getErrors()));
} }
protected function generateParser() protected function generateParser($file)
{ {
return new CsvParser(); return new CsvParser(__DIR__.'/fixtures/'.$file);
} }
protected function generateValidator() protected function generateValidator()