Version 2.0.0

This commit is contained in:
Matias Navarro Carter
2018-10-12 15:17:12 -03:00
parent 313f0eb05d
commit e540de2085
17 changed files with 373 additions and 51 deletions

16
.travis.yml Normal file
View File

@@ -0,0 +1,16 @@
language: php
dist: precise
php:
- '7.1'
- '7.2'
- nightly
sudo: false
cache:
directories:
- $HOME/.composer/cache
before_script:
- travis_retry composer self-update
- travis_retry composer install --no-interaction --prefer-dist
script: composer run test

18
CHANGELOG.md Normal file
View File

@@ -0,0 +1,18 @@
# CHANGELOG
##v1.0.0 (08.08.2018)
- Create Initial Classes (Rut, Validator, ChainRutValidator)
- Tested Rut
- Tested SimpleRutValidator
- Tested Symfony Form Type
##v2.0.0 (12.10.2018)
This is a major version because api changes and class renaming took place.
Also, all features were properly tested with CI/CD pipelines.
- Changed ChainRutValidator constructor signature. Now uses argument spreading.
- Added tests for ChainRutValidator
- SimpleRutValidator renamed to Module11RutValidator
- Now class Rut always validates itself with the SimpleRutValidator if no validator
is passed. This ensures object consistency.
- Added test coverage reports, code quality and CI testing

View File

