commerce_shipping-8.x-2.0-rc2/tests/src/Unit/Packer/DefaultPackerTest.php

tests/src/Unit/Packer/DefaultPackerTest.php
<?php

namespace Drupal\Tests\commerce_shipping\Unit\Packer;

use Drupal\Core\Entity\EntityStorageInterface;
use Drupal\Core\Entity\EntityTypeManagerInterface;
use Drupal\Core\Field\FieldItemListInterface;
use Drupal\Core\StringTranslation\TranslatableMarkup;
use Drupal\Core\StringTranslation\TranslationInterface;
use Drupal\Tests\UnitTestCase;
use Drupal\commerce\PurchasableEntityInterface;
use Drupal\commerce_order\Entity\OrderInterface;
use Drupal\commerce_order\Entity\OrderItemInterface;
use Drupal\commerce_order\Entity\OrderTypeInterface;
use Drupal\commerce_price\Price;
use Drupal\commerce_shipping\Packer\DefaultPacker;
use Drupal\commerce_shipping\ProposedShipment;
use Drupal\commerce_shipping\ShipmentItem;
use Drupal\physical\Plugin\Field\FieldType\MeasurementItem;
use Drupal\physical\Weight;
use Drupal\profile\Entity\ProfileInterface;
use Prophecy\Argument;

/**
 * @coversDefaultClass \Drupal\commerce_shipping\Packer\DefaultPacker
 * @group commerce_shipping
 */
class DefaultPackerTest extends UnitTestCase {

  /**
   * The default packer.
   *
   * @var \Drupal\commerce_shipping\Packer\DefaultPacker
   */
  protected $packer;

  /**
   * {@inheritdoc}
   */
  protected function setUp(): void {
    parent::setUp();

    $order_type = $this->prophesize(OrderTypeInterface::class);
    $order_type->getThirdPartySetting('commerce_shipping', 'shipment_type')->willReturn('default');
    $order_type_storage = $this->prophesize(EntityStorageInterface::class);
    $order_type_storage->load('default')->willReturn($order_type->reveal());
    $entity_type_manager = $this->prophesize(EntityTypeManagerInterface::class);
    $entity_type_manager->getStorage('commerce_order_type')->willReturn($order_type_storage->reveal());
    $string_translation = $this->prophesize(TranslationInterface::class);
    $string_translation->translateString(Argument::type(TranslatableMarkup::class))
      ->willReturn('Shipment #1');

    $this->packer = new DefaultPacker($entity_type_manager->reveal(), $string_translation->reveal());
  }

  /**
   * ::covers pack.
   */
  public function testPack() {
    $order_items = [];
    $first_order_item = $this->prophesize(OrderItemInterface::class);
    $first_order_item->id()->willReturn(2001);
    $first_order_item->getUnitPrice()->willReturn(NULL);
    $first_order_item->getPurchasedEntity()->willReturn(NULL);
    $first_order_item->getQuantity()->willReturn(1);
    $order_items[] = $first_order_item->reveal(1);

    $weight_item = $this->prophesize(MeasurementItem::class);
    $weight_item->toMeasurement()->willReturn(new Weight('10', 'kg'));

    $weight_list = $this->prophesize(FieldItemListInterface::class);
    $weight_list->isEmpty()->willReturn(FALSE);
    $weight_list->first()->willReturn($weight_item->reveal());

    $purchased_entity = $this->prophesize(PurchasableEntityInterface::class);
    $purchased_entity->id()->willReturn(3001);
    $purchased_entity->getEntityTypeId()->willReturn('commerce_product_variation');
    $purchased_entity->hasField('weight')->willReturn(TRUE);
    $purchased_entity->get('weight')->willReturn($weight_list->reveal());
    $purchased_entity = $purchased_entity->reveal();
    $second_order_item = $this->prophesize(OrderItemInterface::class);
    $second_order_item->id()->willReturn(2002);
    $second_order_item->getTitle()->willReturn('T-shirt (red, small)');
    $second_order_item->getPurchasedEntity()->willReturn($purchased_entity);
    $second_order_item->getUnitPrice()->willReturn(new Price('15', 'USD'));
    $second_order_item->getQuantity()->willReturn(3);
    $order_items[] = $second_order_item->reveal();

    $third_order_item = $this->prophesize(OrderItemInterface::class);
    $third_order_item->id()->willReturn(2003);
    $third_order_item->getTitle()->willReturn('T-shirt (black, small)');
    $third_order_item->getUnitPrice()->willReturn(new Price('15', 'USD'));
    $third_order_item->getPurchasedEntity()->willReturn(NULL);
    $third_order_item->getQuantity()->willReturn(0);
    $order_items[] = $third_order_item->reveal();

    $order = $this->prophesize(OrderInterface::class);
    $order->bundle()->willReturn('default');
    $order->id()->willReturn(2);
    $order->getItems()->willReturn($order_items);
    $order = $order->reveal();
    $shipping_profile = $this->prophesize(ProfileInterface::class);
    $shipping_profile->id()->willReturn(3);
    $shipping_profile = $shipping_profile->reveal();

    $expected_proposed_shipment = new ProposedShipment([
      'type' => 'default',
      'order_id' => 2,
      'title' => 'Shipment #1',
      'items' => [
        new ShipmentItem([
          'order_item_id' => 2002,
          'title' => 'T-shirt (red, small)',
          'quantity' => 3,
          'weight' => new Weight('30', 'kg'),
          'declared_value' => new Price('45', 'USD'),
        ]),
      ],
      'shipping_profile' => $shipping_profile,
    ]);
    $result = $this->packer->pack($order, $shipping_profile);
    $this->assertEquals([$expected_proposed_shipment], $result);
  }

}

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

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