You are here

public function CurrencyExchangeTest::testProcess in Currency 8.3

@covers ::process @covers ::processCallback

File

tests/src/Unit/Plugin/Filter/CurrencyExchangeTest.php, line 120

Class

CurrencyExchangeTest
@coversDefaultClass \Drupal\currency\Plugin\Filter\CurrencyExchange

Namespace

Drupal\Tests\currency\Unit\Plugin\Filter

Code

public function testProcess() {
  $cache_contexts = Cache::mergeContexts([
    'baz',
    'qux',
  ]);
  $cache_tags = Cache::mergeTags([
    'foo',
    'bar',
  ]);
  $currency_code_from = 'EUR';
  $currency_code_to = 'NLG';
  $rate = '2.20371';
  $exchange_rate_provider_id = 'foo_bar';
  $exchange_rate = new ExchangeRate($currency_code_from, $currency_code_to, $rate, $exchange_rate_provider_id);
  $exchange_rate
    ->addCacheContexts($cache_contexts);
  $exchange_rate
    ->addCacheTags($cache_tags);
  $this->input
    ->expects($this
    ->any())
    ->method('parseAmount')
    ->will($this
    ->returnArgument(0));
  $this->exchangeRateProvider
    ->expects($this
    ->any())
    ->method('load')
    ->with($currency_code_from, $currency_code_to)
    ->willReturn($exchange_rate);
  $langcode = $this
    ->randomMachineName(2);
  $tokens_valid = [
    '[currency:EUR:NLG]' => '2.20371',
    '[currency:EUR:NLG:1]' => '2.20371',
    '[currency:EUR:NLG:2]' => '4.40742',
  ];
  $tokens_invalid = [
    // Missing arguments.
    '[currency]',
    '[currency:]',
    '[currency::]',
    '[currency:EUR]',
    // Invalid currency code.
    '[currency:EUR:123]',
    '[currency:123:EUR]',
    // Invalid currency code and missing argument.
    '[currency:123]',
  ];
  foreach ($tokens_valid as $token => $replacement) {
    $result = $this->sut
      ->process($token, $langcode);
    $this
      ->assertInstanceOf(FilterProcessResult::class, $result);
    $this
      ->assertSame(round($replacement, 4), round($result
      ->getProcessedText(), 4));
    $this
      ->assertSame($cache_contexts, $result
      ->getCacheContexts());
    $this
      ->assertSame($cache_tags, $result
      ->getCacheTags());
  }
  foreach ($tokens_invalid as $token) {
    $result = $this->sut
      ->process($token, $langcode);
    $this
      ->assertInstanceOf(FilterProcessResult::class, $result);
    $this
      ->assertSame($token, $result
      ->getProcessedText());
    $this
      ->assertEmpty($result
      ->getCacheContexts());
    $this
      ->assertEmpty($result
      ->getCacheTags());
  }
}