Skip to content

Commit e9e6cc9

Browse files
authored
Add setMoney method (#180)
1 parent 801390e commit e9e6cc9

File tree

2 files changed

+31
-0
lines changed

2 files changed

+31
-0
lines changed

src/Common/Message/AbstractRequest.php

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -318,6 +318,8 @@ private function getMoney($amount = null)
318318

319319
if ($amount === null) {
320320
return null;
321+
} elseif ($amount instanceof Money) {
322+
$money = $amount;
321323
} elseif (is_integer($amount)) {
322324
$money = new Money($amount, $currency);
323325
} else {
@@ -401,6 +403,21 @@ public function setAmountInteger($value)
401403
return $this->setParameter('amount', (int) $value);
402404
}
403405

406+
/**
407+
* Sets the payment amount as integer.
408+
*
409+
* @param Money $value
410+
* @return $this
411+
*/
412+
public function setMoney(Money $value)
413+
{
414+
$currency = $value->getCurrency()->getCode();
415+
416+
$this->setCurrency($currency);
417+
418+
return $this->setParameter('amount', $value);
419+
}
420+
404421
/**
405422
* Get the payment currency code.
406423
*

tests/Omnipay/Common/Message/AbstractRequestTest.php

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33
namespace Omnipay\Common\Message;
44

55
use Mockery as m;
6+
use Money\Currency;
7+
use Money\Money;
68
use Omnipay\Common\CreditCard;
79
use Omnipay\Common\ItemBag;
810
use Omnipay\Tests\TestCase;
@@ -247,6 +249,18 @@ public function testAmountNegativeFloatThrowsException()
247249
$this->request->getAmount();
248250
}
249251

252+
public function testMoney()
253+
{
254+
$money = new Money(12345, new Currency('EUR'));
255+
$this->assertSame($this->request, $this->request->setMoney($money));
256+
257+
$this->request->validate('amount', 'currency');
258+
259+
$this->assertSame('123.45', $this->request->getAmount());
260+
$this->assertSame(12345, $this->request->getAmountInteger());
261+
$this->assertSame('EUR', $this->request->getCurrency());
262+
}
263+
250264
public function testCurrency()
251265
{
252266
$this->assertSame($this->request, $this->request->setCurrency('USD'));

0 commit comments

Comments
 (0)