예제 #1
0
 /**
  * 创建一个新实例
  *
  * @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);
 }
예제 #2
0
 /**
  * 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());
 }
예제 #3
0
 /**
  * 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);
 }
예제 #4
0
 /**
  * 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");
     }
 }
예제 #5
0
 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());
 }
예제 #6
0
 /**
  * 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());
 }
예제 #7
0
 /**
  * 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());
 }
예제 #8
0
 /**
  * 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());
 }
예제 #9
0
 /**
  * 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());
 }
예제 #10
0
 /**
  * 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());
 }
예제 #11
0
 /**
  * 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());
 }
예제 #12
0
 /**
  * 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());
 }
예제 #13
0
 /**
  * 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());
 }
예제 #14
0
 /**
  * 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);
 }
예제 #16
0
 /**
  * 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);
 }
예제 #17
0
 /**
  * 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());
 }
예제 #18
0
 /**
  * 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;
 }
예제 #19
0
        });
        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]);
        });
    });
});