deblan/csv upgraded to the v2 and more units tests

This commit is contained in:
Simon Vieille 2017-03-12 19:22:52 +01:00
parent 104b25d17c
commit 31adc51188
6 changed files with 114 additions and 38 deletions

View file

@ -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->setExpectedLegend(array('foo', 'bar', 'bim')); $validator->setExpectedHeaders(['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(__DIR__.'/tests/fixtures/example.csv'); $parser = new CsvParser();
$parser->setHasLegend(true); $parser->setHasHeaders(true);
$validator->validate($parser); $validator->validate($parser->parseFile(__DIR__.'/tests/fixtures/example.csv'));
if ($validator->isValid() === false) { if ($validator->isValid() === false) {
foreach ($validator->getErrors() as $error) { foreach ($validator->getErrors() as $error) {
@ -80,6 +80,39 @@ 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

@ -17,6 +17,6 @@
"require": { "require": {
"php": ">=5.6.0", "php": ">=5.6.0",
"symfony/validator": "2.*", "symfony/validator": "2.*",
"deblan/csv": "v1.1" "deblan/csv": "v2.0.*"
} }
} }

View file

@ -20,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->setExpectedLegend(array('foo', 'bar', 'bim')); $validator->setExpectedHeaders(['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) {
@ -30,17 +30,17 @@ $validator->addDataConstraint(new Callback(function($data, ExecutionContextInter
})); }));
// Initialisation of the parser // Initialisation of the parser
$parser = new CsvParser(__DIR__.'/tests/fixtures/example.csv'); $parser = new CsvParser();
$parser->setHasLegend(true); $parser->setHasHeaders(true);
$validator->validate($parser); $validator->validate($parser->parseFile(__DIR__.'/tests/fixtures/example.csv'));
if ($validator->isValid() === false) { if ($validator->isValid() === false) {
foreach ($validator->getErrors() as $error) { foreach ($validator->getErrors() as $error) {
$line = $error->getLine(); $line = $error->getLine();
$column = $error->getColumn(); $column = $error->getColumn();
$message = $error->getViolation()->getMessage(); $message = $error->getViolation()->getMessage();
echo <<<EOF echo <<<EOF
<ul> <ul>
<li>Line: $line</li> <li>Line: $line</li>

View file

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

44
tests/ExampleTest.php Normal file
View file

@ -0,0 +1,44 @@
<?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 testExpectedLegend() public function testExpectedHeaders()
{ {
$parser = $this->generateParser('example.csv'); $parser = $this->generateParser('example.csv');
$parser->setHasLegend(true); $parser->setHasHeaders(true);
$validator = $this->generateValidator(); $validator = $this->generateValidator();
$validator->setExpectedLegend(['foo', 'bar', 'boo']); $validator->setExpectedHeaders(['foo', 'bar', 'boo']);
$validator->validate($parser); $validator->validate($parser->parseFile(__DIR__.'/fixtures/example.csv'));
$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->setExpectedLegend(['bad', 'legend']); $validator->setExpectedHeaders(['bad', 'legend']);
$validator->validate($parser); $validator->validate($parser->parseFile(__DIR__.'/fixtures/example.csv'));
$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); $validator->validate($parser->parseFile(__DIR__.'/fixtures/example.csv'));
$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); $validator->validate($parser->parseFile(__DIR__.'/fixtures/example.csv'));
$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); $validator->validate($parser->parseFile(__DIR__.'/fixtures/example.csv'));
$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); $validator->validate($parser->parseFile(__DIR__.'/fixtures/example.csv'));
$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('example.csv'); $parser = $this->generateParser();
$validator = $this->generateValidator(); $validator = $this->generateValidator();
$validator->addFieldConstraint(0, new Email()); $validator->addFieldConstraint(0, new Email());
$validator->validate($parser); $validator->validate($parser->parseFile(__DIR__.'/fixtures/example.csv'));
$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('example.csv'); $parser = $this->generateParser();
$validator = $this->generateValidator(); $validator = $this->generateValidator();
$validator->addFieldConstraint(1, new Email()); $validator->addFieldConstraint(1, new Email());
$validator->validate($parser); $validator->validate($parser->parseFile(__DIR__.'/fixtures/example.csv'));
$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); $validator->validate($parser->parseFile(__DIR__.'/fixtures/example.csv'));
$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($file) protected function generateParser()
{ {
return new CsvParser(__DIR__.'/fixtures/'.$file); return new CsvParser();
} }
protected function generateValidator() protected function generateValidator()