View source
<?php
namespace Drupal\Tests\commerce_usps\Unit;
use Drupal\commerce_shipping\Entity\ShippingMethodInterface;
use Drupal\commerce_shipping\ShippingRate;
use Drupal\commerce_usps\USPSRateRequestInternational;
use Drupal\commerce_usps\USPSShipmentInternational;
use Symfony\Component\EventDispatcher\EventDispatcher;
class USPSInternationalRateRequestTest extends USPSUnitTestBase {
public function setUp() {
parent::setUp();
$this
->setConfig([
'services' => [
1,
2,
9,
],
]);
$event_dispatcher = new EventDispatcher();
$this->uspsShipment = new USPSShipmentInternational($event_dispatcher);
$this->rateRequest = new USPSRateRequestInternational($this->uspsShipment, $event_dispatcher);
$this->rateRequest
->setConfig($this
->getConfig());
}
public function testGetRates() {
$config = $this
->getConfig();
$shipment = $this
->mockShipment([
'unit' => 'lb',
], [
'unit' => 'in',
], FALSE);
$shipping_method = $this
->prophesize(ShippingMethodInterface::class);
$shipping_method
->id()
->willReturn('123456789');
$rates = $this->rateRequest
->getRates($shipment, $shipping_method
->reveal());
$this
->assertEquals(count($config['services']), count($rates));
foreach ($rates as $rate) {
$this
->assertInstanceOf(ShippingRate::class, $rate);
$this
->assertNotEmpty($rate
->getAmount()
->getNumber());
}
}
public function testCommercialRates() {
$shipment = $this
->mockShipment([
'unit' => 'lb',
], [
'unit' => 'in',
], FALSE);
$shipping_method = $this
->prophesize(ShippingMethodInterface::class);
$shipping_method
->id()
->willReturn('123456789');
$config_update = [
'services' => [
1,
],
'rate_options' => [
'rate_class' => 'retail',
],
];
$this
->setConfig($config_update);
$config = $this
->getConfig();
$this->uspsShipment
->setConfig($config);
$this->rateRequest
->setConfig($config);
$retail_rates = $this->rateRequest
->getRates($shipment, $shipping_method
->reveal());
$config_update = [
'services' => [
1,
],
'rate_options' => [
'rate_class' => 'commercial_plus',
],
];
$this
->setConfig($config_update);
$config = $this
->getConfig();
$this->uspsShipment
->setConfig($config);
$this->rateRequest
->setConfig($config);
$commercial_rates = $this->rateRequest
->getRates($shipment, $shipping_method
->reveal());
$this
->assertEquals(count($retail_rates), count($commercial_rates));
foreach ($commercial_rates as $delta => $commercial_rate) {
$this
->assertNotEmpty($commercial_rate
->getAmount()
->getNumber());
$this
->assertLessThan($retail_rates[$delta]
->getAmount()
->getNumber(), $commercial_rate
->getAmount()
->getNumber());
}
}
public function testGetPackages() {
$shipment = $this
->mockShipment([
'unit' => 'lb',
], [
'unit' => 'in',
], FALSE);
$this->rateRequest
->setShipment($shipment);
$packages = $this->rateRequest
->getPackages();
$package = reset($packages);
$info = $package
->getPackageInfo();
$this
->assertEquals(28806, $info['OriginZip']);
$this
->assertEquals('Great Britain and Northern Ireland', $info['Country']);
$this
->assertEquals(10, $info['Pounds']);
$this
->assertEquals(0, $info['Ounces']);
$this
->assertEquals('RECTANGULAR', $info['Container']);
$this
->assertEquals('REGULAR', $info['Size']);
$this
->assertEquals(3, $info['Width']);
$this
->assertEquals(10, $info['Length']);
$this
->assertEquals(10, $info['Height']);
$this
->assertEquals(0, $info['Girth']);
$this
->assertEquals("True", $info['Machinable']);
}
}