@@ -1,6 +1,10 @@
Rut Chileno Rut Chileno
=========== ===========
[![Build Status](https://travis-ci.org/mnavarrocarter/chilean-rut.svg?branch=master)](https://travis-ci.org/mnavarrocarter/chilean-rut)
[![Maintainability](https://api.codeclimate.com/v1/badges/c93bd4d894722c404cfd/maintainability)](https://codeclimate.com/github/mnavarrocarter/chilean-rut/maintainability)
[![Test Coverage](https://api.codeclimate.com/v1/badges/c93bd4d894722c404cfd/test_coverage)](https://codeclimate.com/github/mnavarrocarter/chilean-rut/test_coverage)
Esta librería implementa una clase Rut como un *value object* inmutable, incluyendo Esta librería implementa una clase Rut como un *value object* inmutable, incluyendo
una api de validación flexible y extendible. una api de validación flexible y extendible.
@@ -48,7 +52,7 @@ $rut = new Rut('23.546.565-4', new SimpleRutValidator());
``` ```
### Validación Personalizada de Rut ### Validación Personalizada de Rut
El `SimpleRutValidator` no es más que la implementación del validador clásico de Rut, El `Module11RutValidator` no es más que la implementación del validador clásico de Rut,
el algoritmo de módulo 11. Esto verifica que un Rut es algoritmicamente correcto, pero el algoritmo de módulo 11. Esto verifica que un Rut es algoritmicamente correcto, pero
no valida que es real. no valida que es real.
@@ -114,10 +118,10 @@ use MNC\ChileanRut\Validator\ChainRutValidator;
use MNC\ChileanRut\Validator\SimpleRutValidator; use MNC\ChileanRut\Validator\SimpleRutValidator;
use App\Rut\DatabaseRutValidator; use App\Rut\DatabaseRutValidator;
$chainValidator = new ChainRutValidator(); $chainValidator = new ChainRutValidator(
$chainValidator new SimpleRutValidator(),
->append(new SimpleRutValidator()) new DatabaseRutValidator()
->append(new DatabaseRutValidator()); );
$rut = new Rut('14.245.245-2'); $rut = new Rut('14.245.245-2');

View File

@@ -30,5 +30,9 @@
"psr-4": { "psr-4": {
"MNC\\ChileanRut\\Tests\\": "tests" "MNC\\ChileanRut\\Tests\\": "tests"
} }
},
"scripts": {
"test": "@php vendor/bin/phpunit --verbose",
"style": "@php vendor/bin/php-cs-fixer fix"
} }
} }

216
coverage.xml Normal file
View File

@@ -0,0 +1,216 @@
<?xml version="1.0" encoding="UTF-8"?>
<coverage generated="1539368191">
<project timestamp="1539368191">
<package name="MNC\ChileanRut\Bridge\Doctrine\DBAL\Types">
<file name="/home/mnavarro/code-hosted/github.com/mnavarrocarter/chilean-rut/src/Bridge/Doctrine/DBAL/Types/RutType.php">
<class name="MNC\ChileanRut\Bridge\Doctrine\DBAL\Types\RutType" namespace="MNC\ChileanRut\Bridge\Doctrine\DBAL\Types">
<metrics complexity="7" methods="3" coveredmethods="0" conditionals="0" coveredconditionals="0" statements="18" coveredstatements="0" elements="21" coveredelements="0"/>
</class>
<line num="30" type="method" name="getName" visibility="public" complexity="1" crap="2.00" count="0"/>
<line num="31" type="stmt" count="0"/>
<line num="32" type="stmt" count="0"/>
<line num="33" type="stmt" count="0"/>
<line num="43" type="method" name="convertToDatabaseValue" visibility="public" complexity="3" crap="12.00" count="0"/>
<line num="44" type="stmt" count="0"/>
<line num="45" type="stmt" count="0"/>
<line num="46" type="stmt" count="0"/>
<line num="47" type="stmt" count="0"/>
<line num="49" type="stmt" count="0"/>
<line num="50" type="stmt" count="0"/>
<line num="51" type="stmt" count="0"/>
<line num="53" type="stmt" count="0"/>
<line num="54" type="stmt" count="0"/>
<line num="62" type="method" name="convertToPHPValue" visibility="public" complexity="3" crap="12.00" count="0"/>
<line num="63" type="stmt" count="0"/>
<line num="64" type="stmt" count="0"/>
<line num="65" type="stmt" count="0"/>
<line num="66" type="stmt" count="0"/>
<line num="68" type="stmt" count="0"/>
<line num="69" type="stmt" count="0"/>
<metrics loc="70" ncloc="41" classes="1" methods="3" coveredmethods="0" conditionals="0" coveredconditionals="0" statements="18" coveredstatements="0" elements="21" coveredelements="0"/>
</file>
</package>
<package name="MNC\ChileanRut\Bridge\Symfony\Form">
<file name="/home/mnavarro/code-hosted/github.com/mnavarrocarter/chilean-rut/src/Bridge/Symfony/Form/RutType.php">
<class name="MNC\ChileanRut\Bridge\Symfony\Form\RutType" namespace="MNC\ChileanRut\Bridge\Symfony\Form">
<metrics complexity="7" methods="5" coveredmethods="3" conditionals="0" coveredconditionals="0" statements="12" coveredstatements="10" elements="17" coveredelements="13"/>
</class>
<line num="27" type="method" name="buildForm" visibility="public" complexity="1" crap="1" count="1"/>
<line num="29" type="stmt" count="1"/>
<line num="30" type="stmt" count="1"/>
<line num="35" type="method" name="configureOptions" visibility="public" complexity="1" crap="1.01" count="1"/>
<line num="37" type="stmt" count="1"/>
<line num="38" type="stmt" count="1"/>
<line num="41" type="stmt" count="0"/>
<line num="42" type="stmt" count="1"/>
<line num="44" type="stmt" count="1"/>
<line num="49" type="method" name="getBlockPrefix" visibility="public" complexity="2" crap="2" count="1"/>
<line num="51" type="stmt" count="1"/>
<line num="59" type="method" name="transform" visibility="public" complexity="2" crap="2.15" count="1"/>
<line num="61" type="stmt" count="1"/>
<line num="62" type="stmt" count="0"/>
<line num="64" type="stmt" count="1"/>
<line num="71" type="method" name="reverseTransform" visibility="public" complexity="1" crap="1" count="1"/>
<line num="73" type="stmt" count="1"/>
<metrics loc="75" ncloc="47" classes="1" methods="5" coveredmethods="3" conditionals="0" coveredconditionals="0" statements="12" coveredstatements="10" elements="17" coveredelements="13"/>
</file>
</package>
<package name="MNC\ChileanRut\Bridge\Symfony\Validator">
<file name="/home/mnavarro/code-hosted/github.com/mnavarrocarter/chilean-rut/src/Bridge/Symfony/Validator/IsValidRut.php">
<class name="MNC\ChileanRut\Bridge\Symfony\Validator\IsValidRut" namespace="MNC\ChileanRut\Bridge\Symfony\Validator">
<metrics complexity="0" methods="0" coveredmethods="0" conditionals="0" coveredconditionals="0" statements="0" coveredstatements="0" elements="0" coveredelements="0"/>
</class>
<metrics loc="21" ncloc="11" classes="0" methods="0" coveredmethods="0" conditionals="0" coveredconditionals="0" statements="0" coveredstatements="0" elements="0" coveredelements="0"/>
</file>
<file name="/home/mnavarro/code-hosted/github.com/mnavarrocarter/chilean-rut/src/Bridge/Symfony/Validator/IsValidRutValidator.php">
<class name="MNC\ChileanRut\Bridge\Symfony\Validator\IsValidRutValidator" namespace="MNC\ChileanRut\Bridge\Symfony\Validator">
<metrics complexity="6" methods="2" coveredmethods="0" conditionals="0" coveredconditionals="0" statements="18" coveredstatements="0" elements="20" coveredelements="0"/>
</class>
<line num="38" type="method" name="__construct" visibility="public" complexity="1" crap="2.00" count="0"/>
<line num="39" type="stmt" count="0"/>
<line num="40" type="stmt" count="0"/>
<line num="41" type="stmt" count="0"/>
<line num="47" type="method" name="validate" visibility="public" complexity="5" crap="30.00" count="0"/>
<line num="48" type="stmt" count="0"/>
<line num="49" type="stmt" count="0"/>
<line num="50" type="stmt" count="0"/>
<line num="51" type="stmt" count="0"/>
<line num="53" type="stmt" count="0"/>
<line num="54" type="stmt" count="0"/>
<line num="55" type="stmt" count="0"/>
<line num="57" type="stmt" count="0"/>
<line num="58" type="stmt" count="0"/>
<line num="59" type="stmt" count="0"/>
<line num="60" type="stmt" count="0"/>
<line num="61" type="stmt" count="0"/>
<line num="62" type="stmt" count="0"/>
<line num="63" type="stmt" count="0"/>
<line num="64" type="stmt" count="0"/>
<metrics loc="65" ncloc="41" classes="1" methods="2" coveredmethods="0" conditionals="0" coveredconditionals="0" statements="18" coveredstatements="0" elements="20" coveredelements="0"/>
</file>
</package>
<package name="MNC\ChileanRut\Exception">
<file name="/home/mnavarro/code-hosted/github.com/mnavarrocarter/chilean-rut/src/Exception/InvalidRutException.php">
<class name="MNC\ChileanRut\Exception\InvalidRutException" namespace="MNC\ChileanRut\Exception">
<metrics complexity="3" methods="2" coveredmethods="1" conditionals="0" coveredconditionals="0" statements="6" coveredstatements="5" elements="8" coveredelements="6"/>
</class>
<line num="33" type="method" name="__construct" visibility="public" complexity="2" crap="2" count="3"/>
<line num="35" type="stmt" count="3"/>
<line num="36" type="stmt" count="3"/>
<line num="38" type="stmt" count="3"/>
<line num="39" type="stmt" count="3"/>
<line num="40" type="stmt" count="3"/>
<line num="45" type="method" name="getRut" visibility="public" complexity="1" crap="2.00" count="0"/>
<line num="47" type="stmt" count="0"/>
<metrics loc="49" ncloc="25" classes="1" methods="2" coveredmethods="1" conditionals="0" coveredconditionals="0" statements="6" coveredstatements="5" elements="8" coveredelements="6"/>
</file>
</package>
<package name="MNC\ChileanRut">
<file name="/home/mnavarro/code-hosted/github.com/mnavarrocarter/chilean-rut/src/Rut.php">
<class name="MNC\ChileanRut\Rut" namespace="MNC\ChileanRut">
<metrics complexity="16" methods="11" coveredmethods="10" conditionals="0" coveredconditionals="0" statements="31" coveredstatements="30" elements="42" coveredelements="40"/>
</class>
<line num="45" type="method" name="__construct" visibility="public" complexity="2" crap="2" count="14"/>
<line num="47" type="stmt" count="14"/>
<line num="48" type="stmt" count="14"/>
<line num="49" type="stmt" count="14"/>
<line num="51" type="stmt" count="14"/>
<line num="52" type="stmt" count="12"/>
<line num="54" type="stmt" count="14"/>
<line num="55" type="stmt" count="12"/>
<line num="62" type="method" name="__toString" visibility="public" complexity="1" crap="2.00" count="0"/>
<line num="64" type="stmt" count="0"/>
<line num="76" type="method" name="fromParts" visibility="public" complexity="1" crap="1" count="2"/>
<line num="78" type="stmt" count="2"/>
<line num="89" type="method" name="fromString" visibility="public" complexity="1" crap="1" count="1"/>
<line num="91" type="stmt" count="1"/>
<line num="101" type="method" name="isEqualTo" visibility="public" complexity="1" crap="1" count="2"/>
<line num="103" type="stmt" count="2"/>
<line num="113" type="method" name="format" visibility="public" complexity="5" crap="5" count="10"/>
<line num="116" type="stmt" count="10"/>
<line num="117" type="stmt" count="3"/>
<line num="119" type="stmt" count="7"/>
<line num="120" type="stmt" count="1"/>
<line num="122" type="stmt" count="6"/>
<line num="123" type="stmt" count="4"/>
<line num="125" type="stmt" count="2"/>
<line num="126" type="stmt" count="1"/>
<line num="129" type="stmt" count="1"/>
<line num="130" type="stmt" count="1"/>
<line num="131" type="stmt" count="1"/>
<line num="132" type="stmt" count="1"/>
<line num="133" type="stmt" count="1"/>
<line num="144" type="method" name="getCorrelative" visibility="public" complexity="1" crap="1" count="14"/>
<line num="146" type="stmt" count="14"/>
<line num="154" type="method" name="getVerifierDigit" visibility="public" complexity="1" crap="1" count="14"/>
<line num="156" type="stmt" count="14"/>
<line num="166" type="method" name="sanitize" visibility="private" complexity="1" crap="1" count="14"/>
<line num="168" type="stmt" count="14"/>
<line num="176" type="method" name="formatReadable" visibility="private" complexity="1" crap="1" count="5"/>
<line num="178" type="stmt" count="5"/>
<line num="186" type="method" name="formatHidden" visibility="private" complexity="1" crap="1" count="1"/>
<line num="188" type="stmt" count="1"/>
<line num="189" type="stmt" count="1"/>
<line num="191" type="stmt" count="1"/>
<metrics loc="193" ncloc="96" classes="1" methods="11" coveredmethods="10" conditionals="0" coveredconditionals="0" statements="31" coveredstatements="30" elements="42" coveredelements="40"/>
</file>
</package>
<package name="MNC\ChileanRut\Util">
<file name="/home/mnavarro/code-hosted/github.com/mnavarrocarter/chilean-rut/src/Util/CorrelativeUtils.php">
<class name="MNC\ChileanRut\Util\CorrelativeUtils" namespace="MNC\ChileanRut\Util">
<metrics complexity="7" methods="3" coveredmethods="2" conditionals="0" coveredconditionals="0" statements="16" coveredstatements="14" elements="19" coveredelements="16"/>
</class>
<line num="29" type="method" name="findVerifierDigit" visibility="public" complexity="5" crap="5.09" count="14"/>
<line num="31" type="stmt" count="14"/>
<line num="32" type="stmt" count="14"/>
<line num="34" type="stmt" count="14"/>
<line num="35" type="stmt" count="14"/>
<line num="36" type="stmt" count="14"/>
<line num="38" type="stmt" count="14"/>
<line num="39" type="stmt" count="14"/>
<line num="42" type="stmt" count="14"/>
<line num="44" type="stmt" count="14"/>
<line num="45" type="stmt" count="0"/>
<line num="48" type="stmt" count="14"/>
<line num="49" type="stmt" count="0"/>
<line num="52" type="stmt" count="14"/>
<line num="62" type="method" name="createValidRutOnlyFromCorrelative" visibility="public" complexity="1" crap="1" count="2"/>
<line num="64" type="stmt" count="2"/>
<line num="72" type="method" name="autoGenerateValidRut" visibility="public" complexity="1" crap="1" count="2"/>
<line num="74" type="stmt" count="2"/>
<line num="76" type="stmt" count="2"/>
<metrics loc="78" ncloc="47" classes="1" methods="3" coveredmethods="2" conditionals="0" coveredconditionals="0" statements="16" coveredstatements="14" elements="19" coveredelements="16"/>
</file>
</package>
<package name="MNC\ChileanRut\Validator">
<file name="/home/mnavarro/code-hosted/github.com/mnavarrocarter/chilean-rut/src/Validator/ChainRutValidator.php">
<class name="MNC\ChileanRut\Validator\ChainRutValidator" namespace="MNC\ChileanRut\Validator">
<metrics complexity="3" methods="2" coveredmethods="2" conditionals="0" coveredconditionals="0" statements="5" coveredstatements="5" elements="7" coveredelements="7"/>
</class>
<line num="36" type="method" name="__construct" visibility="public" complexity="1" crap="1" count="2"/>
<line num="38" type="stmt" count="2"/>
<line num="39" type="stmt" count="2"/>
<line num="46" type="method" name="validate" visibility="public" complexity="2" crap="2" count="2"/>
<line num="48" type="stmt" count="2"/>
<line num="49" type="stmt" count="2"/>
<line num="51" type="stmt" count="1"/>
<metrics loc="52" ncloc="24" classes="1" methods="2" coveredmethods="2" conditionals="0" coveredconditionals="0" statements="5" coveredstatements="5" elements="7" coveredelements="7"/>
</file>
<file name="/home/mnavarro/code-hosted/github.com/mnavarrocarter/chilean-rut/src/Validator/Module11RutValidator.php">
<class name="MNC\ChileanRut\Validator\Module11RutValidator" namespace="MNC\ChileanRut\Validator">
<metrics complexity="2" methods="1" coveredmethods="1" conditionals="0" coveredconditionals="0" statements="4" coveredstatements="4" elements="5" coveredelements="5"/>
</class>
<line num="29" type="method" name="validate" visibility="public" complexity="2" crap="2" count="14"/>
<line num="31" type="stmt" count="14"/>
<line num="33" type="stmt" count="14"/>
<line num="34" type="stmt" count="2"/>
<line num="36" type="stmt" count="12"/>
<metrics loc="37" ncloc="20" classes="1" methods="1" coveredmethods="1" conditionals="0" coveredconditionals="0" statements="4" coveredstatements="4" elements="5" coveredelements="5"/>
</file>
</package>
<file name="/home/mnavarro/code-hosted/github.com/mnavarrocarter/chilean-rut/src/Validator/RutValidator.php">
<metrics loc="43" ncloc="12" classes="0" methods="0" coveredmethods="0" conditionals="0" coveredconditionals="0" statements="0" coveredstatements="0" elements="0" coveredelements="0"/>
</file>
<metrics files="10" loc="683" ncloc="364" classes="8" methods="29" coveredmethods="19" conditionals="0" coveredconditionals="0" statements="110" coveredstatements="68" elements="139" coveredelements="87"/>
</project>
</coverage>

View File

@@ -16,6 +16,10 @@
</testsuite> </testsuite>
</testsuites> </testsuites>
<logging>
<log type="coverage-clover" target="coverage.xml"/>
</logging>
<filter> <filter>
<whitelist> <whitelist>
<directory>./src</directory> <directory>./src</directory>

View File

@@ -47,10 +47,10 @@ class RutType extends StringType
} }
if ($value instanceof Rut) { if ($value instanceof Rut) {
return parent::convertToDatabaseValue($value->format(), $platform); return $value->format(Rut::FORMAT_HYPHENED);
} }
throw ConversionException::conversionFailedInvalidType($value, $this->getName(), ['null', 'Rut']); throw ConversionException::conversionFailedInvalidType($value, $this->getName(), ['null', Rut::class]);
} }
/** /**
@@ -61,8 +61,6 @@ class RutType extends StringType
*/ */
public function convertToPHPValue($value, AbstractPlatform $platform) public function convertToPHPValue($value, AbstractPlatform $platform)
{ {
$value = parent::convertToPHPValue($value, $platform);
if (null === $value || $value instanceof Rut) { if (null === $value || $value instanceof Rut) {
return $value; return $value;
} }

View File

@@ -17,5 +17,5 @@ use Symfony\Component\Validator\Constraint;
*/ */
class IsValidRut extends Constraint class IsValidRut extends Constraint
{ {
public $message = 'The rut "{{value}}" is not valid.'; public $message = '"{{value}}" is not a valid Rut.';
} }

View File

@@ -12,8 +12,8 @@ namespace MNC\ChileanRut\Bridge\Symfony\Validator;
use MNC\ChileanRut\Exception\InvalidRutException; use MNC\ChileanRut\Exception\InvalidRutException;
use MNC\ChileanRut\Rut; use MNC\ChileanRut\Rut;
use MNC\ChileanRut\Validator\Module11RutValidator;
use MNC\ChileanRut\Validator\RutValidator; use MNC\ChileanRut\Validator\RutValidator;
use MNC\ChileanRut\Validator\SimpleRutValidator;
use Symfony\Component\Form\Exception\UnexpectedTypeException; use Symfony\Component\Form\Exception\UnexpectedTypeException;
use Symfony\Component\Validator\Constraint; use Symfony\Component\Validator\Constraint;
use Symfony\Component\Validator\ConstraintValidator; use Symfony\Component\Validator\ConstraintValidator;
@@ -30,9 +30,14 @@ class IsValidRutValidator extends ConstraintValidator
*/ */
private $validator; private $validator;
/**
* IsValidRutValidator constructor.
*
* @param RutValidator|null $validator
*/
public function __construct(RutValidator $validator = null) public function __construct(RutValidator $validator = null)
{ {
$this->validator = $validator ?? new SimpleRutValidator(); $this->validator = $validator ?? new Module11RutValidator();
} }
/** /**

View File

@@ -10,10 +10,13 @@
namespace MNC\ChileanRut; namespace MNC\ChileanRut;
use MNC\ChileanRut\Validator\Module11RutValidator;
use MNC\ChileanRut\Validator\RutValidator; use MNC\ChileanRut\Validator\RutValidator;
/** /**
* Class Rut. * Rut represents a the Chilean National ID Number.
*
* All residents of Chile are uniquely identified by one of these.
* *
* @author Matías Navarro Carter <mnavarro@option.cl> * @author Matías Navarro Carter <mnavarro@option.cl>
*/ */
@@ -45,12 +48,15 @@ class Rut
$this->value = substr($sanitized, 0, -1); $this->value = substr($sanitized, 0, -1);
$this->dv = $sanitized[\strlen($sanitized) - 1]; $this->dv = $sanitized[\strlen($sanitized) - 1];
if (null !== $validator) { if (!$validator instanceof RutValidator) {
$validator->validate($this); $validator = new Module11RutValidator();
} }
$validator->validate($this);
} }
/** /**
* Casts the Rut object into a string.
*
* @return string * @return string
*/ */
public function __toString(): string public function __toString(): string
@@ -59,27 +65,35 @@ class Rut
} }
/** /**
* Creates a new Rut instance from the correlative and the verifier digit.
*
* @param string $correlative * @param string $correlative
* @param string $verifierDigit * @param string $verifierDigit
* @param RutValidator|null $validator
* *
* @return Rut * @return Rut
*/ */
public static function fromParts(string $correlative, string $verifierDigit): Rut public static function fromParts(string $correlative, string $verifierDigit, RutValidator $validator = null): Rut
{ {
return new self($correlative.$verifierDigit); return new self($correlative.$verifierDigit, $validator);
} }
/** /**
* Creates a new instance of Rut from a string.
*
* @param string $rut * @param string $rut
* @param RutValidator|null $validator
* *
* @return Rut * @return Rut
*/ */
public static function fromString(string $rut): Rut public static function fromString(string $rut, RutValidator $validator = null): Rut
{ {
return new self($rut); return new self($rut, $validator);
} }
/** /**
* Compares whether a Rut is equal to another or not.
*
* @param Rut $rut * @param Rut $rut
* *
* @return bool * @return bool
@@ -151,13 +165,12 @@ class Rut
*/ */
private function sanitize(string $value): string private function sanitize(string $value): string
{ {
$value = trim($value); return str_replace(['.', ',', '-'], '', strtoupper(trim($value)));
$value = strtoupper($value);
return str_replace(['.', ',', '-'], '', $value);
} }
/** /**
* Helper to format the Rut as FORMAT_READABLE.
*
* @return string * @return string
*/ */
private function formatReadable(): string private function formatReadable(): string
@@ -166,6 +179,8 @@ class Rut
} }
/** /**
* Helper to format the Rut as FORMAT_HIDDEN.
*
* @return string * @return string
*/ */
private function formatHidden(): string private function formatHidden(): string

