/**
  * @param string $sourceCode
  * @param string $targetCode
  *
  * @return ExchangeRateInterface
  */
 private function getExchangeRate($sourceCode, $targetCode)
 {
     $sourceTargetIndex = $this->createIndex($sourceCode, $targetCode);
     if (isset($this->cache[$sourceTargetIndex])) {
         return $this->cache[$sourceTargetIndex];
     }
     $targetSourceIndex = $this->createIndex($targetCode, $sourceCode);
     if (isset($this->cache[$targetSourceIndex])) {
         return $this->cache[$targetSourceIndex];
     }
     return $this->cache[$sourceTargetIndex] = $this->exchangeRateRepository->findOneWithCurrencyPair($sourceCode, $targetCode);
 }
 /**
  * @param ExchangeRateInterface $exchangeRate
  */
 private function saveExchangeRate(ExchangeRateInterface $exchangeRate)
 {
     $this->exchangeRateRepository->add($exchangeRate);
     $this->sharedStorage->set('exchange_rate', $exchangeRate);
 }
 function it_return_given_value_if_both_currencie_in_currency_pair_are_the_same(ExchangeRateRepositoryInterface $exchangeRateRepository)
 {
     $exchangeRateRepository->findOneWithCurrencyPair('GBP', 'GBP')->willReturn(null);
     $this->convert(666, 'GBP', 'GBP')->shouldReturn(666);
 }
 /**
  * @param CurrencyInterface $baseCurrency
  * @param CurrencyInterface $targetCurrency
  *
  * @return bool
  */
 private function isCurrencyPairUnique(CurrencyInterface $baseCurrency, CurrencyInterface $targetCurrency)
 {
     $exchangeRate = $this->exchangeRateRepository->findOneWithCurrencyPair($baseCurrency->getCode(), $targetCurrency->getCode());
     return null === $exchangeRate;
 }