You are here

public function CurrencyAmountTest::testProcess in Currency 8.3

@covers ::process

@depends testGetInfo

@dataProvider providerTestProcess

File

tests/src/Unit/Element/CurrencyAmountTest.php, line 247

Class

CurrencyAmountTest
@coversDefaultClass \Drupal\currency\Element\CurrencyAmount

Namespace

Drupal\Tests\currency\Unit\Element

Code

public function testProcess($default_currency_loadable) {
  $currency_code_a = $this
    ->randomMachineName();
  $currency_code_b = $this
    ->randomMachineName();
  $currency_code_c = $this
    ->randomMachineName();
  $currency = $this
    ->createMock(CurrencyInterface::class);
  $currency_options = [
    $currency_code_a => $this
      ->randomMachineName(),
    $currency_code_b => $this
      ->randomMachineName(),
    $currency_code_c => $this
      ->randomMachineName(),
  ];
  $this->formHelper
    ->expects($this
    ->atLeastOnce())
    ->method('getCurrencyOptions')
    ->willReturn($currency_options);
  $map = [
    [
      $currency_code_b,
      $default_currency_loadable ? $currency : NULL,
    ],
    [
      'XXX',
      $default_currency_loadable ? NULL : $currency,
    ],
  ];
  $this->currencyStorage
    ->expects($this
    ->atLeastOnce())
    ->method('load')
    ->willReturnMap($map);
  $limit_currency_codes = [
    $currency_code_a,
    $currency_code_b,
  ];
  $element = [
    '#default_value' => [
      'amount' => mt_rand(),
      'currency_code' => $currency_code_b,
    ],
    '#required' => TRUE,
    '#limit_currency_codes' => $limit_currency_codes,
  ] + $this->sut
    ->getInfo();
  $form_state = new FormState();
  $form = [];
  $element = $this->sut
    ->process($element, $form_state, $form);
  $this
    ->assertEmpty(array_diff($limit_currency_codes, array_keys($element['currency_code']['#options'])));
  $this
    ->assertEmpty(array_diff(array_keys($element['currency_code']['#options']), $limit_currency_codes));
}