create(); $product = Product::factory()->create([ 'stock' => 10, 'price_amount' => 100, 'cost_amount' => 50, 'name' => 'Test Product' ]); // Create Cart Item Cart::factory()->create([ 'user_id' => $user->id, 'product_id' => $product->id, 'product_quantity' => 2 ]); $service = new CreateOrderService(); $orderData = [ 'user_id' => $user->id, 'status' => 'pending', 'total_amount' => 200 ]; // 2. Act $order = $service->execute($user, $orderData); // 3. Assert // Check Order Created $this->assertDatabaseHas('orders', [ 'id' => $order->id, 'user_id' => $user->id, 'total_amount' => 200 ]); // Check Order Items Created $this->assertDatabaseHas('order_items', [ 'order_id' => $order->id, 'product_id' => $product->id, 'quantity' => 2, 'product_name' => 'Test Product' ]); // Check Stock Deducted (10 - 2 = 8) $this->assertEquals(8, $product->fresh()->stock); // Check Cart Cleared $this->assertDatabaseMissing('carts', [ 'user_id' => $user->id ]); // Check Event Dispatched Event::assertDispatched(OrderCreated::class); } }