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

View file

@ -20,5 +20,4 @@ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
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
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
=============
[![](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
@ -45,7 +45,7 @@ $validator->addFieldConstraint(0, new Email());
$validator->addFieldConstraint(1, new Date());
// Validate the legend
$validator->setExpectedHeaders(['foo', 'bar', 'bim']);
$validator->setExpectedLegend(array('foo', 'bar', 'bim'));
// An line must contain 3 columns
$validator->addDataConstraint(new Callback(function($data, ExecutionContextInterface $context) {
@ -55,10 +55,10 @@ $validator->addDataConstraint(new Callback(function($data, ExecutionContextInter
}));
// Initialisation of the parser
$parser = new CsvParser();
$parser->setHasHeaders(true);
$parser = new CsvParser(__DIR__.'/tests/fixtures/example.csv');
$parser->setHasLegend(true);
$validator->validate($parser->parseFile(__DIR__.'/tests/fixtures/example.csv'));
$validator->validate($parser);
if ($validator->isValid() === false) {
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
------------

View file

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

View file

@ -2,6 +2,7 @@
use Deblan\Csv\CsvParser;
use Deblan\CsvValidator\Validator;
use Symfony\Component\Validator\Validation;
use Symfony\Component\Validator\Constraints\Email;
use Symfony\Component\Validator\Constraints\Date;
use Symfony\Component\Validator\Constraints\Callback;
@ -19,27 +20,27 @@ $validator->addFieldConstraint(0, new Email());
$validator->addFieldConstraint(1, new Date());
// Validate the legend
$validator->setExpectedHeaders(['foo', 'bar', 'bim']);
$validator->setExpectedLegend(array('foo', 'bar', 'bim'));
// An line must contain 3 columns
$validator->addDataConstraint(new Callback(function ($data, ExecutionContextInterface $context) {
$validator->addDataConstraint(new Callback(function($data, ExecutionContextInterface $context) {
if (count($data) !== 6) { // 6 because of the legend (3 fields * 2)
$context->addViolation('The line must contain 3 columns');
}
}));
// Initialisation of the parser
$parser = new CsvParser();
$parser->setHasHeaders(true);
$parser = new CsvParser(__DIR__.'/tests/fixtures/example.csv');
$parser->setHasLegend(true);
$validator->validate($parser->parseFile(__DIR__.'/tests/fixtures/example.csv'));
$validator->validate($parser);
if ($validator->isValid() === false) {
foreach ($validator->getErrors() as $error) {
$line = $error->getLine();
$line = $error->getLine();
$column = $error->getColumn();
$message = $error->getViolation()->getMessage();
echo <<<EOF
<ul>
<li>Line: $line</li>

View file

@ -49,7 +49,7 @@ class Validator
/**
* @var array
*/
protected $expectedHeaders = [];
protected $expectedLegend = [];
/**
* Constructor.
@ -105,9 +105,9 @@ class Validator
*
* @return Validator
*/
public function setExpectedHeaders(array $legend)
public function setExpectedLegend(array $legend)
{
$this->expectedHeaders = $legend;
$this->expectedLegend = $legend;
return $this;
}
@ -121,12 +121,13 @@ class Validator
{
if ($this->parser !== $parser) {
$this->parser = $parser;
$this->parser->parse();
$this->errors = [];
} elseif ($this->hasValidate) {
return;
}
$this->validateHeaders();
$this->validateLegend();
$this->validateDatas();
$this->validateFields();
@ -136,17 +137,17 @@ class Validator
/**
* Validates the legend.
*/
protected function validateHeaders()
protected function validateLegend()
{
if (!$this->parser->getHasHeaders()) {
if (!$this->parser->getHasLegend()) {
return;
}
if (empty($this->expectedHeaders)) {
if (empty($this->expectedLegend)) {
return;
}
if ($this->parser->getHeaders() !== $this->expectedHeaders) {
if ($this->parser->getLegend() !== $this->expectedLegend) {
$this->mergeErrorMessage('Invalid legend.', 1);
}
}
@ -293,7 +294,7 @@ class Validator
*/
protected function getTrueLine($line)
{
if ($this->parser->getHasHeaders()) {
if ($this->parser->getHasLegend()) {
++$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();
}
public function testExpectedHeaders()
public function testExpectedLegend()
{
$parser = $this->generateParser('example.csv');
$parser->setHasHeaders(true);
$parser->setHasLegend(true);
$validator = $this->generateValidator();
$validator->setExpectedHeaders(['foo', 'bar', 'boo']);
$validator->validate($parser->parseFile(__DIR__.'/fixtures/example.csv'));
$validator->setExpectedLegend(['foo', 'bar', 'boo']);
$validator->validate($parser);
$this->assertEquals(true, $validator->isValid());
$this->assertEquals(0, count($validator->getErrors()));
$validator = $this->generateValidator();
$validator->setExpectedHeaders(['bad', 'legend']);
$validator->validate($parser->parseFile(__DIR__.'/fixtures/example.csv'));
$validator->setExpectedLegend(['bad', 'legend']);
$validator->validate($parser);
$this->assertEquals(false, $validator->isValid());
$this->assertEquals(1, count($validator->getErrors()));
}
@ -38,7 +38,7 @@ class ValidatorTest extends \PHPUnit_Framework_TestCase
{
$parser = $this->generateParser('example.csv');
$validator = $this->generateValidator();
$validator->validate($parser->parseFile(__DIR__.'/fixtures/example.csv'));
$validator->validate($parser);
$this->assertEquals(true, $validator->isValid());
}
@ -47,14 +47,14 @@ class ValidatorTest extends \PHPUnit_Framework_TestCase
$parser = $this->generateParser('example.csv');
$validator = $this->generateValidator();
$validator->addFieldConstraint(0, new NotBlank());
$validator->validate($parser->parseFile(__DIR__.'/fixtures/example.csv'));
$validator->validate($parser);
$this->assertEquals(true, $validator->isValid());
$this->assertEquals(0, count($validator->getErrors()));
$parser = $this->generateParser('example.csv');
$validator = $this->generateValidator();
$validator->addFieldConstraint(1, new NotBlank());
$validator->validate($parser->parseFile(__DIR__.'/fixtures/example.csv'));
$validator->validate($parser);
$this->assertEquals(true, $validator->isValid());
$this->assertEquals(0, count($validator->getErrors()));
@ -62,24 +62,24 @@ class ValidatorTest extends \PHPUnit_Framework_TestCase
$validator = $this->generateValidator();
$validator->addFieldConstraint(0, 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(0, count($validator->getErrors()));
}
public function testFieldContraintsKo()
{
$parser = $this->generateParser();
$parser = $this->generateParser('example.csv');
$validator = $this->generateValidator();
$validator->addFieldConstraint(0, new Email());
$validator->validate($parser->parseFile(__DIR__.'/fixtures/example.csv'));
$validator->validate($parser);
$this->assertEquals(false, $validator->isValid());
$this->assertEquals(2, count($validator->getErrors()));
$parser = $this->generateParser();
$parser = $this->generateParser('example.csv');
$validator = $this->generateValidator();
$validator->addFieldConstraint(1, new Email());
$validator->validate($parser->parseFile(__DIR__.'/fixtures/example.csv'));
$validator->validate($parser);
$this->assertEquals(false, $validator->isValid());
$this->assertEquals(5, count($validator->getErrors()));
@ -87,14 +87,14 @@ class ValidatorTest extends \PHPUnit_Framework_TestCase
$validator = $this->generateValidator();
$validator->addFieldConstraint(0, 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(7, count($validator->getErrors()));
}
protected function generateParser()
protected function generateParser($file)
{
return new CsvParser();
return new CsvParser(__DIR__.'/fixtures/'.$file);
}
protected function generateValidator()