Files
radicall/tests/Feature/Requests/Admin/PetRequestTest.php
T

69 lines
2.2 KiB
PHP

<?php
namespace Tests\Feature\Requests\Admin;
use App\Enums\PetGenderEnum;
use App\Enums\PetTypeEnum;
use App\Http\Requests\Admin\PetRequest;
use Tests\Concerns\ValidatesFormRequests;
use Tests\TestCase;
class PetRequestTest extends TestCase
{
use ValidatesFormRequests;
protected function valid(array $overrides = []): array
{
return array_merge([
'name' => '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']));
}
}