'Rex', 'type' => PetTypeEnum::Dog->value, 'gender' => PetGenderEnum::Male->value, 'breed' => 'ژرمن', 'weight' => '20', 'sterilized' => true, 'birthday' => '2020-01-01', ], $overrides); } public function test_passes_with_valid_payload(): void { $this->assertPasses(PetRequest::class, $this->valid()); } public function test_converts_persian_digits_in_weight(): void { $this->assertPasses(PetRequest::class, $this->valid(['weight' => '۲۰'])); } public function test_fails_without_required_fields(): void { $errors = $this->formRequestErrors(PetRequest::class, ['weight' => '1']); foreach (['name', 'type', 'gender', 'breed', 'sterilized', 'birthday'] as $field) { $this->assertArrayHasKey($field, $errors); } } public function test_fails_without_weight(): void { $this->assertFailsOn('weight', PetRequest::class, $this->valid(['weight' => null])); } public function test_fails_when_type_or_gender_is_a_key_instead_of_value(): void { $this->assertFailsOn('type', PetRequest::class, $this->valid(['type' => PetTypeEnum::Dog->name])); $this->assertFailsOn('gender', PetRequest::class, $this->valid(['gender' => PetGenderEnum::Male->name])); } public function test_fails_with_non_integer_weight_or_invalid_birthday(): void { $this->assertFailsOn('weight', PetRequest::class, $this->valid(['weight' => 'heavy'])); $this->assertFailsOn('birthday', PetRequest::class, $this->valid(['birthday' => 'x'])); } public function test_fails_with_non_boolean_sterilized(): void { $this->assertFailsOn('sterilized', PetRequest::class, $this->valid(['sterilized' => 'yes'])); } }