ReservationTest.php 3.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. <?php
  2. namespace Tests\Unit\Models;
  3. use App\Models\Reclamation;
  4. use App\Models\Reservation;
  5. use App\Models\SparePart;
  6. use App\Models\SparePartOrder;
  7. use Illuminate\Database\Eloquent\Relations\BelongsTo;
  8. use Illuminate\Foundation\Testing\RefreshDatabase;
  9. use Tests\TestCase;
  10. class ReservationTest extends TestCase
  11. {
  12. use RefreshDatabase;
  13. protected $seed = true;
  14. public function test_status_constants_defined(): void
  15. {
  16. $this->assertEquals('active', Reservation::STATUS_ACTIVE);
  17. $this->assertEquals('issued', Reservation::STATUS_ISSUED);
  18. $this->assertEquals('cancelled', Reservation::STATUS_CANCELLED);
  19. }
  20. public function test_is_active_returns_true_for_active(): void
  21. {
  22. $reservation = Reservation::factory()->active()->create();
  23. $this->assertTrue($reservation->isActive());
  24. }
  25. public function test_is_issued_returns_true_for_issued(): void
  26. {
  27. $reservation = Reservation::factory()->issued()->create();
  28. $this->assertTrue($reservation->isIssued());
  29. }
  30. public function test_is_cancelled_returns_true_for_cancelled(): void
  31. {
  32. $reservation = Reservation::factory()->cancelled()->create();
  33. $this->assertTrue($reservation->isCancelled());
  34. }
  35. public function test_scope_active_filters_correctly(): void
  36. {
  37. $sparePart = SparePart::factory()->create();
  38. $order = SparePartOrder::factory()->inStock()->forSparePart($sparePart)->create();
  39. Reservation::factory()->active()->forSparePart($sparePart)->fromOrder($order)->create();
  40. Reservation::factory()->cancelled()->forSparePart($sparePart)->fromOrder($order)->create();
  41. $activeCount = Reservation::active()->forSparePart($sparePart->id)->count();
  42. $this->assertEquals(1, $activeCount);
  43. }
  44. public function test_scope_for_spare_part_filters_correctly(): void
  45. {
  46. $sparePart1 = SparePart::factory()->create();
  47. $sparePart2 = SparePart::factory()->create();
  48. $order1 = SparePartOrder::factory()->inStock()->forSparePart($sparePart1)->create();
  49. $order2 = SparePartOrder::factory()->inStock()->forSparePart($sparePart2)->create();
  50. Reservation::factory()->forSparePart($sparePart1)->fromOrder($order1)->count(2)->create();
  51. Reservation::factory()->forSparePart($sparePart2)->fromOrder($order2)->create();
  52. $count = Reservation::forSparePart($sparePart1->id)->count();
  53. $this->assertEquals(2, $count);
  54. }
  55. public function test_scope_for_reclamation_filters_correctly(): void
  56. {
  57. $reclamation1 = Reclamation::factory()->create();
  58. $reclamation2 = Reclamation::factory()->create();
  59. Reservation::factory()->forReclamation($reclamation1)->count(3)->create();
  60. Reservation::factory()->forReclamation($reclamation2)->create();
  61. $count = Reservation::forReclamation($reclamation1->id)->count();
  62. $this->assertEquals(3, $count);
  63. }
  64. public function test_relations_exist(): void
  65. {
  66. $reservation = Reservation::factory()->create();
  67. $this->assertInstanceOf(BelongsTo::class, $reservation->sparePart());
  68. $this->assertInstanceOf(BelongsTo::class, $reservation->sparePartOrder());
  69. $this->assertInstanceOf(BelongsTo::class, $reservation->reclamation());
  70. }
  71. }