/** * @dataProvider providerConvert * * @param string $money The string representation of the base money. * @param string $currency The currency code to convert to. * @param int $roundingMode The rounding mode to use. * @param string $expectedResult The expected money's string representation, or an exception class name. */ public function testConvert($money, $currency, $roundingMode, $expectedResult) { $money = Money::parse($money); $currency = Currency::of($currency); $currencyConverter = $this->createCurrencyConverter($roundingMode); if ($this->isExceptionClass($expectedResult)) { $this->setExpectedException($expectedResult); } $actualResult = $currencyConverter->convert($money, $currency); if (!$this->isExceptionClass($expectedResult)) { $this->assertMoneyIs($expectedResult, $actualResult); } }
/** * @depends testNewMoneyBagIsEmpty * * @param MoneyBag $moneyBag * * @return MoneyBag */ public function testAddSubtractMoney(MoneyBag $moneyBag) { $moneyBag->add(Money::of('123', 'EUR')); $this->assertMoneyBagContains(['EUR 123.00'], $moneyBag); $moneyBag->add(Money::of('234.99', 'EUR')); $this->assertMoneyBagContains(['EUR 357.99'], $moneyBag); $moneyBag->add(Money::of(3, 'JPY')); $this->assertMoneyBagContains(['EUR 357.99', 'JPY 3'], $moneyBag); $moneyBag->add(Money::parse('JPY 1.1234')); $this->assertMoneyBagContains(['EUR 357.99', 'JPY 4.1234'], $moneyBag); $moneyBag->subtract(Money::parse('EUR 3.589950')); $this->assertMoneyBagContains(['EUR 354.400050', 'JPY 4.1234'], $moneyBag); return $moneyBag; }
/** * @param array $expectedMonies * @param MoneyBag $moneyBag */ protected final function assertMoneyBagContains(array $expectedMonies, $moneyBag) { $this->assertInstanceOf(MoneyBag::class, $moneyBag); // Test get() on each currency foreach ($expectedMonies as $money) { $money = Money::parse($money); $this->assertMoneyIs($money, $moneyBag->get($money->getCurrency())); } $actualMonies = $moneyBag->getMonies(); foreach ($actualMonies as &$money) { $money = (string) $money; } sort($expectedMonies); sort($actualMonies); // Test getMonies() $this->assertSame($expectedMonies, $actualMonies); }
/** * @dataProvider providerMax * * @param array $monies The monies to compare. * @param string $expectedMin The expected maximum money, or an exception class. */ public function testMax(array $monies, $expectedMin) { $comparator = new MoneyComparator($this->getExchangeRateProvider()); foreach ($monies as &$money) { $money = Money::parse($money); } if ($this->isExceptionClass($expectedMin)) { $this->setExpectedException($expectedMin); } $actualMin = $comparator->max(...$monies); if (!$this->isExceptionClass($expectedMin)) { $this->assertMoneyIs($expectedMin, $actualMin); } }
/** * @expectedException \Brick\Money\Exception\CurrencyMismatchException */ public function testTotalOfDifferentCurrenciesThrowsException() { Money::total(Money::parse('EUR 1.00'), Money::parse('USD 1.00')); }
/** * @dataProvider providerCredit * * @param string $cardNumber * @param string $validity * @param string $cvv * @param string $amount * @param string $expectedStatus */ public function testCredit($cardNumber, $validity, $cvv, $amount, $expectedStatus) { $card = new Card($cardNumber, $validity, $cvv); $amount = Money::parse($amount); $reference = __FUNCTION__ . '-' . time(); $paybox = $this->getTestPayboxDirectInstance(); $request = new Credit($card, $amount, $reference); $response = $paybox->execute($request); $this->assertResponseStatus($response, $expectedStatus); }