65 lines
2.2 KiB
PHP
65 lines
2.2 KiB
PHP
<?php
|
|
|
|
namespace Tests\Feature\Requests\Admin;
|
|
|
|
use App\Enums\ReportStatusEnum;
|
|
use App\Http\Requests\Admin\ReportRequest;
|
|
use App\Models\Document;
|
|
use App\Models\Medium;
|
|
use App\Models\User;
|
|
use Illuminate\Foundation\Testing\RefreshDatabase;
|
|
use Tests\Concerns\ValidatesFormRequests;
|
|
use Tests\TestCase;
|
|
|
|
class ReportRequestTest extends TestCase
|
|
{
|
|
use RefreshDatabase, ValidatesFormRequests;
|
|
|
|
protected function valid(array $overrides = []): array
|
|
{
|
|
return array_merge([
|
|
'document_id' => Document::factory()->create()->id,
|
|
'doctor_id' => User::factory()->create()->id,
|
|
'status' => ReportStatusEnum::Approved->name,
|
|
'body' => 'متن گزارش',
|
|
'submitted_at' => '2026-09-21 10:00:00',
|
|
], $overrides);
|
|
}
|
|
|
|
public function test_passes_with_valid_payload(): void
|
|
{
|
|
$this->assertPasses(ReportRequest::class, $this->valid());
|
|
}
|
|
|
|
public function test_passes_with_existing_medium(): void
|
|
{
|
|
$this->assertPasses(ReportRequest::class, $this->valid(['medium_id' => Medium::factory()->create()->id]));
|
|
}
|
|
|
|
public function test_fails_without_required_fields(): void
|
|
{
|
|
$errors = $this->formRequestErrors(ReportRequest::class, []);
|
|
|
|
foreach (['document_id', 'doctor_id', 'status', 'body', 'submitted_at'] as $field) {
|
|
$this->assertArrayHasKey($field, $errors);
|
|
}
|
|
}
|
|
|
|
public function test_fails_with_unknown_document_doctor_or_medium(): void
|
|
{
|
|
$this->assertFailsOn('document_id', ReportRequest::class, $this->valid(['document_id' => 999]));
|
|
$this->assertFailsOn('doctor_id', ReportRequest::class, $this->valid(['doctor_id' => 999]));
|
|
$this->assertFailsOn('medium_id', ReportRequest::class, $this->valid(['medium_id' => 999]));
|
|
}
|
|
|
|
public function test_fails_when_status_is_a_value_instead_of_key(): void
|
|
{
|
|
$this->assertFailsOn('status', ReportRequest::class, $this->valid(['status' => ReportStatusEnum::Approved->value]));
|
|
}
|
|
|
|
public function test_fails_with_invalid_submitted_at(): void
|
|
{
|
|
$this->assertFailsOn('submitted_at', ReportRequest::class, $this->valid(['submitted_at' => 'x']));
|
|
}
|
|
}
|