Compare commits

..

1 commit
master ... 1

Author SHA1 Message Date
Simon Vieille ed90282ef7 deblan/csv dependency 2017-01-11 15:41:10 +01:00
13 changed files with 50 additions and 157 deletions

2
.gitignore vendored
View file

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

25
Jenkinsfile vendored
View file

@ -1,25 +0,0 @@
pipeline {
agent any
stages {
stage('PHP 7.1') {
steps {
sh '/usr/local/bin/composer-php7.1 install'
sh 'php7.1 /usr/local/bin/phpunit-7'
}
}
stage('PHP 7.3') {
steps {
sh '/usr/local/bin/composer-php7.3 update'
sh 'php7.3 /usr/local/bin/phpunit-9'
}
}
stage('PHP 7.4') {
steps {
sh '/usr/local/bin/composer-php7.4 update'
sh 'php7.4 /usr/local/bin/phpunit-9'
}
}
}
}

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,4 +0,0 @@
.PHONY: tests
tests:
phpunit

View file

@ -1,7 +1,7 @@
csv-validator
=============
[![Build Status](https://ci.gitnet.fr/buildStatus/icon?job=Gitnet%2Fcsv-validator%2F3)](https://ci.gitnet.fr/job/Gitnet/job/csv-validator/job/3/)
![](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

@ -15,8 +15,8 @@
},
"minimum-stability": "dev",
"require": {
"php": "^7.1.3",
"symfony/validator": "^4",
"deblan/csv": "v2.0.*|v3.*"
"php": ">=5.6.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

@ -7,6 +7,7 @@
convertWarningsToExceptions = "true"
processIsolation = "false"
stopOnFailure = "false"
syntaxCheck = "false"
bootstrap = "vendor/autoload.php" >
<testsuites>

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,13 +121,13 @@ class Validator
{
if ($this->parser !== $parser) {
$this->parser = $parser;
$this->parser->parse();
$this->errors = [];
$this->hasValidate = false;
} elseif ($this->hasValidate) {
return;
}
$this->validateHeaders();
$this->validateLegend();
$this->validateDatas();
$this->validateFields();
@ -137,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);
}
}
@ -294,7 +294,7 @@ class Validator
*/
protected function getTrueLine($line)
{
if ($this->parser->getHasHeaders()) {
if ($this->parser->getHasLegend()) {
++$line;
}

View file

@ -1,46 +0,0 @@
<?php
use PHPUnit\Framework\TestCase;
/**
* class ExampleTest.
*
* @author Simon Vieille <simon@deblan.fr>
*/
class ExampleTest extends 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

@ -1,36 +1,35 @@
<?php
use PHPUnit\Framework\TestCase;
use Deblan\Csv\CsvParser;
use Deblan\CsvValidator\Validator;
use Symfony\Component\Validator\Validation;
use Symfony\Component\Validator\Constraints\NotBlank;
use Symfony\Component\Validator\Constraints\Email;
class ValidatorTest extends TestCase
class ValidatorTest extends \PHPUnit_Framework_TestCase
{
public function testViolation()
{
$parser = $this->generateParser('example.csv');
$validator = $this->generateValidator($parser);
$this->expectException('\RuntimeException');
$this->setExpectedException('\RuntimeException');
$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()));
}
@ -39,7 +38,7 @@ class ValidatorTest extends 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());
}
@ -48,14 +47,14 @@ class ValidatorTest extends 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()));
@ -63,24 +62,24 @@ class ValidatorTest extends 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()));
@ -88,14 +87,14 @@ class ValidatorTest extends 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()

View file

@ -1,10 +1,9 @@
<?php
use PHPUnit\Framework\TestCase;
use Symfony\Component\Validator\ConstraintViolation;
use Deblan\CsvValidator\Violation;
class ViolationTest extends TestCase
class ViolationTest extends \PHPUnit_Framework_TestCase
{
public function testViolation()
{