function it_does_not_mark_order_as_fulfilled_when_it_has_been_shipped_but_not_paid(FactoryInterface $stateMachineFactory, OrderInterface $order, StateMachineInterface $stateMachine) { $order->getShippingState()->willReturn(OrderShippingStates::STATE_SHIPPED); $order->getPaymentState()->willReturn(Argument::not(OrderPaymentStates::STATE_PAID)); $stateMachineFactory->get($order, OrderTransitions::GRAPH)->willReturn($stateMachine); $stateMachine->can(OrderTransitions::TRANSITION_FULFILL)->willReturn(true); $stateMachine->apply(OrderTransitions::TRANSITION_FULFILL)->shouldNotBeCalled(); $this->resolve($order); }
function it_does_not_mark_an_order_if_it_is_already_in_this_shipping_state(FactoryInterface $stateMachineFactory, OrderInterface $order, ShipmentInterface $shipment1, ShipmentInterface $shipment2, StateMachineInterface $orderStateMachine) { $shipments = new ArrayCollection(); $shipments->add($shipment1->getWrappedObject()); $shipments->add($shipment2->getWrappedObject()); $order->getShipments()->willReturn($shipments); $order->getShippingState()->willReturn(OrderShippingStates::STATE_SHIPPED); $stateMachineFactory->get($order, OrderShippingTransitions::GRAPH)->willReturn($orderStateMachine); $shipment1->getState()->willReturn(ShipmentInterface::STATE_SHIPPED); $shipment2->getState()->willReturn(ShipmentInterface::STATE_SHIPPED); $orderStateMachine->apply(OrderShippingTransitions::TRANSITION_SHIP)->shouldNotBeCalled(); $this->resolve($order); }
/** * {@inheritdoc} */ public function resolveShippingState(OrderInterface $order) { if (OrderShippingStates::STATE_SHIPPED === $order->getShippingState()) { return; } /** @var StateMachineInterface $stateMachine */ $stateMachine = $this->stateMachineFactory->get($order, OrderShippingTransitions::GRAPH); if ($this->allShipmentsInStateButOrderStateNotUpdated($order, ShipmentInterface::STATE_SHIPPED, OrderShippingStates::STATE_SHIPPED)) { $stateMachine->apply(OrderShippingTransitions::TRANSITION_SHIP); } if ($this->isPartiallyShippedButOrderStateNotUpdated($order)) { $stateMachine->apply(OrderShippingTransitions::TRANSITION_PARTIALLY_SHIP); } }