You are here

public function PromotionCartTest::testPromotionCart in Commerce Core 8.2

Tests adding a product with a promotion to the cart.

File

modules/promotion/tests/src/Kernel/PromotionCartTest.php, line 42

Class

PromotionCartTest
Tests the integration between promotions and carts.

Namespace

Drupal\Tests\commerce_promotion\Kernel

Code

public function testPromotionCart() {
  $variation = ProductVariation::create([
    'type' => 'default',
    'sku' => strtolower($this
      ->randomMachineName()),
    'price' => [
      'number' => '10.00',
      'currency_code' => 'USD',
    ],
  ]);
  $variation
    ->save();
  $product = Product::create([
    'type' => 'default',
    'title' => 'My product',
    'variations' => [
      $variation,
    ],
  ]);
  $product
    ->save();
  $promotion = Promotion::create([
    'name' => 'Promotion test',
    'order_types' => [
      'default',
    ],
    'stores' => [
      $this->store
        ->id(),
    ],
    'offer' => [
      'target_plugin_id' => 'order_percentage_off',
      'target_plugin_configuration' => [
        'percentage' => '0.10',
      ],
    ],
    'start_date' => '2017-01-01',
    'status' => TRUE,
  ]);
  $promotion
    ->save();
  $user = $this
    ->createUser();

  /** @var \Drupal\commerce_order\Entity\OrderInterface $cart_order */
  $cart = $this->cartProvider
    ->createCart('default', $this->store, $user);
  $this->cartManager
    ->addEntity($cart, $variation);
  $this
    ->assertEquals(1, count($cart
    ->collectAdjustments()));
  $this
    ->assertEquals(new Price('9.00', 'USD'), $cart
    ->getTotalPrice());

  // Disable the promotion.
  $promotion
    ->setEnabled(FALSE);
  $promotion
    ->save();
  $this->container
    ->get('commerce_order.order_refresh')
    ->refresh($cart);
  $this
    ->assertEmpty($cart
    ->getAdjustments());
  $this
    ->assertEquals(new Price('10.00', 'USD'), $cart
    ->getTotalPrice());
}