function it_marks_order_as_partially_paid_if_one_of_the_payment_is_processing(FactoryInterface $stateMachineFactory, StateMachineInterface $stateMachine, OrderInterface $order, PaymentInterface $payment1, PaymentInterface $payment2) { $payment1->getAmount()->willReturn(6000); $payment1->getState()->willReturn(PaymentInterface::STATE_PROCESSING); $payment2->getAmount()->willReturn(4000); $payment2->getState()->willReturn(PaymentInterface::STATE_COMPLETED); $payments = new ArrayCollection([$payment1->getWrappedObject(), $payment2->getWrappedObject()]); $order->hasPayments()->willReturn(true); $order->getPayments()->willReturn($payments); $order->getPaymentState()->willReturn(OrderPaymentStates::STATE_AWAITING_PAYMENT); $order->getTotal()->willReturn(10000); $stateMachineFactory->get($order, OrderPaymentTransitions::GRAPH)->willReturn($stateMachine); $stateMachine->can(OrderPaymentTransitions::TRANSITION_PARTIALLY_PAY)->willReturn(true); $stateMachine->apply(OrderPaymentTransitions::TRANSITION_PARTIALLY_PAY)->shouldBeCalled(); $this->resolve($order); }
function it_sets_payment_method_from_last_failed_payment_during_processing($paymentFactory, PaymentInterface $payment, PaymentInterface $failedPayment, OrderInterface $order, PaymentMethodInterface $paymentMethodFromLastFailedPayment) { $payments = new ArrayCollection(); $payments->add($failedPayment->getWrappedObject()); $order->getPayments()->willReturn($payments); $order->getState()->willReturn(OrderInterface::STATE_NEW); $order->getLastNewPayment()->willReturn(null); $order->getTotal()->willReturn(1234); $order->getCurrencyCode()->willReturn('EUR'); $paymentFactory->createWithAmountAndCurrencyCode(1234, 'EUR')->willReturn($payment); $failedPayment->getState()->willReturn(PaymentInterface::STATE_FAILED); $failedPayment->getMethod()->willReturn($paymentMethodFromLastFailedPayment); $payment->setMethod($paymentMethodFromLastFailedPayment)->shouldBeCalled(); $payment->setOrder($order)->shouldBeCalled(); $order->addPayment($payment)->shouldBeCalled(); $this->process($order); }