public function MultipleCartFormsTest::testMultipleRenderedProductsWithTitleWidget in Commerce Core 8.2
Tests that a page with multiple add to cart forms works properly.
File
- modules/
cart/ tests/ src/ FunctionalJavascript/ MultipleCartFormsTest.php, line 195  
Class
- MultipleCartFormsTest
 - Tests pages with multiple products rendered with add to cart forms.
 
Namespace
Drupal\Tests\commerce_cart\FunctionalJavascriptCode
public function testMultipleRenderedProductsWithTitleWidget() {
  $order_item_form_display = EntityFormDisplay::load('commerce_order_item.default.add_to_cart');
  $order_item_form_display
    ->setComponent('purchased_entity', [
    'type' => 'commerce_product_variation_title',
  ]);
  $order_item_form_display
    ->save();
  // View of rendered products, each containing an add to cart form.
  $this
    ->drupalGet('/test-multiple-cart-forms');
  /** @var \Behat\Mink\Element\NodeElement[] $forms */
  $forms = $this
    ->getSession()
    ->getPage()
    ->findAll('css', '.commerce-order-item-add-to-cart-form');
  // Modify a single product's add to cart form.
  $current_form = $forms[2];
  $current_form
    ->fillField('quantity[0][value]', '3');
  $current_form
    ->selectFieldOption('purchased_entity[0][variation]', $this->products[2]
    ->getVariations()[1]
    ->id());
  $this
    ->assertSession()
    ->assertWaitOnAjaxRequest();
  $current_form
    ->pressButton('Add to cart');
  $this->cart = Order::load($this->cart
    ->id());
  $order_items = $this->cart
    ->getItems();
  $this
    ->assertEquals(3, $order_items[0]
    ->getQuantity());
  /** @var \Drupal\commerce_product\Entity\ProductVariationInterface $variation */
  $variation = $order_items[0]
    ->getPurchasedEntity();
  $this
    ->assertEquals($this->products[2]
    ->getVariations()[1]
    ->id(), $variation
    ->id());
  // Modify one form, but submit another.
  $current_form = $forms[0];
  $current_form
    ->fillField('quantity[0][value]', '2');
  $current_form
    ->selectFieldOption('purchased_entity[0][variation]', $this->products[0]
    ->getVariations()[2]
    ->id());
  $this
    ->assertSession()
    ->assertWaitOnAjaxRequest();
  $forms[1]
    ->selectFieldOption('purchased_entity[0][variation]', $this->products[1]
    ->getVariations()[3]
    ->id());
  $this
    ->assertSession()
    ->assertWaitOnAjaxRequest();
  $forms[1]
    ->pressButton('Add to cart');
  $this->container
    ->get('entity_type.manager')
    ->getStorage('commerce_order')
    ->resetCache([
    $this->cart
      ->id(),
  ]);
  $this->cart = Order::load($this->cart
    ->id());
  $order_items = $this->cart
    ->getItems();
  $this
    ->assertEquals(1, $order_items[1]
    ->getQuantity());
  /** @var \Drupal\commerce_product\Entity\ProductVariationInterface $variation */
  $variation = $order_items[1]
    ->getPurchasedEntity();
  $this
    ->assertEquals($this->products[1]
    ->getVariations()[3]
    ->id(), $variation
    ->id());
}