public function saveAction() { $data = new Varien_Object($this->getRequest()->getParam('payment', array())); $data->setCustomerId(Mage::helper('iugu')->getCustomerId()); $data->setDescription(Mage::getModel('core/date')->timestamp(time())); $result = Mage::getSingleton('iugu/api')->savePaymentMethod($data); if ($result->getErrors()) { Mage::getSingleton('customer/session')->addError($this->__('An error occurred while saving the credit card.')); } else { Mage::getSingleton('customer/session')->addSuccess(Mage::helper('iugu')->__('Credit card has been saved.')); } $this->_redirect('*/*/'); }
protected function _place($payment, $amount) { $order = $payment->getOrder(); $payer = Mage::helper('iugu')->getPayerInfoFromOrder($payment->getOrder()); $items = Mage::helper('iugu')->getItemsFromOrder($payment->getOrder()); // Verify if needs add interest $interestRate = $this->getInterestRate($payment->getInstallments()); $totalWithInterest = $this->calcTotalWithInterest($amount, $interestRate); if ($totalWithInterest - $amount > 0) { $item = new Varien_Object(); $item->setDescription(Mage::helper('iugu')->__('Interest')); $item->setQuantity(1); $item->setPriceCents(Mage::helper('iugu')->formatAmount($totalWithInterest - $amount)); $items[] = $item; } // Save Payment method if (!$payment->getIuguCustomerPaymentMethodId() && $payment->getIuguSave()) { $data = new Varien_Object(); $data->setToken($payment->getIuguToken()); $data->setCustomerId(Mage::helper('iugu')->getCustomerId()); $data->setDescription(Mage::getModel('core/date')->timestamp(time())); $result = Mage::getSingleton('iugu/api')->savePaymentMethod($data); if ($result->getId()) { $payment->setIuguCustomerPaymentMethodId($result->getId()); } } // Set Charge Data $data = new Varien_Object(); if ($payment->getIuguCustomerPaymentMethodId()) { $data->setCustomerPaymentMethodId($payment->getIuguCustomerPaymentMethodId()); } else { $data->setToken($payment->getIuguToken()); } $data->setMonths($payment->getInstallments())->setEmail($order->getCustomerEmail())->setItems($items)->setPayer($payer); // Discount if ($order->getBaseDiscountAmount()) { $data->setDiscountCents(Mage::helper('iugu')->formatAmount(abs($order->getBaseDiscountAmount()))); } // Tax if ($order->getBaseTaxAmount()) { $data->setTaxCents($this->formatAmount($order->getBaseTaxAmount())); } // Charge $result = Mage::getSingleton('iugu/api')->charge($data); if (!$result->getSuccess()) { Mage::throwException(Mage::helper('iugu')->__('Transaction failed, please try again or contact the card issuing bank.')); } // Set iugu info $payment->setIuguInvoiceId($result->getInvoiceId())->setIuguTotalWithInterest($totalWithInterest)->setIuguUrl($result->getUrl())->setIuguPdf($result->getPdf())->setTransactionId($result->getInvoiceId())->setIsTransactionClosed(0)->setTransactionAdditionalInfo(Mage_Sales_Model_Order_Payment_Transaction::RAW_DETAILS, array('message' => $result->getMessage())); return $this; }
/** * @test * @loadFixture testGetProduct * @dataProvider provider__testOrderSaveAfter * * 1. OrderSaveAfter * 2. Mage::getModel('collpur/deal') ->load($dealId) ->processOrderItem($item); * 3. AW_Collpur_Model_Dealpurchases->connectWithFreeCoupons * * This the most important functions that should be tested * */ public function testOrderSaveAfter($data) { $orderMock = $this->getModelMock('sales/order', array('getAllItems')); /* Prepare array of fake sales order items */ $orderItems = array(); for ($i = 0; $i < 3; $i++) { $salesOrderMock = $this->getModelMock('sales/order_item', array('getProductOptionByCode', 'getId')); $itemData = new Varien_Object(); $itemData->setDealId($data['dealId']); /* Prepare fake order for orderItem */ $orderItem = new Varien_Object(); $orderItem->setId($data['dealId']); $orderItem->setCustomerName('Test order customer'); $orderItem->setCustomerId($data['dealId']); /* * ********************************* */ $salesOrderMock->expects($this->any())->method('getProductOptionByCode')->will($this->returnValue($itemData)); $salesOrderMock->expects($this->any())->method('getId')->will($this->returnValue($data['dealId'])); $salesOrderMock->setOrder($orderItem); $salesOrderMock->setData('qty_invoiced', $data['qtyToAdd']); $salesOrderMock->setData('qty_refunded', 0); $orderItems[] = $salesOrderMock; } $orderMock->expects($this->any())->method('getAllItems')->will($this->returnValue($orderItems)); $observer = new Varien_Object(); $observer->setOrder($orderMock); Mage::app()->getRequest()->setControllerName('sales_order_invoice'); $exception = false; if ($data['uid'] == '003' || $data['uid'] == '001' || $data['uid'] == '004') { $this->setExpectedException('Mage_Core_Exception'); $exception = true; } Mage::getModel('collpur/observer')->orderSaveAfter($observer); /* * If there was no exceiption during call of * Mage::getModel('collpur/deal') ->load($dealId) ->processOrderItem($item); * proceed with test * */ if (!$exception) { /* Check that number of purchases generated correct */ $purchasesCount = Mage::getResourceModel('collpur/dealpurchases_collection')->count(); $this->assertEquals($purchasesCount, $data['qtyToAdd'], 'Incorrect purchases collection count'); /* Check that correct number of coupons were generated */ $couponsCount = Mage::getResourceModel('collpur/coupon_collection')->count(); $this->assertEquals($couponsCount, $data['qtyToAdd'], 'Incorrect coupons collection count'); } }