/**
  * Test translateFail method.
  * @covers Rentalhost\VanillaValidation\ValidationLocalize::translateFail
  * @covers Rentalhost\VanillaValidation\ValidationLocalize::maskKey
  * @covers Rentalhost\VanillaValidation\ValidationLocalize::configureLocale
  */
 public function testTranslateFail()
 {
     $defaultLocale = Validation::option('locale');
     Validation::option('locale', 'pt-BR');
     $validation = new Validation();
     $validation->field('username', '')->required();
     $validationFails = $validation->validate()->getFails();
     static::assertSame('o campo "username" é obrigatório', $validationFails[0]->getLocalized());
     $validationFails = Validation::required()->validate('')->getFails();
     static::assertSame('o campo é obrigatório', $validationFails[0]->getLocalized());
     Validation::option('locale', ['unknow', 'pt-BR', 'en']);
     $validationFails = Validation::cpf()->validate('11122244405')->getFails();
     static::assertSame('o campo deve ser um CPF válido', $validationFails[0]->getLocalized());
     Validation::option('locale', $defaultLocale);
 }
 /**
  * Test nullable rule.
  * @covers Rentalhost\VanillaValidation\ValidationFieldRuleList::validate
  * @covers Rentalhost\VanillaValidation\Result\Nullable::__construct
  * @covers Rentalhost\VanillaValidation\Rule\NullableRule::validate
  */
 public function testNullable()
 {
     // Both are invalid, because both is not nullable ('hello' != empty).
     $validation = Validation::nullable()->minLength(8)->validate('hello');
     static::assertCount(1, $validation->getFails());
     $validation = Validation::minLength(8)->nullable()->validate('hello');
     static::assertCount(1, $validation->getFails());
     // But here, one first will works, because it check by nullable first,
     // then the next rule is ignored ('' == empty).
     $validation = Validation::nullable()->minLength(8)->validate('');
     static::assertCount(0, $validation->getFails());
     $validation = Validation::minLength(8)->nullable()->validate('');
     static::assertCount(1, $validation->getFails());
 }
 /**
  * Configure translator locale.
  */
 public static function configureLocale()
 {
     $localeOption = Validation::option('locale');
     if (!is_array($localeOption)) {
         /** @noinspection ExceptionsAnnotatingAndHandlingInspection */
         self::$translator->setLocale($localeOption);
         /** @noinspection ExceptionsAnnotatingAndHandlingInspection */
         self::$translator->setFallbackLocales([$localeOption]);
     } else {
         /** @noinspection ExceptionsAnnotatingAndHandlingInspection */
         self::$translator->setLocale(array_shift($localeOption));
         /** @noinspection ExceptionsAnnotatingAndHandlingInspection */
         self::$translator->setFallbackLocales($localeOption);
     }
 }
 /**
  * Test locale.
  * @covers Rentalhost\VanillaValidation\Result\Fail::getLocalized
  */
 public function testLocale()
 {
     $optionLocale = Validation::option('locale');
     // Valid.
     Validation::option('locale', ['pt-BR']);
     $validation = Validation::required()->validate('');
     static::assertCount(1, $validation->getFails());
     $validationFail = $validation->getFails()[0];
     static::assertSame('o campo é obrigatório', $validationFail->getLocalized());
     Validation::option('locale', 'pt-BR');
     static::assertSame('o campo é obrigatório', $validationFail->getLocalized());
     Validation::option('locale', ['unknow', 'pt-BR']);
     static::assertSame('o campo é obrigatório', $validationFail->getLocalized());
     // Fail.
     Validation::option('locale', ['unknow']);
     static::assertSame('fail:required', $validationFail->getLocalized());
     Validation::option('locale', 'unknow');
     static::assertSame('fail:required', $validationFail->getLocalized());
     Validation::option('locale', $optionLocale);
 }
 /**
  * Test static/chain method.
  * @covers Rentalhost\VanillaValidation\Validation::__callStatic
  */
 public function testStatic()
 {
     static::assertTrue(Validation::required()->string()->validate('test')->isSuccess());
 }
 /**
  * Test intersect numbers with CPF.
  * @coversNothing
  */
 public function testWithIntersectNumbers()
 {
     static::assertTrue(Validation::intersectNumbers()->cpf()->validate('342.444.198-88')->isSuccess());
 }
 /**
  * Test rule directly.
  * @coversNothing
  */
 public function testDirect()
 {
     static::assertInstanceOf(ValidationChain::class, Validation::mask('#-##'));
 }
 /**
  * Test rule directly.
  * @coversNothing
  */
 public function testDirect()
 {
     static::assertInstanceOf(ValidationChain::class, Validation::maxLength(5));
 }
 /**
  * Test intersect numbers with CEP.
  * @coversNothing
  */
 public function testWithIntersectNumbers()
 {
     static::assertTrue(Validation::intersectNumbers()->cep()->validate('12345-678')->isSuccess());
 }
 /**
  * Test rule directly.
  * @coversNothing
  */
 public function testDirect()
 {
     static::assertInstanceOf(ValidationChain::class, Validation::required());
 }
 /**
  * Test rule directly.
  * @coversNothing
  */
 public function testDirect()
 {
     static::assertInstanceOf(ValidationChain::class, Validation::equals('test'));
 }
 /**
  * Test collect method.
  * @covers Rentalhost\VanillaValidation\ValidationChain::collect
  */
 public function testCollect()
 {
     Validation::collect($beforeAction)->trim()->collect($afterAction)->validate(' hello ');
     static::assertSame(' hello ', $beforeAction);
     static::assertSame('hello', $afterAction);
 }
 /**
  * Test intersect numbers with CNPJ.
  * @coversNothing
  */
 public function testWithIntersectNumbers()
 {
     static::assertTrue(Validation::intersectNumbers()->cnpj()->validate('38.175.021/0001-10')->isSuccess());
 }
 /**
  * Test rule directly.
  * @coversNothing
  */
 public function testDirect()
 {
     static::assertInstanceOf(ValidationChain::class, Validation::intersectNumbers());
 }
 /**
  * Test rule directly.
  * @coversNothing
  */
 public function testDirect()
 {
     static::assertInstanceOf(ValidationChain::class, Validation::bool());
     static::assertInstanceOf(ValidationChain::class, Validation::boolean());
 }
 /**
  * Test rule directly.
  * @coversNothing
  */
 public function testDirect()
 {
     static::assertInstanceOf(ValidationChain::class, Validation::positive());
 }
 /**
  * Test rule directly.
  * @coversNothing
  */
 public function testDirect()
 {
     static::assertInstanceOf(ValidationChain::class, Validation::integer());
     static::assertInstanceOf(ValidationChain::class, Validation::int());
 }