public function getExchangeRate($sourceCurrency, $destinationCurrency) { $rates = $this->apiCall($sourceCurrency, [$destinationCurrency]); if (!isset($rates[$destinationCurrency])) { throw new FixerCurrencyConversionException("Destination currency {$destinationCurrency} not found in API response"); } return ExchangeRate::create($sourceCurrency, $destinationCurrency, $rates[$destinationCurrency]); }
public function testConvert() { $sourceCurrency = 'EUR'; $destinationCurrency = 'USD'; $mockRate = 1.23; $exchangeRate = ExchangeRate::create($sourceCurrency, $destinationCurrency, $mockRate); $rateProvider = $this->getMock(ExchangeRatesProviderInterface::class); $rateProvider->expects($this->once())->method('getExchangeRate')->will($this->returnValue($exchangeRate)); $converter = new CurrencyConverter($rateProvider); $converted = $converter->convert(100, $sourceCurrency, $destinationCurrency); $this->assertEquals(123, $converted); }
public function testGetExchangeRates() { $sourceCurrency = 'EUR'; $destinationCurrencies = ['USD', 'GBP']; $mockRate = 1.23; $exchangeRates = []; foreach ($destinationCurrencies as $destinationCurrency) { $exchangeRates[] = ExchangeRate::create($sourceCurrency, $destinationCurrency, $mockRate); } $repository = $this->getMock(ExchangeRateRepositoryInterface::class); $repository->expects($this->once())->method('findAllBySourceCurrencyAndDestinationCurrencies')->will($this->returnValue($exchangeRates)); $dbProvider = new DbExchangeRatesProvider($repository); $rates = $dbProvider->getExchangeRates($sourceCurrency, $destinationCurrencies); $this->assertInternalType('array', $rates); $this->validateExchangeRates($rates, $sourceCurrency, $destinationCurrencies); }