Compare commits

...

6 commits

Author SHA1 Message Date
f9553115ee Update 'composer.json' 2018-03-07 13:43:19 +01:00
3276b3fb1e Update 'composer.json' 2018-03-07 13:42:54 +01:00
78610d50ea CI 2017-03-15 00:42:28 +01:00
8ee01fc209 CI 2017-03-15 00:39:46 +01:00
1e6ed3d204 Insight analyse fixes 2017-03-13 15:53:14 +01:00
31adc51188 deblan/csv upgraded to the v2 and more units tests 2017-03-12 19:22:52 +01:00
8 changed files with 119 additions and 45 deletions

2
.gitignore vendored
View file

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

View file

@ -20,4 +20,5 @@ 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/1)
[![](https://phpci.gitnet.fr/build-status/image/2?branch=master&label=PHPCensor&style=flat-square)](https://phpci.gitnet.fr/build-status/view/2)
CSV validator library
@ -45,7 +45,7 @@ $validator->addFieldConstraint(0, new Email());
$validator->addFieldConstraint(1, new Date());
// Validate the legend
$validator->setExpectedLegend(array('foo', 'bar', 'bim'));
$validator->setExpectedHeaders(['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(__DIR__.'/tests/fixtures/example.csv');
$parser->setHasLegend(true);
$parser = new CsvParser();
$parser->setHasHeaders(true);
$validator->validate($parser);
$validator->validate($parser->parseFile(__DIR__.'/tests/fixtures/example.csv'));
if ($validator->isValid() === false) {
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
------------

View file

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

View file

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