ProductionOrderTest.php 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839
  1. <?php
  2. declare(strict_types=1);
  3. namespace Tests\Unit\Models;
  4. use App\Enums\ProductionOrderExecutionType;
  5. use App\Enums\ProductionOrderStatus;
  6. use App\Models\ProductionOrder;
  7. use App\Models\ProductionOrderDelivery;
  8. use App\Models\ProductionOrderInstallation;
  9. use App\Models\ProductionOrderItem;
  10. use Illuminate\Foundation\Testing\RefreshDatabase;
  11. use Tests\TestCase;
  12. class ProductionOrderTest extends TestCase
  13. {
  14. use RefreshDatabase;
  15. public function test_order_relations_keep_items_deliveries_and_installations_normalized(): void
  16. {
  17. $order = ProductionOrder::factory()->create([
  18. 'status' => ProductionOrderStatus::InTransit,
  19. 'execution_type' => ProductionOrderExecutionType::DeliveryAndInstallation,
  20. ]);
  21. ProductionOrderItem::factory()->count(2)->for($order)->create();
  22. ProductionOrderDelivery::factory()->count(2)->for($order)->create();
  23. ProductionOrderInstallation::factory()->count(2)->for($order)->create();
  24. $order->load(['items', 'deliveries', 'installations']);
  25. $this->assertCount(2, $order->items);
  26. $this->assertCount(2, $order->deliveries);
  27. $this->assertCount(2, $order->installations);
  28. $this->assertSame(ProductionOrderStatus::InTransit, $order->status);
  29. $this->assertSame('В пути', $order->statusLabel());
  30. $this->assertSame('Доставка + Монтаж', $order->executionTypeLabel());
  31. }
  32. }