commerce_funds-8.x-1.7/tests/src/Unit/Services/FeesManagerTest.php

tests/src/Unit/Services/FeesManagerTest.php
<?php

namespace Drupal\Tests\commerce_funds\Unit\Services;

use Drupal\Core\DependencyInjection\ContainerBuilder;
use Drupal\Core\Field\EntityReferenceFieldItemList;
use Drupal\Tests\UnitTestCase;
use Drupal\commerce_order\Entity\Order;
use Drupal\commerce_order\Entity\OrderItemInterface;
use Drupal\commerce_payment\PaymentOption;
use Drupal\commerce_price\Price;

/**
 * @coversDefaultClass \Drupal\commerce_funds\FeesManager
 *  Using TestFeesManager as class to override
 *  getExchangeRates() function.
 *
 * @group commerce_funds
 */
class FeesManagerTest extends UnitTestCase {

  /**
   * The fees manager.
   *
   * @var \Drupal\commerce_funds\FeesManagerInterface
   */
  protected $feesManager;

  /**
   * {@inheritdoc}
   */
  public function setUp() : Void {
    parent::setUp();

    $configFactory = $this->getConfigFactoryStub([
      'commerce_funds.settings' => [
        'fees' => [
          'deposit_manual_rate' => '1',
          'deposit_manual_fixed' => '5',
          'transfer_rate' => '2.5',
          'transfer_fixed' => '5',
          'escrow_rate' => '1.1',
          'escrow_fixed' => '5',
        ],
      ],
    ]);
    $container = new ContainerBuilder();
    $container->set('config.factory', $configFactory);
    \Drupal::setContainer($container);

    $entityTypeManager = $this->createMock('Drupal\Core\Entity\EntityTypeManagerInterface');
    $paymentOptionsBuilder = $this->createMock('Drupal\commerce_payment\PaymentOptionsBuilderInterface');
    $options = new PaymentOption([
      'id' => 'manual',
      'label' => 'Manual',
      'payment_gateway_id' => 'manual',
    ]);
    $paymentOptionsBuilder->method('buildOptions')
      ->willReturn((array) $options);
    $paymentOptionsBuilder->method('selectDefaultOption')
      ->willReturn($options);

    $productManager = $this->createMock('Drupal\commerce_funds\ProductManager');

    $account = $this->createMock('Drupal\Core\Session\AccountProxyInterface');

    $moduleHandler = $this->createMock('Drupal\Core\Extension\ModuleHandlerInterface');

    // We use TestFeesManager here to override
    // getExchangeRates function so we can return
    // predictable values.
    $this->feesManager = new TestFeesManager($configFactory, $entityTypeManager, $account, $moduleHandler, $paymentOptionsBuilder, $productManager);
  }

  /**
   * Covers calculateOrderFee.
   */
  public function testCalculateOrderFee() {
    // Expected values for rates and fixed.
    $amounts = [
      'rates' => [
        'value' => 600,
        'fee' => 6,
      ],
      'fixed' => [
        'value' => 100,
        'fee' => 5,
      ],
    ];

    // For rates fees > fixed fees,
    // and rates fees < fixed fees.
    foreach ($amounts as $amount) {
      $payment_gateway = $this->prophesize(EntityReferenceFieldItemList::class);
      $payment_gateway->getString()->willReturn('manual');
      $payment_gateway = $payment_gateway->reveal();
      $item = $this->prophesize(OrderItemInterface::class);
      $item->getTotalPrice()->willReturn(new Price($amount['value'], 'USD'));
      $item = $item->reveal();
      $order = $this->prophesize(Order::class);
      $order->get('payment_gateway')->willReturn($payment_gateway);
      $order->getItems()->willReturn([$item]);
      $order = $order->reveal();
      $this->assertEquals($amount['fee'], $this->feesManager->calculateOrderFee($order));
    }

  }

  /**
   * Covers calculateOrderFee.
   */
  public function testCalculateTransactionFee() {
    $currency_code = 'USD';
    $existing_types = [
      'transfer' => [
        'rates' => [
          'value' => 444,
          'fee' => 11.1,
        ],
        'fixed' => [
          'value' => 100,
          'fee' => 5,
        ],
      ],
      'escrow' => [
        'rates' => [
          'value' => 555,
          'fee' => 6.11,
        ],
        'fixed' => [
          'value' => 100,
          'fee' => 5,
        ],
      ],
    ];

    foreach ($existing_types as $type => $amounts) {
      foreach ($amounts as $amount) {
        $this->assertEquals($amount['fee'] + $amount['value'], $this->feesManager->calculateTransactionFee($amount['value'], $currency_code, $type)['net_amount']);
        $this->assertEquals($amount['fee'], $this->feesManager->calculateTransactionFee($amount['value'], $currency_code, $type)['fee']);
      }
    }

    // No fee set.
    $non_existing_types = ['withdrawal_request', 'payment', 'conversion'];
    foreach ($non_existing_types as $type) {
      $this->assertEquals(10, $this->feesManager->calculateTransactionFee(10, $currency_code, $type)['net_amount']);
      $this->assertEquals(0, $this->feesManager->calculateTransactionFee(10, $currency_code, $type)['fee']);
    }
  }

  /**
   * Covers convertCurrencyAmount.
   */
  public function testConvertCurrencyAmount() {
    $this->assertEquals(120, $this->feesManager->convertCurrencyAmount(100, 'USD', 'EUR')['new_amount']);
    $this->assertEquals('1.2', $this->feesManager->convertCurrencyAmount('1.2', 'USD', 'EUR')['rate']);
    $this->assertEquals(80, $this->feesManager->convertCurrencyAmount(100, 'EUR', 'USD')['new_amount']);
    $this->assertEquals('0.8', $this->feesManager->convertCurrencyAmount('0.8', 'EUR', 'USD')['rate']);
  }

}

Главная | Обратная связь

drupal hosting | друпал хостинг | it patrol .inc