feat: add comprehensive tests for Medium, OtpCode, Shift models and various Enums

This commit is contained in:
2026-09-21 05:47:44 +03:30
parent 6e92ebaada
commit 0d16d8f512
8 changed files with 289 additions and 8 deletions
@@ -0,0 +1,30 @@
<?php
namespace Tests\Unit\Enums;
use App\Enums\DocumentModalityEnum;
use PHPUnit\Framework\TestCase;
class DocumentModalityEnumTest extends TestCase
{
public function test_price_per_modality(): void
{
$this->assertSame(1000000, DocumentModalityEnum::CtScan->price());
$this->assertSame(1200000, DocumentModalityEnum::Mri->price());
$this->assertSame(500000, DocumentModalityEnum::Sonography->price());
$this->assertSame(700000, DocumentModalityEnum::Echo->price());
$this->assertSame(400000, DocumentModalityEnum::Radiology->price());
}
public function test_every_case_has_a_positive_price(): void
{
foreach (DocumentModalityEnum::cases() as $modality) {
$this->assertGreaterThan(0, $modality->price(), $modality->name);
}
}
public function test_values_are_slugs_used_by_forms(): void
{
$this->assertSame(['ct-scan', 'mri', 'sonography', 'echo', 'radiology'], DocumentModalityEnum::values());
}
}
@@ -0,0 +1,20 @@
<?php
namespace Tests\Unit\Enums;
use App\Enums\DocumentPriorityEnum;
use PHPUnit\Framework\TestCase;
class DocumentPriorityEnumTest extends TestCase
{
public function test_processing_hours_per_priority(): void
{
$this->assertSame(24, DocumentPriorityEnum::Medium->processingHours());
$this->assertSame(3, DocumentPriorityEnum::High->processingHours());
}
public function test_high_priority_is_processed_faster_than_medium(): void
{
$this->assertLessThan(DocumentPriorityEnum::Medium->processingHours(), DocumentPriorityEnum::High->processingHours());
}
}
+42
View File
@@ -0,0 +1,42 @@
<?php
namespace Tests\Unit\Enums;
use App\Enums\DocumentPriorityEnum;
use App\Enums\ShiftDayEnum;
use Tests\TestCase;
class EnumHasOptionsTest extends TestCase
{
public function test_values_returns_backing_values_in_declaration_order(): void
{
$this->assertSame(['عادی', 'اورژانسی'], DocumentPriorityEnum::values());
}
public function test_keys_returns_case_names_in_declaration_order(): void
{
$this->assertSame(['Medium', 'High'], DocumentPriorityEnum::keys());
}
public function test_from_name_resolves_case_by_name(): void
{
$this->assertSame(DocumentPriorityEnum::High, DocumentPriorityEnum::fromName('High'));
$this->assertSame(ShiftDayEnum::Friday, ShiftDayEnum::fromName('Friday'));
}
public function test_from_name_returns_null_for_unknown_or_value_input(): void
{
$this->assertNull(DocumentPriorityEnum::fromName('Urgent'));
$this->assertNull(DocumentPriorityEnum::fromName(DocumentPriorityEnum::High->value));
$this->assertNull(DocumentPriorityEnum::fromName('high'));
}
public function test_options_is_keyed_by_value_with_translation_per_case(): void
{
$options = DocumentPriorityEnum::options();
$this->assertSame(['عادی', 'اورژانسی'], array_keys($options));
$this->assertSame(__('enums.DocumentPriorityEnum.Medium'), $options['عادی']);
$this->assertSame(__('enums.DocumentPriorityEnum.High'), $options['اورژانسی']);
}
}
+43
View File
@@ -0,0 +1,43 @@
<?php
namespace Tests\Unit\Enums;
use App\Enums\ShiftDayEnum;
use Carbon\Carbon;
use PHPUnit\Framework\TestCase;
class ShiftDayEnumTest extends TestCase
{
public function test_carbon_day_maps_each_case_to_carbon_constant(): void
{
$this->assertSame(Carbon::SATURDAY, ShiftDayEnum::Saturday->carbonDay());
$this->assertSame(Carbon::SUNDAY, ShiftDayEnum::Sunday->carbonDay());
$this->assertSame(Carbon::MONDAY, ShiftDayEnum::Monday->carbonDay());
$this->assertSame(Carbon::TUESDAY, ShiftDayEnum::Tuesday->carbonDay());
$this->assertSame(Carbon::WEDNESDAY, ShiftDayEnum::Wednesday->carbonDay());
$this->assertSame(Carbon::THURSDAY, ShiftDayEnum::Thursday->carbonDay());
$this->assertSame(Carbon::FRIDAY, ShiftDayEnum::Friday->carbonDay());
}
public function test_from_date_resolves_weekday_of_given_date(): void
{
$this->assertSame(ShiftDayEnum::Saturday, ShiftDayEnum::fromDate(Carbon::parse('2026-09-26')));
$this->assertSame(ShiftDayEnum::Sunday, ShiftDayEnum::fromDate(Carbon::parse('2026-09-20')));
$this->assertSame(ShiftDayEnum::Monday, ShiftDayEnum::fromDate(Carbon::parse('2026-09-21')));
$this->assertSame(ShiftDayEnum::Friday, ShiftDayEnum::fromDate(Carbon::parse('2026-09-25')));
}
public function test_from_date_and_carbon_day_round_trip_for_every_case(): void
{
foreach (ShiftDayEnum::cases() as $day) {
$date = Carbon::parse('2026-09-21')->next($day->carbonDay());
$this->assertSame($day, ShiftDayEnum::fromDate($date));
}
}
public function test_values_follow_persian_week_order_starting_saturday(): void
{
$this->assertSame(['شنبه', 'یکشنبه', 'دوشنبه', 'سه‌شنبه', 'چهارشنبه', 'پنج‌شنبه', 'جمعه'], ShiftDayEnum::values());
}
}