commerce-8.x-2.8/modules/order/tests/src/Kernel/AdjustmentTransformerTest.php
modules/order/tests/src/Kernel/AdjustmentTransformerTest.php
<?php namespace Drupal\Tests\commerce_order\Kernel; use Drupal\commerce_order\Adjustment; use Drupal\commerce_price\Price; use Drupal\Tests\commerce\Kernel\CommerceKernelTestBase; /** * Tests the adjustment transformer. * * @coversDefaultClass \Drupal\commerce_order\AdjustmentTransformer * * @group commerce */ class AdjustmentTransformerTest extends CommerceKernelTestBase { /** * The adjustment transformer. * * @var \Drupal\commerce_order\AdjustmentTransformerInterface */ protected $adjustmentTransformer; /** * Modules to enable. * * @var array */ public static $modules = [ 'entity_reference_revisions', 'path', 'profile', 'state_machine', 'commerce_order', ]; /** * {@inheritdoc} */ protected function setUp() { parent::setUp(); $this->adjustmentTransformer = $this->container->get('commerce_order.adjustment_transformer'); } /** * Tests adjustment combining. * * @covers ::combineAdjustments */ public function testCombining() { $adjustments = []; // Adjustments 0 and 2 are supposed to be combined. $adjustments[0] = new Adjustment([ 'type' => 'tax', 'label' => 'VAT', 'amount' => new Price('10', 'USD'), 'source_id' => 'us_vat|default|standard', 'percentage' => '0.1', ]); $adjustments[1] = new Adjustment([ 'type' => 'promotion', 'label' => '20% off', 'amount' => new Price('20', 'USD'), 'percentage' => '0.2', ]); $adjustments[2] = new Adjustment([ 'type' => 'tax', 'label' => 'VAT', 'amount' => new Price('3', 'USD'), 'source_id' => 'us_vat|default|standard', 'percentage' => '0.1', ]); $adjustments[3] = new Adjustment([ 'type' => 'tax', 'label' => 'VAT', 'amount' => new Price('4', 'USD'), 'source_id' => 'us_vat|default|reduced', 'percentage' => '0.1', ]); $combined_adjustments = []; $combined_adjustments[0] = new Adjustment([ 'type' => 'tax', 'label' => 'VAT', 'amount' => new Price('13', 'USD'), 'source_id' => 'us_vat|default|standard', 'percentage' => '0.1', ]); $combined_adjustments[1] = new Adjustment([ 'type' => 'promotion', 'label' => '20% off', 'amount' => new Price('20', 'USD'), 'percentage' => '0.2', ]); $combined_adjustments[2] = new Adjustment([ 'type' => 'tax', 'label' => 'VAT', 'amount' => new Price('4', 'USD'), 'source_id' => 'us_vat|default|reduced', 'percentage' => '0.1', ]); $result = $this->adjustmentTransformer->combineAdjustments($adjustments); $this->assertCount(3, $result); $this->assertEquals($combined_adjustments, $result); } /** * Tests adjustment sorting. * * @covers ::sortAdjustments */ public function testSorting() { $first_adjustment = new Adjustment([ 'type' => 'tax', 'label' => 'VAT', 'amount' => new Price('10', 'USD'), 'percentage' => '0.1', ]); $second_adjustment = new Adjustment([ 'type' => 'promotion', 'label' => '20% off', 'amount' => new Price('20', 'USD'), 'percentage' => '0.2', ]); $adjustments = $this->adjustmentTransformer->sortAdjustments([$first_adjustment, $second_adjustment]); $this->assertEquals([$second_adjustment, $first_adjustment], $adjustments); } /** * Tests adjustment rounding. * * @covers ::roundAdjustments * @covers ::roundAdjustment */ public function testRounding() { $first_adjustment = new Adjustment([ 'type' => 'tax', 'label' => 'VAT', 'amount' => new Price('10.489', 'USD'), 'percentage' => '0.1', ]); $second_adjustment = new Adjustment([ 'type' => 'promotion', 'label' => '20% off', 'amount' => new Price('20.555', 'USD'), ]); $first_rounded_adjustment = new Adjustment([ 'type' => 'tax', 'label' => 'VAT', 'amount' => new Price('10.49', 'USD'), 'percentage' => '0.1', ]); $second_rounded_adjustment = new Adjustment([ 'type' => 'promotion', 'label' => '20% off', 'amount' => new Price('20.56', 'USD'), ]); $second_rounded_down_adjustment = new Adjustment([ 'type' => 'promotion', 'label' => '20% off', 'amount' => new Price('20.55', 'USD'), ]); $adjustments = $this->adjustmentTransformer->roundAdjustments([$first_adjustment, $second_adjustment]); $this->assertEquals([$first_rounded_adjustment, $second_rounded_adjustment], $adjustments); $adjustment = $this->adjustmentTransformer->roundAdjustment($first_adjustment); $this->assertEquals($first_rounded_adjustment, $adjustment); $adjustment = $this->adjustmentTransformer->roundAdjustment($second_adjustment); $this->assertEquals($second_rounded_adjustment, $adjustment); // Confirm that the $mode is passed along. $adjustments = $this->adjustmentTransformer->roundAdjustments([$second_adjustment], PHP_ROUND_HALF_DOWN); $this->assertEquals([$second_rounded_down_adjustment], $adjustments); $adjustment = $this->adjustmentTransformer->roundAdjustment($second_adjustment, PHP_ROUND_HALF_DOWN); $this->assertEquals($second_rounded_down_adjustment, $adjustment); } }