You are here

public function OrderItemQuantityTest::testEvaluate in Commerce Core 8.2

::covers evaluate.

@dataProvider quantityProvider

File

modules/promotion/tests/src/Unit/Plugin/Commerce/Condition/OrderItemQuantityTest.php, line 24

Class

OrderItemQuantityTest
@coversDefaultClass \Drupal\commerce_promotion\Plugin\Commerce\Condition\OrderItemQuantity @group commerce

Namespace

Drupal\Tests\commerce_promotion\Unit\Plugin\Commerce\Condition

Code

public function testEvaluate($operator, $quantity, $given_quantity, $result) {
  $first_order_item = $this
    ->prophesize(OrderItemInterface::class);
  $first_order_item
    ->getEntityTypeId()
    ->willReturn('commerce_order_item');
  $first_order_item
    ->getQuantity()
    ->willReturn($given_quantity);
  $first_order_item = $first_order_item
    ->reveal();

  // The second order item's quantity should not be counted.
  $second_order_item = $this
    ->prophesize(OrderItemInterface::class);
  $second_order_item
    ->getEntityTypeId()
    ->willReturn('commerce_order_item');
  $second_order_item
    ->getQuantity()
    ->willReturn('1000');
  $second_order_item = $second_order_item
    ->reveal();
  $condition = $this
    ->prophesize(ConditionInterface::class);
  $condition
    ->evaluate($first_order_item)
    ->willReturn(TRUE);
  $condition
    ->evaluate($second_order_item)
    ->willReturn(FALSE);
  $offer = $this
    ->prophesize(OrderItemPromotionOfferInterface::class);
  $offer
    ->getConditions()
    ->willReturn([
    $condition,
  ]);
  $offer
    ->getConditionOperator()
    ->willReturn('OR');
  $offer = $offer
    ->reveal();
  $parent_entity = $this
    ->prophesize(PromotionInterface::class);
  $parent_entity
    ->getOffer()
    ->willReturn($offer);
  $parent_entity = $parent_entity
    ->reveal();
  $condition = new OrderItemQuantity([
    'operator' => $operator,
    'quantity' => $quantity,
  ], 'order_item_quantity', [
    'entity_type' => 'commerce_order',
  ]);
  $condition
    ->setParentEntity($parent_entity);
  $order = $this
    ->prophesize(OrderInterface::class);
  $order
    ->getEntityTypeId()
    ->willReturn('commerce_order');
  $order
    ->getItems()
    ->willReturn([
    $first_order_item,
    $second_order_item,
  ]);
  $order = $order
    ->reveal();
  $this
    ->assertEquals($result, $condition
    ->evaluate($order));
}