diff --git a/.gitignore b/.gitignore index a5fa0f9a..2fba55ec 100644 --- a/.gitignore +++ b/.gitignore @@ -11,3 +11,5 @@ /tests/Application/yarn.lock /web/media + +/.phpunit.result.cache diff --git a/spec/EventListener/OrderCreationListenerSpec.php b/spec/EventListener/OrderCreationListenerSpec.php index e222948d..c3c000b4 100644 --- a/spec/EventListener/OrderCreationListenerSpec.php +++ b/spec/EventListener/OrderCreationListenerSpec.php @@ -44,6 +44,7 @@ function it_completes_order_before_creation( $stateMachineFactory->get($order, 'sylius_order_checkout')->willReturn($stateMachine); $stateMachine->apply(OrderCheckoutTransitions::TRANSITION_ADDRESS)->shouldBeCalled(); + $stateMachine->can(OrderCheckoutTransitions::TRANSITION_SELECT_SHIPPING)->willReturn(true); $stateMachine->apply(OrderCheckoutTransitions::TRANSITION_SELECT_SHIPPING)->shouldBeCalled(); $stateMachine->can(OrderCheckoutTransitions::TRANSITION_SELECT_PAYMENT)->willReturn(true); $stateMachine->apply(OrderCheckoutTransitions::TRANSITION_SELECT_PAYMENT)->shouldBeCalled(); @@ -62,6 +63,7 @@ function it_completes_order_without_payment_before_creation( $stateMachineFactory->get($order, 'sylius_order_checkout')->willReturn($stateMachine); $stateMachine->apply(OrderCheckoutTransitions::TRANSITION_ADDRESS)->shouldBeCalled(); + $stateMachine->can(OrderCheckoutTransitions::TRANSITION_SELECT_SHIPPING)->willReturn(true); $stateMachine->apply(OrderCheckoutTransitions::TRANSITION_SELECT_SHIPPING)->shouldBeCalled(); $stateMachine->can(OrderCheckoutTransitions::TRANSITION_SELECT_PAYMENT)->willReturn(false); $stateMachine->apply(OrderCheckoutTransitions::TRANSITION_SELECT_PAYMENT)->shouldNotBeCalled(); @@ -70,18 +72,35 @@ function it_completes_order_without_payment_before_creation( $this->completeOrderBeforeCreation($event); } + function it_completes_order_without_shipping_before_creation( + FactoryInterface $stateMachineFactory, + GenericEvent $event, + StateMachineInterface $stateMachine, + OrderInterface $order + ) { + $event->getSubject()->willReturn($order); + + $stateMachineFactory->get($order, 'sylius_order_checkout')->willReturn($stateMachine); + $stateMachine->apply(OrderCheckoutTransitions::TRANSITION_ADDRESS)->shouldBeCalled(); + $stateMachine->can(OrderCheckoutTransitions::TRANSITION_SELECT_SHIPPING)->willReturn(false); + $stateMachine->apply(OrderCheckoutTransitions::TRANSITION_SELECT_SHIPPING)->shouldNotBeCalled(); + $stateMachine->can(OrderCheckoutTransitions::TRANSITION_SELECT_PAYMENT)->willReturn(true); + $stateMachine->apply(OrderCheckoutTransitions::TRANSITION_SELECT_PAYMENT)->shouldBeCalled(); + $stateMachine->apply(OrderCheckoutTransitions::TRANSITION_COMPLETE)->shouldBeCalled(); + + $this->completeOrderBeforeCreation($event); + } + function it_throws_exception_if_event_subject_is_not_order(GenericEvent $event) { $event->getSubject()->willReturn('badObject', 'badObject'); $this ->shouldThrow(\InvalidArgumentException::class) - ->during('processOrderBeforeCreation', [$event]) - ; + ->during('processOrderBeforeCreation', [$event]); $this ->shouldThrow(\InvalidArgumentException::class) - ->during('completeOrderBeforeCreation', [$event]) - ; + ->during('completeOrderBeforeCreation', [$event]); } } diff --git a/src/EventListener/OrderCreationListener.php b/src/EventListener/OrderCreationListener.php index 0eb9cec1..83752ef2 100644 --- a/src/EventListener/OrderCreationListener.php +++ b/src/EventListener/OrderCreationListener.php @@ -41,7 +41,9 @@ public function completeOrderBeforeCreation(GenericEvent $event): void $stateMachine = $this->stateMachineFactory->get($order, 'sylius_order_checkout'); $stateMachine->apply(OrderCheckoutTransitions::TRANSITION_ADDRESS); - $stateMachine->apply(OrderCheckoutTransitions::TRANSITION_SELECT_SHIPPING); + if ($stateMachine->can(OrderCheckoutTransitions::TRANSITION_SELECT_SHIPPING)) { + $stateMachine->apply(OrderCheckoutTransitions::TRANSITION_SELECT_SHIPPING); + } if ($stateMachine->can(OrderCheckoutTransitions::TRANSITION_SELECT_PAYMENT)) { $stateMachine->apply(OrderCheckoutTransitions::TRANSITION_SELECT_PAYMENT); }