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; } }