AdultBirthDateTest.php 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. <?php
  2. namespace Tests\Unit\Rules;
  3. use App\Http\Requests\StudentRequest;
  4. use App\Http\Requests\StudentResponsibleRequest;
  5. use App\Rules\AdultBirthDate;
  6. use Illuminate\Support\Facades\Validator;
  7. use Tests\TestCase;
  8. class AdultBirthDateTest extends TestCase
  9. {
  10. public function test_it_rejects_a_birth_date_from_a_minor(): void
  11. {
  12. $validator = Validator::make(
  13. ['birth_date' => now()->subYears(17)->toDateString()],
  14. ['birth_date' => ['date', new AdultBirthDate]],
  15. );
  16. $this->assertTrue($validator->fails());
  17. $this->assertSame(
  18. __('validation.responsible_must_be_adult'),
  19. $validator->errors()->first('birth_date'),
  20. );
  21. }
  22. public function test_it_accepts_a_birth_date_from_an_adult(): void
  23. {
  24. $validator = Validator::make(
  25. ['birth_date' => now()->subYears(18)->toDateString()],
  26. ['birth_date' => ['date', new AdultBirthDate]],
  27. );
  28. $this->assertFalse($validator->fails());
  29. }
  30. public function test_it_is_used_by_both_responsible_requests(): void
  31. {
  32. $studentRules = StudentRequest::create('/', 'POST')->rules();
  33. $responsibleRules = StudentResponsibleRequest::create('/', 'POST')->rules();
  34. $studentAdultRules = array_filter(
  35. $studentRules['responsible.birth_date'],
  36. fn (mixed $rule): bool => $rule instanceof AdultBirthDate,
  37. );
  38. $responsibleAdultRules = array_filter(
  39. $responsibleRules['birth_date'],
  40. fn (mixed $rule): bool => $rule instanceof AdultBirthDate,
  41. );
  42. $this->assertCount(1, $studentAdultRules);
  43. $this->assertCount(1, $responsibleAdultRules);
  44. }
  45. }