commerce-8.x-2.8/modules/price/tests/src/Unit/PriceResolvingTest.php

modules/price/tests/src/Unit/PriceResolvingTest.php
<?php

namespace Drupal\Tests\commerce_price\Unit;

use Drupal\commerce\Context;
use Drupal\commerce_price\Price;
use Drupal\commerce_price\Resolver\ChainPriceResolver;
use Drupal\commerce_price\Resolver\DefaultPriceResolver;
use Drupal\commerce_price_test\TestPriceResolver;
use Drupal\commerce_product\Entity\ProductVariationInterface;
use Drupal\commerce_store\Entity\StoreInterface;
use Drupal\Core\DependencyInjection\ContainerBuilder;
use Drupal\Tests\UnitTestCase;
use Drupal\user\UserInterface;

/**
 * Tests price resolving.
 *
 * @group commerce
 */
class PriceResolvingTest extends UnitTestCase {

  /**
   * {@inheritdoc}
   */
  public static $modules = [
    'system',
    'commerce',
    'commerce_price',
    'commerce_price_test',
  ];

  /**
   * Tests price revolving.
   *
   * ::covers addResolver
   * ::covers getResolvers
   * ::covers resolve.
   */
  public function testResolver() {
    $container = new ContainerBuilder();
    $chain_resolver = new ChainPriceResolver();
    $container->set('commerce_price.default_price_resolver', new DefaultPriceResolver());
    $container->set('commerce_price.test_price_resolver', new TestPriceResolver());
    // Mimic how the container would add the services.
    // @see \Drupal\Core\DependencyInjection\Compiler\TaggedHandlersPass::process
    $resolvers = [
      'commerce_price.default_price_resolver' => -100,
      'commerce_price.test_price_resolver' => 100,
    ];
    arsort($resolvers, SORT_NUMERIC);
    foreach ($resolvers as $id => $priority) {
      $chain_resolver->addResolver($container->get($id));
    }

    $mock_user = $this->getMock(UserInterface::class);
    $mock_store = $this->getMock(StoreInterface::class);
    $mock_context = new Context($mock_user, $mock_store);

    $mock_variant = $this->getMock(ProductVariationInterface::class);
    $mock_variant->expects($this->once())->method('getSku')->willReturn('TEST_MOCK');
    $mock_variant->expects($this->exactly(2))->method('getPrice')->willReturn(new Price('20.00', 'USD'));
    $resolved_price = $chain_resolver->resolve($mock_variant, 1, $mock_context);
    $this->assertEquals($resolved_price, new Price('17.00', 'USD'));

    $mock_variant = $this->getMock(ProductVariationInterface::class);
    $mock_variant->expects($this->once())->method('getSku')->willReturn('MOCK');
    $mock_variant->expects($this->exactly(1))->method('getPrice')->willReturn(new Price('20.00', 'USD'));
    $resolved_price = $chain_resolver->resolve($mock_variant, 1, $mock_context);
    $this->assertEquals($resolved_price, new Price('20.00', 'USD'));
  }

}

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

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