View File

@@ -68,8 +68,6 @@ class CorrelativeUtils
* Auto-generates an algorithmically valid Rut, because why not. * Auto-generates an algorithmically valid Rut, because why not.
* *
* @return Rut * @return Rut
*
* @throws \Exception on insufficient entropy on correlative generation
*/ */
public static function autoGenerateValidRut(): Rut public static function autoGenerateValidRut(): Rut
{ {

View File

@@ -30,24 +30,12 @@ class ChainRutValidator implements RutValidator
/** /**
* ChainRutValidator constructor. * ChainRutValidator constructor.
*/
public function __construct()
{
$this->validators = [];
}
/**
* Appends a RutValidator instance to the validation chain.
* *
* @param RutValidator $validator * @param RutValidator[] $validators
*
* @return ChainRutValidator
*/ */
public function append(RutValidator $validator): ChainRutValidator public function __construct(RutValidator ...$validators)
{ {
$this->validators[] = $validator; $this->validators = $validators;
return $this;
} }
/** /**

View File

@@ -19,7 +19,7 @@ use MNC\ChileanRut\Util\CorrelativeUtils;
* *
* @author Matías Navarro Carter <mnavarro@option.cl> * @author Matías Navarro Carter <mnavarro@option.cl>
*/ */
class SimpleRutValidator implements RutValidator class Module11RutValidator implements RutValidator
{ {
/** /**
* @param Rut $rut * @param Rut $rut

View File

@@ -17,7 +17,7 @@ use MNC\ChileanRut\Rut;
* This is the base contract for a Rut validator. * This is the base contract for a Rut validator.
* *
* You can implement any logic here that you can use to validate a Rut. * You can implement any logic here that you can use to validate a Rut.
* For example, the SimpleRutValidator only validates that a Rut is algorithmically * For example, the Module11RutValidator only validates that a Rut is algorithmically
* correct, but not that it actually exists. * correct, but not that it actually exists.
* *
* You could create a HTTPRutValidator that performs a request to validate that a * You could create a HTTPRutValidator that performs a request to validate that a

View File

@@ -12,7 +12,7 @@ namespace MNC\ChileanRut\Tests\Rut;
use MNC\ChileanRut\Exception\InvalidRutException; use MNC\ChileanRut\Exception\InvalidRutException;
use MNC\ChileanRut\Rut; use MNC\ChileanRut\Rut;
use MNC\ChileanRut\Validator\SimpleRutValidator; use MNC\ChileanRut\Validator\Module11RutValidator;
use PHPUnit\Framework\TestCase; use PHPUnit\Framework\TestCase;
class RutTest extends TestCase class RutTest extends TestCase
@@ -60,13 +60,13 @@ class RutTest extends TestCase
{ {
$this->expectException(InvalidRutException::class); $this->expectException(InvalidRutException::class);
$validator = new SimpleRutValidator(); $validator = new Module11RutValidator();
$rut = new Rut('4444444-2', $validator); $rut = new Rut('4444444-2', $validator);
} }
public function testThatIntegratedValidationDoesNotThrowExceptionOnValidRut() public function testThatIntegratedValidationDoesNotThrowExceptionOnValidRut()
{ {
$validator = new SimpleRutValidator(); $validator = new Module11RutValidator();
$rut = new Rut('16.894.365-2', $validator); $rut = new Rut('16.894.365-2', $validator);
$this->assertInstanceOf(Rut::class, $rut); $this->assertInstanceOf(Rut::class, $rut);

View File

@@ -0,0 +1,56 @@
<?php
/*
* This file is part of the MNC\ChileanRut library.
*
* (c) Matías Navarro Carter <mnavarrocarter@gmail.com>
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace MNC\ChileanRut\Tests\Validator;
use MNC\ChileanRut\Exception\InvalidRutException;
use MNC\ChileanRut\Util\CorrelativeUtils;
use MNC\ChileanRut\Validator\ChainRutValidator;
use MNC\ChileanRut\Validator\Module11RutValidator;
use MNC\ChileanRut\Validator\RutValidator;
use PHPUnit\Framework\TestCase;
/**
* Class ChainRutValidatorTest.
*/
class ChainRutValidatorTest extends TestCase
{
public function testThatChainValidatorFails(): void
{
$rut = CorrelativeUtils::autoGenerateValidRut();
$normalValidator = new Module11RutValidator();
$mockValidator = $this->createMock(RutValidator::class);
$mockValidator->expects($this->once())
->method('validate')
->willThrowException(new InvalidRutException($rut));
$chainValidator = new ChainRutValidator($normalValidator, $mockValidator);
$this->expectException(InvalidRutException::class);
$chainValidator->validate($rut);
}
public function testThatChainValidatorPasses(): void
{
$rut = CorrelativeUtils::autoGenerateValidRut();
$normalValidator = new Module11RutValidator();
$mockValidator = $this->createMock(RutValidator::class);
$mockValidator->expects($this->once())
->method('validate')
->willReturn(null);
$chainValidator = new ChainRutValidator($normalValidator, $mockValidator);
$chainValidator->validate($rut);
$this->assertTrue(true);
}
}

View File

@@ -12,7 +12,7 @@ namespace MNC\ChileanRut\Tests\Validator;
use MNC\ChileanRut\Exception\InvalidRutException; use MNC\ChileanRut\Exception\InvalidRutException;
use MNC\ChileanRut\Rut; use MNC\ChileanRut\Rut;
use MNC\ChileanRut\Validator\SimpleRutValidator; use MNC\ChileanRut\Validator\Module11RutValidator;
use PHPUnit\Framework\TestCase; use PHPUnit\Framework\TestCase;
class SimpleRutValidatorTest extends TestCase class SimpleRutValidatorTest extends TestCase
@@ -20,7 +20,7 @@ class SimpleRutValidatorTest extends TestCase
public function testValidationPassesOnValidRut() public function testValidationPassesOnValidRut()
{ {
$rut = new Rut('16.894.365-2'); $rut = new Rut('16.894.365-2');
$validator = new SimpleRutValidator(); $validator = new Module11RutValidator();
$validator->validate($rut); $validator->validate($rut);
@@ -32,7 +32,7 @@ class SimpleRutValidatorTest extends TestCase
$this->expectException(InvalidRutException::class); $this->expectException(InvalidRutException::class);
$rut = new Rut('34.4534.353-1'); $rut = new Rut('34.4534.353-1');
$validator = new SimpleRutValidator(); $validator = new Module11RutValidator();
$validator->validate($rut); $validator->validate($rut);
} }