| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109 |
- <?php
- namespace Tests\Unit\Http\Requests;
- use App\Http\Requests\StudentContractRequest;
- use App\Models\StudentContract;
- use Carbon\CarbonImmutable;
- use Illuminate\Support\Facades\Validator as ValidatorFacade;
- use Illuminate\Validation\Validator;
- use Tests\TestCase;
- class StudentContractRequestTest extends TestCase
- {
- protected function setUp(): void
- {
- parent::setUp();
- app()->setLocale('pt');
- CarbonImmutable::setTestNow('2026-08-10 12:00:00');
- }
- protected function tearDown(): void
- {
- CarbonImmutable::setTestNow();
- parent::tearDown();
- }
- public function test_it_does_not_allow_changing_the_contract_start_date(): void
- {
- $validator = $this->validatorFor([
- 'signature_date' => '2025-01-11',
- ]);
- $this->assertSame(
- ['A data de início do contrato não pode ser alterada.'],
- $validator->errors()->get('signature_date'),
- );
- }
- public function test_it_allows_sending_the_unchanged_contract_start_date(): void
- {
- $validator = $this->validatorFor([
- 'signature_date' => '2025-01-10',
- ]);
- $this->assertFalse($validator->errors()->has('signature_date'));
- }
- public function test_it_does_not_allow_reducing_the_contract_end_date(): void
- {
- $validator = $this->validatorFor([
- 'end_date' => '2026-11-30',
- ]);
- $this->assertSame(
- ['A data de fim do contrato não pode ser reduzida.'],
- $validator->errors()->get('end_date'),
- );
- }
- public function test_it_allows_renewal_up_to_one_year_from_today(): void
- {
- $validator = $this->validatorFor([
- 'end_date' => '2027-08-10',
- ]);
- $this->assertFalse($validator->errors()->has('end_date'));
- }
- public function test_it_rejects_renewal_beyond_one_year_from_today(): void
- {
- $validator = $this->validatorFor([
- 'end_date' => '2027-08-11',
- ]);
- $this->assertSame(
- ['A data de fim do contrato pode ser prorrogada no máximo até 10/08/2027.'],
- $validator->errors()->get('end_date'),
- );
- }
- private function validatorFor(array $data): Validator
- {
- $contract = new StudentContract;
- $contract->signature_date = '2025-01-10';
- $contract->end_date = '2026-12-01';
- $request = TestableStudentContractRequest::create('/', 'PUT', $data);
- $request->contract = $contract;
- $validator = ValidatorFacade::make($request->all(), $request->rules());
- foreach ($request->after() as $callback) {
- $validator->after($callback);
- }
- return $validator;
- }
- }
- class TestableStudentContractRequest extends StudentContractRequest
- {
- public ?StudentContract $contract = null;
- protected function contractBeingUpdated(): ?StudentContract
- {
- return $this->contract;
- }
- }
|