commerce_export-8.x-1.0-alpha1/tests/src/Kernel/Migrate/MigrateTestTrait.php
tests/src/Kernel/Migrate/MigrateTestTrait.php
<?php
namespace Drupal\Tests\commerce_export\Kernel\Migrate;
use Drupal\commerce_product\Entity\Product;
use Drupal\commerce_product\Entity\ProductAttribute;
use Drupal\commerce_product\Entity\ProductAttributeValue;
use Drupal\commerce_product\Entity\ProductVariation;
/**
* Helper function to test migrations.
*/
trait MigrateTestTrait {
/**
* Asserts a product attribute entity.
*
* @param string $name
* The attribute id.
* @param string $label
* The expected attribute label.
* @param string $element_type
* The expected element type of the attribute.
*/
protected function assertProductAttributeEntity($name, $label, $element_type) {
$attribute = ProductAttribute::load($name);
$this->assertInstanceOf(ProductAttribute::class, $attribute);
$this->assertSame($label, $attribute->label());
$this->assertSame($element_type, $attribute->getElementType());
}
/**
* Asserts a product attribute value entity.
*
* @param string $id
* The attribute value id.
* @param string $attribute_id
* The expected product attribute value id.
* @param string $name
* The expected name of the product attribute value.
* @param string $label
* The expected label of the product attribute value.
* @param string $weight
* The expected weight of the product attribute value.
*/
protected function assertProductAttributeValueEntity($id, $attribute_id, $name, $label, $weight) {
$attribute_value = ProductAttributeValue::load($id);
$this->assertInstanceOf(ProductAttributeValue::class, $attribute_value);
$this->assertSame($attribute_id, $attribute_value->getAttributeId());
$this->assertSame($name, $attribute_value->getName());
$this->assertSame($label, $attribute_value->label());
$this->assertSame($weight, $attribute_value->getWeight());
}
/**
* Asserts a product.
*
* @param int $id
* The product id.
* @param int $owner_id
* The uid for this billing profile.
* @param string $title
* The title of the product.
* @param string $is_published
* The published status of the product.
* @param array $store_ids
* The ids of the stores for this product.
* @param array $variations
* The variation of this product.
* @param array $terms
* An array of taxonomy field names and values.
* @param array $suggested
* An array of suggested products.
*/
public function assertProductEntity($id, $owner_id, $title, $is_published, array $store_ids, array $variations, array $terms, array $suggested) {
$product = Product::load($id);
$this->assertInstanceOf(Product::class, $product);
$this->assertSame($owner_id, $product->getOwnerId());
$this->assertSame($title, $product->getTitle());
$this->assertSame($is_published, $product->isPublished());
$this->assertSame($store_ids, $product->getStoreIds());
$this->assertSame($variations, $product->getVariationIds());
foreach ($terms as $name => $data) {
$this->assertSame($data, $product->get($name)->getValue(), "Taxonomy $name is incorrect.");
}
$this->assertSame($suggested, $product->get('field_suggested_products')->getValue());
}
/**
* Asserts a product variation.
*
* @param int $id
* The product variation id.
* @param int $owner_id
* The uid for this billing profile.
* @param string $sku
* The SKU.
* @param string $price_number
* The price.
* @param string $price_currency
* The currency code.
* @param string $product_id
* The id of the product.
* @param string $variation_title
* The title.
* @param string $variation_bundle
* The order item type.
* @param string $variation_created_time
* The title.
* @param string $variation_changed_time
* The order item type.
* @param array $attributes
* Array of attribute names and id.
* @param array $files
* Array of file information.
*/
public function assertProductVariationEntity($id, $owner_id, $sku, $price_number, $price_currency, $product_id, $variation_title, $variation_bundle, $variation_created_time, $variation_changed_time, array $attributes, array $files) {
$variation = ProductVariation::load($id);
$this->assertInstanceOf(ProductVariation::class, $variation);
$this->assertSame($owner_id, $variation->getOwnerId());
$this->assertSame($sku, $variation->getSku());
$this->assertSame($price_number, $variation->getPrice()->getNumber());
$this->assertSame($price_currency, $variation->getPrice()
->getCurrencyCode());
$this->assertSame($product_id, $variation->getProductId());
$this->assertSame($variation_title, $variation->getTitle());
$this->assertSame($variation_bundle, $variation->getOrderItemTypeId());
if ($variation_created_time != NULL) {
$this->assertSame($variation_created_time, $variation->getCreatedTime());
}
if ($variation_changed_time != NULL) {
$this->assertSame($variation_changed_time, $variation->getChangedTime());
}
foreach ($attributes as $name => $data) {
if ($data) {
$this->assertSame($data['id'], $variation->getAttributeValueId($name));
$this->assertSame($data['value'], $variation->getAttributeValue($name)
->getName());
}
}
foreach ($files as $name => $data) {
if ($data) {
$this->assertSame([$data], $variation->get($name)->getValue(), "File data for $name is incorrect.");
}
else {
$this->assertSame($data, $variation->get($name)->getValue());
}
}
}
}
