toBeInstanceOf(OrderBuilderWithBasket::class) ->and($builder->getBuilderType())->toBe(OrderBuilderType::FROM_BASKET) ->and($builder->isFromBasket())->toBeTrue() ->and($builder->isCompleted())->toBeFalse() ->and($builder->getBasket())->toBe($basket) ->and($builder->getShopperId())->toBe($customerId); }); it('transitions to with_pickup state when adding a timeslot', function (): void { // GIVEN $basketId = new BasketId(Uuid::uuid7()); $basket = new Basket($basketId); $customerId = new ShopperId(Uuid::uuid7()); $shopId = new ShopId(Uuid::uuid7()); $timeSlot = new PickupTimeSlot(new \DateTimeImmutable(), new \DateInterval('PT1H')); $builder = OrderBuilder::fromBasket($basket, $customerId); // WHEN $completedBuilder = $builder->withPickupTimeSlot($shopId, $timeSlot); // THEN expect($completedBuilder) ->toBeInstanceOf(OrderBuilderCompleted::class) ->and($completedBuilder->getBuilderType())->toBe(OrderBuilderType::WITH_PICKUP) ->and($completedBuilder->isFromBasket())->toBeTrue() ->and($completedBuilder->isCompleted())->toBeTrue() ->and($completedBuilder->getShopId())->toBe($shopId) ->and($completedBuilder->getPickupTimeSlot())->toBe($timeSlot); }); });