You are here

public function PriceListItemTest::testDuplicate in Commerce Pricelist 8.2

Tests duplicating a price list item.

File

tests/src/Functional/PriceListItemTest.php, line 155

Class

PriceListItemTest
Tests the price list item UI.

Namespace

Drupal\Tests\commerce_pricelist\Functional

Code

public function testDuplicate() {
  $price_list_item = $this
    ->createEntity('commerce_pricelist_item', [
    'type' => 'commerce_product_variation',
    'price_list_id' => $this->priceList
      ->id(),
    'purchasable_entity' => $this->firstVariation
      ->id(),
    'quantity' => '10',
    'price' => new Price('50', 'USD'),
  ]);
  $this
    ->drupalGet($price_list_item
    ->toUrl('duplicate-form'));
  $this
    ->assertSession()
    ->pageTextContains('Duplicate Red shirt: $50.00');
  $this
    ->submitForm([
    'quantity[0][value]' => '20',
    'price[0][number]' => 25,
  ], 'Save');
  $this
    ->assertSession()
    ->pageTextContains('Saved the Red shirt: $25.00 price.');
  \Drupal::service('entity_type.manager')
    ->getStorage('commerce_pricelist_item')
    ->resetCache([
    $price_list_item
      ->id(),
  ]);

  // Confirm that the original price list item is unchanged.
  $price_list_item = PriceListItem::load(1);
  $this
    ->assertEquals($this->priceList
    ->id(), $price_list_item
    ->getPriceListId());
  $this
    ->assertEquals($this->firstVariation
    ->id(), $price_list_item
    ->getPurchasableEntityId());
  $this
    ->assertEquals('10', $price_list_item
    ->getQuantity());
  $this
    ->assertEquals(new Price('50', 'USD'), $price_list_item
    ->getPrice());

  // Confirm that the new price list item has the expected data.
  $price_list_item = PriceListItem::load(2);
  $this
    ->assertEquals($this->priceList
    ->id(), $price_list_item
    ->getPriceListId());
  $this
    ->assertEquals($this->firstVariation
    ->id(), $price_list_item
    ->getPurchasableEntityId());
  $this
    ->assertEquals('20', $price_list_item
    ->getQuantity());
  $this
    ->assertEquals(new Price('25', 'USD'), $price_list_item
    ->getPrice());
}