public function ShipmentTest::testShipment in Commerce Shipping 8.2
@covers ::getOrder @covers ::getOrderId @covers ::getPackageType @covers ::setPackageType @covers ::getShippingMethod @covers ::getShippingMethodId @covers ::setShippingMethod @covers ::getShippingService @covers ::setShippingService @covers ::getShippingProfile @covers ::setShippingProfile @covers ::getTitle @covers ::setTitle @covers ::getItems @covers ::setItems @covers ::hasItems @covers ::addItem @covers ::removeItem @covers ::getTotalQuantity @covers ::getTotalDeclaredValue @covers ::getWeight @covers ::setWeight @covers ::getOriginalAmount @covers ::setOriginalAmount @covers ::getAmount @covers ::setAmount @covers ::getAdjustments @covers ::setAdjustments @covers ::addAdjustment @covers ::removeAdjustment @covers ::getAdjustedAmount @covers ::getTrackingCode @covers ::setTrackingCode @covers ::getState @covers ::getData @covers ::setData @covers ::getCreatedTime @covers ::setCreatedTime @covers ::getShippedTime @covers ::setShippedTime @covers ::recalculateWeight
File
- tests/
src/ Kernel/ Entity/ ShipmentTest.php, line 71
Class
- ShipmentTest
- Tests the Shipment entity.
Namespace
Drupal\Tests\commerce_shipping\Kernel\EntityCode
public function testShipment() {
$user = $this
->createUser([
'mail' => $this
->randomString() . '@example.com',
]);
/** @var \Drupal\commerce_order\Entity\OrderInterface $order */
$order = Order::create([
'type' => 'default',
'state' => 'completed',
'mail' => $user
->getEmail(),
'uid' => $user
->id(),
'store_id' => $this->store
->id(),
]);
$order
->save();
$order = $this
->reloadEntity($order);
/** @var \Drupal\commerce_shipping\Entity\ShippingMethodInterface $shipping_method */
$shipping_method = ShippingMethod::create([
'name' => $this
->randomString(),
'status' => 1,
]);
$shipping_method
->save();
$shipping_method = $this
->reloadEntity($shipping_method);
/** @var \Drupal\profile\Entity\ProfileInterface $profile */
$profile = Profile::create([
'type' => 'customer',
]);
$profile
->save();
$profile = $this
->reloadEntity($profile);
$shipment = Shipment::create([
'type' => 'default',
'state' => 'ready',
'order_id' => $order
->id(),
'title' => 'Shipment',
'amount' => new Price('12.00', 'USD'),
]);
$this
->assertEquals($order, $shipment
->getOrder());
$this
->assertEquals($order
->id(), $shipment
->getOrderId());
$package_type_manager = $this->container
->get('plugin.manager.commerce_package_type');
$package_type = $package_type_manager
->createInstance('custom_box');
$shipment
->setPackageType($package_type);
$this
->assertEquals($package_type, $shipment
->getPackageType());
$shipment
->setShippingMethod($shipping_method);
$this
->assertEquals($shipping_method, $shipment
->getShippingMethod());
$this
->assertEquals($shipping_method
->id(), $shipment
->getShippingMethodId());
$shipping_service = $this
->randomString();
$shipment
->setShippingService($shipping_service);
$this
->assertEquals($shipping_service, $shipment
->getShippingService());
$shipment
->setShippingProfile($profile);
$this
->assertEquals($profile, $shipment
->getShippingProfile());
$shipment
->setTitle('Shipment #1');
$this
->assertEquals('Shipment #1', $shipment
->getTitle());
$items = [];
$items[] = new ShipmentItem([
'order_item_id' => 10,
'title' => 'T-shirt (red, large)',
'quantity' => 2,
'weight' => new Weight('40', 'kg'),
'declared_value' => new Price('30', 'USD'),
]);
$items[] = new ShipmentItem([
'order_item_id' => 10,
'title' => 'T-shirt (blue, large)',
'quantity' => 2,
'weight' => new Weight('30', 'kg'),
'declared_value' => new Price('30', 'USD'),
]);
$shipment
->addItem($items[0]);
$shipment
->addItem($items[1]);
$this
->assertTrue($shipment
->hasItems());
$this
->assertEquals($items, $shipment
->getItems());
$shipment
->removeItem($items[0]);
$this
->assertEquals([
$items[1],
], $shipment
->getItems());
$shipment
->setItems($items);
$this
->assertEquals($items, $shipment
->getItems());
$this
->assertEquals('4.00', $shipment
->getTotalQuantity());
$this
->assertEquals(new Price('60', 'USD'), $shipment
->getTotalDeclaredValue());
$calculated_weight = new Weight('70', 'kg');
$this
->assertEquals($calculated_weight, $shipment
->getWeight()
->convert('kg'));
$new_weight = new Weight('4', 'kg');
$shipment
->setWeight($new_weight);
$this
->assertEquals($new_weight, $shipment
->getWeight());
$original_amount = new Price('15.00', 'USD');
$shipment
->setOriginalAmount($original_amount);
$this
->assertEquals($original_amount, $shipment
->getOriginalAmount());
$amount = new Price('10.00', 'USD');
$shipment
->setAmount($amount);
$this
->assertEquals($amount, $shipment
->getAmount());
$adjustments = [];
$adjustments[] = new Adjustment([
'type' => 'custom',
'label' => '10% off',
'amount' => new Price('-1.00', 'USD'),
'locked' => FALSE,
]);
$adjustments[] = new Adjustment([
'type' => 'fee',
'label' => 'Random fee',
'amount' => new Price('2.00', 'USD'),
]);
$shipment
->addAdjustment($adjustments[0]);
$shipment
->addAdjustment($adjustments[1]);
$this
->assertEquals($adjustments, $shipment
->getAdjustments());
$shipment
->removeAdjustment($adjustments[0]);
$this
->assertEquals([
$adjustments[1],
], $shipment
->getAdjustments());
$shipment
->setAdjustments($adjustments);
$this
->assertEquals($adjustments, $shipment
->getAdjustments());
$this
->assertEquals(new Price('11.00', 'USD'), $shipment
->getAdjustedAmount());
$this
->assertEquals(new Price('9.00', 'USD'), $shipment
->getAdjustedAmount([
'custom',
]));
$this
->assertEquals(new Price('12.00', 'USD'), $shipment
->getAdjustedAmount([
'fee',
]));
$tracking_code = $this
->randomString();
$shipment
->setTrackingCode($tracking_code);
$this
->assertEquals($tracking_code, $shipment
->getTrackingCode());
$this
->assertEquals('ready', $shipment
->getState()->value);
$this
->assertEquals('default', $shipment
->getData('test', 'default'));
$shipment
->setData('test', 'value');
$this
->assertEquals('value', $shipment
->getData('test', 'default'));
$shipment
->setCreatedTime(635879700);
$this
->assertEquals(635879700, $shipment
->getCreatedTime());
$shipment
->setShippedTime(635879800);
$this
->assertEquals(635879800, $shipment
->getShippedTime());
$shipment
->save();
$order
->set('shipments', [
$shipment,
]);
$order
->addAdjustment(new Adjustment([
'type' => 'shipping',
'label' => t('Shipping'),
'amount' => $shipment
->getAmount(),
'source_id' => $shipment
->id(),
]));
// Transfer the shipment adjustments to the order, to ensure they're
// cleared on destruct() after deleting the shipment.
foreach ($shipment
->getAdjustments() as $adjustment) {
$order
->addAdjustment($adjustment);
}
// Add a random adjustment that isn't related to a shipment, to ensure it's
// kept after the shipments are cleared.
$order
->addAdjustment(new Adjustment([
'type' => 'custom',
'label' => t('Custom'),
'amount' => new Price('12', 'USD'),
'locked' => FALSE,
]));
$order
->save();
$order = $this
->reloadEntity($order);
$this
->assertCount(4, $order
->getAdjustments());
$this
->assertCount(1, $order
->get('shipments')
->referencedEntities());
$shipment
->delete();
// The order shipments are cleared on destruct by the shipment subscriber.
$this->container
->get('commerce_shipping.shipment_subscriber')
->destruct();
$order = $this
->reloadEntity($order);
$adjustments = $order
->getAdjustments();
$this
->assertCount(1, $adjustments);
$this
->assertEquals(new Adjustment([
'type' => 'custom',
'label' => t('Custom'),
'amount' => new Price('12', 'USD'),
'locked' => FALSE,
]), reset($adjustments));
$this
->assertCount(0, $order
->get('shipments')
->referencedEntities());
}