function it_sets_payment_method_from_last_failed_payment_during_processing(PaymentFactoryInterface $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); }