/** * 创建一个新实例 * * @param array $filters * <p> * <pre> * array('username'=>array('StripTags')) * </pre> * </p> * @param array $validate * <p> * <pre> * array('username'=>array('Required'=>'can not be empty')) * </pre> * </p> * @param array $data */ public function __construct($filters, $validate, $data) { $this->filters = array(); $this->validators = array(); //添加过滤器 foreach ($filters as $field => $filter_name) { $filter_tmp = new Filter(); foreach ($filter_name as $name) { $filter_name = 'filter\\' . $filter_name; if (class_exists($filter_name)) { $filter_tmp->addFilter(new $filter_name()); } } $this->filters[$field] = $filter_tmp; } //添加验证器 foreach ($validate as $field => $rules) { $validator_tmp = new Validator(); foreach ($rules as $rule => $params) { $rule_name = 'validator\\' . $rule; if (class_exists($rule_name)) { $obj = new $rule_name($params); $validator_tmp->addValidator($obj); } } $this->validators[$field] = $validator_tmp; } $this->filter($data); }
/** * Testa a validação para o tamanho minimo de strings. */ public function testMinLenghtValidation() { // Instanciamento da classe validadora $validator = new Validator(); // Regra de validação para nome $validator->getValidations()->add(function (Validation $v) { $v->setField(new Field('nome', 'Luca')); $v->getRules()->add(new MinLength(05)); }); // Executa a validação dos dados $validator->execute(); // Verifica se foi gerado um erro $this->assertEquals(1, $validator->getErrors()->count()); // Instanciamento da classe validadora $validator = new Validator(); // Regra de validação para nome $validator->getValidations()->add(function (Validation $v) { $v->setField(new Field('nome', 'Lucas')); $v->getRules()->add(new MinLength(05)); }); // Executa a validação dos dados $validator->execute(); // Verifica se foi gerado um erro $this->assertEquals(0, $validator->getErrors()->count()); }
/** * Insere um número de CNPJ inválido e verifica se o validador * irá o interpretar como tal. */ public function testInvalidCnpj() { $validator = new Validator(); $validator->getValidations()->add(function (Validation $v) { $v->setField(new Field('cnpj', '15.234.350/0001-99')); $v->getRules()->add(new Cnpj()); }); $validator->execute(); $this->assertEquals($validator->getErrors()->count(), 1); }
/** * Executa as validações. * @throws ValidationException */ public function execute() { $this->startValidations(); if ($this->calculateNumbers() === false || $this->validator->getErrors()->count() > 0) { throw new ValidationException("Cpf inválido"); } }
public function testCpf() { //Instanciamento da classe validatora $validator = new Validator(); //Regra de validação do cpf simulando um erro $validator->getValidations()->add(function (Validation $v) { $v->setField(new Field('cpf', '056.659.658-12')); $v->getRules()->add(new Cpf()); }); //Regra de validação do cpf sem simular o erro $validator->getValidations()->add(function (Validation $v) { $v->setField(new Field('cpf', '894.434.123-06')); $v->getRules()->add(new Cpf()); }); //Executar a validação do cpf $validator->execute(); //verifica se foi gerado um erro $this->assertEquals(1, $validator->getErrors()->count()); }
/** * Testa a validação de Email. */ public function testEmailValidation() { // Instanciamento da classe validadora $validator = new Validator(); // Regra de validação para nome //Simulação com acerto $validator->getValidations()->add(function (Validation $v) { $v->setField(new Field('email', '*****@*****.**')); $v->getRules()->add(new Email()); }); // Simulação com erro $validator->getValidations()->add(function (Validation $v) { $v->setField(new Field('email', 'luanmaik1994gmail.com')); $v->getRules()->add(new Email()); }); // Executa a validação dos dados $validator->execute(); // Verifica se foi gerado um erro $this->assertEquals(1, $validator->getErrors()->count()); }
/** * Testa a validação para o tipo de MimeType */ public function testMimeType() { // array de simulão da variavel $_FILE $arrayValorImagem = ['name' => 'base.jpg', 'type' => 'jpg', 'tmp_name' => __DIR__ . '../img/base.jpg', 'error' => 0]; // Instanciamento da classe validadora $validator = new Validator(); // Regra de validação para o mimeType $validator->getValidations()->add(function (Validation $v) use($arrayValorImagem) { $v->setField(new Field('imagem', $arrayValorImagem)); $v->getRules()->add(new MimeTypes(['image/jpg', 'image/jpeg', 'image/png'])); }); // Regra de validação para o mimeType simulano um erro $validator->getValidations()->add(function (Validation $v) use($arrayValorImagem) { $v->setField(new Field('imagem', $arrayValorImagem)); $v->getRules()->add(new MimeTypes(['audio/x-mpeg-3', 'audio/x-mpeg'])); }); // Executa a validação dos dados $validator->execute(); // Verifica se foi gerado um erro $this->assertEquals(1, $validator->getErrors()->count()); }
/** * Testa a validação de NoNumber * A string não pode conter numeros */ public function testNoNumberValidation() { // Instanciamento da classe validadora $validator = new Validator(); // Regra de validação para formato de Nome //Simulação com acerto $validator->getValidations()->add(function (Validation $v) { $v->setField(new Field('nome', "LuanMaik")); $v->getRules()->add(new NoNumber()); }); // Regra de validação para formato de Nome //Simulação com erro $validator->getValidations()->add(function (Validation $v) { $v->setField(new Field('nome', "Lu4n Ma1k")); $v->getRules()->add(new NoNumber()); }); // Regra de validação para formato de Nome //Simulação com erro $validator->getValidations()->add(function (Validation $v) { $v->setField(new Field('nome', "luan maik 21")); $v->getRules()->add(new NoNumber()); }); // Executa a validação dos dados $validator->execute(); // Verifica se foi gerado um erro $this->assertEquals(2, $validator->getErrors()->count()); }
/** * Testa a validação de Boolean */ public function testBooleanValidation() { // Instanciamento da classe validadora $validator = new Validator(); // Regra de validação para formato de Boolean //Simulação com acerto $validator->getValidations()->add(function (Validation $v) { $v->setField(new Field('ativo', true)); $v->getRules()->add(new Boolean()); }); // Regra de validção para formato de Boolean //Simulação com erro $validator->getValidations()->add(function (Validation $v) { $v->setField(new Field('ativo', 'true')); $v->getRules()->add(new Boolean()); }); // Regra de validação para formato de Boolean //Simulação com erro $validator->getValidations()->add(function (Validation $v) { $v->setField(new Field('ativo', 'false')); $v->getRules()->add(new Boolean()); }); // Executa a validação dos dados $validator->execute(); // Verifica se foi gerado um erro $this->assertEquals(2, $validator->getErrors()->count()); }
/** * Testa a validação de URL. */ public function testURLValidation() { // Instanciamento da classe validadora $validator = new Validator(); // Regra de validação para formato de URL //Simulação com acerto $validator->getValidations()->add(function (Validation $v) { $v->setField(new Field('caminho', 'http://localhost/meuprojeto/')); $v->getRules()->add(new URL()); }); // Regra de validação para formato de URL //Simulação com erro $validator->getValidations()->add(function (Validation $v) { $v->setField(new Field('caminho', 'htp~://localhost/meuprojeto/')); $v->getRules()->add(new URL()); }); // Regra de validação para formato de URL //Simulação com erro $validator->getValidations()->add(function (Validation $v) { $v->setField(new Field('caminho', 'http:<>localhost/meuprojeto/')); $v->getRules()->add(new URL()); }); // Executa a validação dos dados $validator->execute(); // Verifica se foi gerado um erro $this->assertEquals(2, $validator->getErrors()->count()); }
/** * Testa a validação de Numeric * A string só pode conter números */ public function testNumericValidation() { // Instanciamento da classe validadora $validator = new Validator(); // Regra de validação para formato de Numeric //Simulação com acerto $validator->getValidations()->add(function (Validation $v) { $v->setField(new Field('idade', "21")); $v->getRules()->add(new Numeric()); }); // Regra de validação para formato de Numeric //Simulação com erro $validator->getValidations()->add(function (Validation $v) { $v->setField(new Field('idade', "21a")); $v->getRules()->add(new Numeric()); }); // Regra de validação para formato de Numeric //Simulação com erro $validator->getValidations()->add(function (Validation $v) { $v->setField(new Field('idade', "abc")); $v->getRules()->add(new Numeric()); }); // Executa a validação dos dados $validator->execute(); // Verifica se foi gerado um erro $this->assertEquals(2, $validator->getErrors()->count()); }
/** * Testa a validação de Formato de Data. */ public function testDateFormatValidation() { // Instanciamento da classe validadora $validator = new Validator(); // Regra de validação para formato da data //Simulação com acerto $validator->getValidations()->add(function (Validation $v) { $v->setField(new Field('data', '1994-08-23')); $v->getRules()->add(new DateFormat("Y-m-d")); }); // Regra de validação para formato da data //Simulação com erro-1 $validator->getValidations()->add(function (Validation $v) { $v->setField(new Field('data', '199-08-23')); $v->getRules()->add(new DateFormat("Y-m-d")); }); // Regra de validação para formato da data //Simulação com erro-2 $validator->getValidations()->add(function (Validation $v) { $v->setField(new Field('data', '1994-23-23')); $v->getRules()->add(new DateFormat("Y-m-d")); }); // Executa a validação dos dados $validator->execute(); // Verifica se foi gerado um erro $this->assertEquals(2, $validator->getErrors()->count()); }
/** * Testa a validação de Inteiro */ public function testIntValidation() { // Instanciamento da classe validadora $validator = new Validator(); // Regra de validação para formato de inteiro //Simulação com acerto $validator->getValidations()->add(function (Validation $v) { $v->setField(new Field('numero', 23)); $v->getRules()->add(new Int()); }); // Regra de validação para formato de inteiro //Simulação com erro $validator->getValidations()->add(function (Validation $v) { $v->setField(new Field('numero', '23')); $v->getRules()->add(new Int()); }); // Regra de validação para formato de inteiro //Simulação com erro $validator->getValidations()->add(function (Validation $v) { $v->setField(new Field('numero', '10')); $v->getRules()->add(new Int()); }); // Executa a validação dos dados $validator->execute(); // Verifica se foi gerado um erro $this->assertEquals(2, $validator->getErrors()->count()); }
/** * Testa a validação de IP. */ public function testIPValidation() { // Instanciamento da classe validadora $validator = new Validator(); // Regra de validação para formato de IP //Simulação com acerto $validator->getValidations()->add(function (Validation $v) { $v->setField(new Field('ip', '255.254.189.133')); $v->getRules()->add(new IP()); }); // Regra de validação para formato de IP //Simulação com erro $validator->getValidations()->add(function (Validation $v) { $v->setField(new Field('ip', '270.254.189.133')); $v->getRules()->add(new IP()); }); // Regra de validação para formato de IP //Simulação com erro $validator->getValidations()->add(function (Validation $v) { $v->setField(new Field('ip', '200.284.189.133')); $v->getRules()->add(new IP()); }); // Executa a validação dos dados $validator->execute(); // Verifica se foi gerado um erro $this->assertEquals(2, $validator->getErrors()->count()); }
/** * Testa a validação de um valor por lista branca. */ public function testValidation() { // Lista de nomes permitidos $allowedNames = new ArrayList(); $allowedNames->add('Lucas Andrade de Araújo'); $allowedNames->add('Matheus Andrade de Araújo'); $validator = new Validator(); // Valida o nome "Lucas Andrade de Araújo" na lista branca. $validator->getValidations()->add(function (Validation $v) use($allowedNames) { $v->setField(new Field('nome', 'Lucas Andrade de Araújo')); $v->getRules()->add(new WhiteList($allowedNames)); }); // Valida o nome "Milena Nascimento Cabreira" na lista branca. $validator->getValidations()->add(function (Validation $v) use($allowedNames) { $v->setField(new Field('nome', 'Milena Nascimento Cabreira')); $v->getRules()->add(new WhiteList($allowedNames)); }); // Executa a validação das regras $validator->execute(); // Verifica se o nome invalido é o nome que não está // presente na lista de nomes permitidos. $invalidName = $validator->getErrors()->first()->getField()->getValue(); $this->assertEquals('Milena Nascimento Cabreira', $invalidName); }
/** * Testa a validação pela regra blacklist. */ public function testBlackList() { $blackList = new ArrayList(); $blackList->addAll(['Lucas', 'Matheus']); $validator = new Validator(); // Verifica se o nome 'Lucas' está permitido. $validator->getValidations()->add(function (Validation $v) use($blackList) { $v->setField(new Field('nome', 'Lucas')); $v->getRules()->add(new BlackList($blackList)); }); // Verifica se o nome 'Adolf' está permitido. $validator->getValidations()->add(function (Validation $v) use($blackList) { $v->setField(new Field('nome', 'Adolf')); $v->getRules()->add(new BlackList($blackList)); }); $validator->execute(); $nomeNaoPermitido = $validator->getErrors()->first()->getField()->getValue(); $this->assertEquals($nomeNaoPermitido, 'Lucas'); $this->assertEquals($validator->getErrors()->count(), 1); }
/** * Testa a validação para o tamanho máximo de strings. */ public function testMaxLengthValidator() { // Instanciamento da classe validadora $validator = new Validator(); // Regra de validação para nome simulando um erro $validator->getValidations()->add(function (Validation $v) { $v->setField(new Field('nome', 'Nathan Cambiriba do Nascimento')); $v->getRules()->add(new MaxLength(10)); }); // Regra de validação para nome $validator->getValidations()->add(function (Validation $v) { $v->setField(new Field('nome', 'Nathan Cambiriba do Nascimento')); $v->getRules()->add(new MaxLength(10)); }); // Regra de validação para nome $validator->getValidations()->add(function (Validation $v) { $v->setField(new Field('nome', 'Nathan Cambiriba do Nascimento')); $v->getRules()->add(new MaxLength(100)); }); // Executa a validação dos dados $validator->execute(); // Verifica se foi gerado um erro $this->assertEquals(2, $validator->getErrors()->count()); }
/** * Creates validator objects based on the specification in {@link rules}. * This method is mainly used internally. * * @throws \Database\Exception if current class has an invalid validation rule * @return Validator[] validators built based on {@link rules()}. */ public function createValidators() { $validators = new \Validator\Lists(); foreach ($this->rules() as $rule) { if (isset($rule[0], $rule[1])) { $validators->add(\Validator\Validator::createValidator($rule[1], $this, $rule[0], array_slice($rule, 2))); } else { throw new \Database\Exception('{class} has an invalid validation rule. The rule must specify attributes to be validated and the validator name.', ['{class}' => get_class($this)]); } } return $validators; }
}); it("sets an error message", function () { expect($this->validator->message('required', 'must be defined'))->toBe('must be defined'); expect($this->validator->message('required'))->toBe('must be defined'); }); }); describe("->messages()", function () { it("appends error messages", function () { Checker::reset(true); $validator = new Validator(); $validator->messages(['a' => 'b']); $expected = ['a' => 'b', 'c' => 'd', '_default_' => 'is invalid']; expect($validator->messages(['c' => 'd']))->toBe($expected); expect($validator->messages())->toBe($expected); }); it("sets error messages", function () { Checker::reset(true); $validator = new Validator(); $validator->messages(['a' => 'b']); $expected = ['c' => 'd', '_default_' => 'is invalid']; expect($validator->messages(['c' => 'd'], false))->toBe($expected); expect($validator->messages())->toBe($expected); }); }); describe("::values()", function () { it("returns the wrapped data when no path is defined", function () { $data = ['title' => 'new title']; expect(Validator::values($data))->toBe([$data]); }); }); });