shouldReceive('getShopForCustomer') ->once() ->with($shopperId) ->andReturn($shop); $orderTunnelService->shouldReceive('getAvailableTimeSlots') ->once() ->with($shop) ->andReturn($timeSlots); $mapUrlService = \Mockery::mock(MapUrlService::class); $mapUrlService->shouldReceive('generateUrl') ->once() ->withArgs(fn ($arg) => $arg instanceof ShopDto && $arg->name === 'Shop 1') ->andReturn('https://maps.example.com'); $query = new GetPickTimeSlotQuery($orderTunnelService, $mapUrlService); // WHEN $output = $query($input); // THEN expect($output)->toBeInstanceOf(GetPickTimeSlotQueryOutput::class) ->and($output->step)->toBe(OrderTunnelStep::BOOKING) ->and($output->shop)->toBeInstanceOf(ShopDto::class) ->and($output->shop->name)->toBe('Shop 1') ->and($output->mapUrl)->toBe('https://maps.example.com') ->and($output->timeSlots)->toBe($timeSlots); }); });