createRequest(); self::assertSame(ShipmentStatus::Requested, $request->status()); self::assertSame('order-1', $request->orderRef->toString()); } public function test_create_records_event(): void { $request = $this->createRequest(); $events = $request->releaseEvents(); self::assertCount(1, $events); self::assertInstanceOf(ShipmentRequested::class, $events[0]); } public function test_mark_dispatched(): void { $request = $this->createRequest(); $request->markDispatched(); self::assertSame(ShipmentStatus::Dispatched, $request->status()); } public function test_mark_dispatched_twice_throws(): void { $this->expectException(\DomainException::class); $request = $this->createRequest(); $request->markDispatched(); $request->markDispatched(); } public function test_parcel_with_zero_weight_throws(): void { $this->expectException(\InvalidArgumentException::class); new ParcelSpec(0, 'Widget'); } private function createRequest(): ShipmentRequest { return ShipmentRequest::fromSalesOrder( LegacyOrderRef::fromExternalId('order-1'), new ShippingAddress('John Doe', '1 Rue du Commerce', 'Paris', '75001', 'FR'), new ParcelSpec(1000, 'Order order-1'), new \DateTimeImmutable(), ); } }