commerce_product_bundle-8.x-1.x-dev/tests/src/Kernel/Entity/CommerceProductBundleTest.php
tests/src/Kernel/Entity/CommerceProductBundleTest.php
<?php namespace Drupal\Tests\commerce_product_bundle\Kernel\Entity; use Drupal\commerce_price\Price; use Drupal\commerce_product\Entity\Product; use Drupal\commerce_product\Entity\ProductVariation; use Drupal\commerce_product_bundle\Entity\Productbundle; use Drupal\commerce_product_bundle\Entity\ProductBundleItem; use Drupal\field\Entity\FieldConfig; use Drupal\Tests\commerce_product_bundle\Kernel\CommerceProductBundleKernelTestBase; /** * Test the Product Bundle Item entity. * * @coversDefaultClass \Drupal\commerce_product_bundle\Entity\ProductBundle * * @group commerce_product_bundle */ class CommerceProductBundleTest extends CommerceProductBundleKernelTestBase { /** * @covers ::getTitle * @covers ::setTitle * @covers ::isPublished * @covers ::setPublished * @covers ::getCreatedTime * @covers ::setCreatedTime * @covers ::postDelete * @covers ::setBundleItems * @covers ::addBundleItem * @covers ::removeBundleItem * @covers ::getBundleItemIds * @covers ::hasBundleItem * @covers ::hasBundleItems */ public function testBundle() { $variations = []; for ($i = 1; $i <= 5; $i++) { $variation = ProductVariation::create([ 'type' => 'default', 'sku' => strtolower($this->randomMachineName()), 'title' => $this->randomString(), 'status' => $i % 2, 'uid' => $this->user->id(), ]); $variation->save(); $variations[] = $variation; } $variations = array_reverse($variations); $product = Product::create([ 'type' => 'default', 'variations' => $variations, 'uid' => $this->user->id(), ]); $product->save(); $product1 = $this->reloadEntity($product); $variations = []; for ($i = 1; $i <= 3; $i++) { $variation = ProductVariation::create([ 'type' => 'default', 'sku' => strtolower($this->randomMachineName()), 'title' => $this->randomString(), 'status' => TRUE, 'uid' => $this->user->id(), ]); $variation->save(); $variations[] = $variation; } $variations = array_reverse($variations); $product = Product::create([ 'type' => 'default', 'variations' => $variations, 'uid' => $this->user->id(), ]); $product->save(); $product2 = $this->reloadEntity($product); $bundleItem = ProductBundleItem::create([ 'type' => 'default', 'uid' => $this->user->id(), 'title' => 'testBundle1', 'status' => TRUE, ]); $bundleItem->setProduct($product1); $bundleItem->save(); $bundleItem = $this->reloadEntity($bundleItem); $bundleItem2 = ProductBundleItem::create([ 'type' => 'default', 'uid' => $this->user->id(), 'title' => 'testBundle2', 'status' => TRUE, ]); $bundleItem2->setProduct($product2); $bundleItem2->save(); $bundleItem2 = $this->reloadEntity($bundleItem2); $bundle = ProductBundle::create( [ 'type' => 'default', 'uid' => $this->user->id(), 'status' => TRUE, ]); $bundle->save(); $bundle->setTitle('My testtitle'); $this->assertEquals('My testtitle', $bundle->getTitle()); // Confirm the attached fields are there. $this->assertTrue($bundle->hasField('bundle_items')); $created_field = $bundle->getFieldDefinition('bundle_items'); $this->assertInstanceOf(FieldConfig::class, $created_field); $this->assertEquals('commerce_product_bundle_i', $created_field->getSetting('target_type')); $this->assertEquals('default:commerce_product_bundle_i', $created_field->getSetting('handler')); $this->assertTrue($bundle->hasField('stores')); $created_field = $bundle->getFieldDefinition('stores'); $this->assertInstanceOf(FieldConfig::class, $created_field); $this->assertEquals('commerce_store', $created_field->getSetting('target_type')); $this->assertEquals('default:commerce_store', $created_field->getSetting('handler')); $this->assertTrue($bundle->hasField('body')); $created_field = $bundle->getFieldDefinition('body'); $this->assertInstanceOf(FieldConfig::class, $created_field); $this->assertEquals(TRUE, $bundle->isPublished()); $bundle->setPublished(FALSE); $this->assertEquals(FALSE, $bundle->isPublished()); $bundle->setCreatedTime(635879700); $this->assertEquals(635879700, $bundle->getCreatedTime()); $bundle->setOwner($this->user); $this->assertEquals($this->user, $bundle->getOwner()); $this->assertEquals($this->user->id(), $bundle->getOwnerId()); $bundle->setOwnerId(0); $this->assertEquals(NULL, $bundle->getOwner()); $bundle->setOwnerId($this->user->id()); $this->assertEquals($this->user, $bundle->getOwner()); $this->assertEquals($this->user->id(), $bundle->getOwnerId()); $this->assertFalse($bundle->hasBundleItems()); $bundle->setBundleItems([$bundleItem]); $bundle->save(); /** @var \Drupal\commerce_product_bundle\Entity\BundleInterface $bundle */ $bundle = $this->reloadEntity($bundle); $items = $bundle->getBundleItems(); $this->assertEquals($items[0]->Id(), $bundleItem->Id()); $this->assertTrue($bundle->hasBundleItems()); $this->assertTrue($bundle->hasBundleItem($bundleItem)); $this->assertFalse($bundle->hasBundleItem($bundleItem2)); $bundle->addBundleItem($bundleItem2); $bundle->save(); /** @var \Drupal\commerce_product_bundle\Entity\BundleInterface $bundle */ $bundle = $this->reloadEntity($bundle); $items = $bundle->getBundleItems(); $ids = $bundle->getBundleItemIds(); $this->assertEquals($bundleItem->Id(), $items[0]->Id()); $this->assertEquals($bundleItem->Id(), $ids[0]); $this->assertEquals($bundleItem2->Id(), $items[1]->Id()); $this->assertEquals($bundleItem2->Id(), $ids[1]); $this->assertTrue($bundle->hasBundleItem($bundleItem2)); $test = array_map(function ($item) { /** @var \Drupal\commerce_product_bundle\Entity\BundleItemInterface $item */ $test_item = $item->getCurrentVariation(); return $test_item; }, $items); $bundle->removeBundleItem($bundleItem); $bundle->save(); /** @var \Drupal\commerce_product_bundle\Entity\BundleInterface $bundle */ $bundle = $this->reloadEntity($bundle); $items = $bundle->getBundleItems(); $this->assertEquals(1, count($items)); $this->assertEquals($bundleItem2->Id(), $items[0]->Id()); $this->assertFalse($bundle->hasBundleItem($bundleItem)); $this->assertNull($bundle->getPrice()); // 0.00 is a valid Price. Check that we don't inadvertently filter it by some // conditionals. $bundle->setPrice(new Price('0.00', 'USD')); $this->assertEquals($bundle->getPrice(), new Price('0.00', 'USD')); $bundle->setPrice(new Price('3.33', 'USD')); $this->assertEquals($bundle->getPrice(), new Price('3.33', 'USD')); $bundle->delete(); $this->assertNull(ProductBundle::load($bundle->Id())); $this->assertNull(ProductBundleItem::load($bundleItem2->Id())); } }