You are here

public function ShippingMethodTest::testShippingMethodEditing in Commerce Shipping 8.2

Tests editing a shipping method.

File

tests/src/FunctionalJavascript/ShippingMethodTest.php, line 63

Class

ShippingMethodTest
Tests the shipping method UI.

Namespace

Drupal\Tests\commerce_shipping\FunctionalJavascript

Code

public function testShippingMethodEditing() {
  $shipping_method = $this
    ->createEntity('commerce_shipping_method', [
    'name' => $this
      ->randomMachineName(8),
    'status' => TRUE,
    'plugin' => [
      'target_plugin_id' => 'flat_rate',
      'target_plugin_configuration' => [
        'rate_label' => 'Test label',
        'rate_amount' => [
          'number' => '10.00',
          'currency_code' => 'USD',
        ],
      ],
    ],
  ]);

  /** @var \Drupal\commerce_shipping\Plugin\Commerce\ShippingMethod\ShippingMethodInterface $plugin */
  $plugin = $shipping_method
    ->getPlugin();
  $this
    ->assertEquals([
    'number' => '10.00',
    'currency_code' => 'USD',
  ], $plugin
    ->getConfiguration()['rate_amount']);
  $this
    ->assertEquals('shipment_default', $plugin
    ->getConfiguration()['workflow']);
  $this
    ->drupalGet($shipping_method
    ->toUrl('edit-form'));
  $this
    ->assertSession()
    ->fieldExists('name[0][value]');
  $new_shipping_method_name = $this
    ->randomMachineName(8);

  // Test that finalize transition is required.
  $edit = [
    'name[0][value]' => $new_shipping_method_name,
    'plugin[0][target_plugin_configuration][flat_rate][rate_amount][number]' => '20.00',
    'plugin[0][target_plugin_configuration][flat_rate][workflow]' => 'shipment_missing_finalize',
  ];
  $this
    ->submitForm($edit, 'Save');
  $this
    ->assertSession()
    ->pageTextContains(t('The Missing finalize workflow does not have a "Finalize" transition.'));

  // Test that cancel transition is required.
  $edit = [
    'name[0][value]' => $new_shipping_method_name,
    'plugin[0][target_plugin_configuration][flat_rate][rate_amount][number]' => '20.00',
    'plugin[0][target_plugin_configuration][flat_rate][workflow]' => 'shipment_missing_cancel',
  ];
  $this
    ->submitForm($edit, 'Save');
  $this
    ->assertSession()
    ->pageTextContains(t('The Missing cancel workflow does not have a "Cancel" transition.'));
  $edit = [
    'name[0][value]' => $new_shipping_method_name,
    'plugin[0][target_plugin_configuration][flat_rate][rate_amount][number]' => '20.00',
    'plugin[0][target_plugin_configuration][flat_rate][workflow]' => 'shipment_good_test',
  ];
  $this
    ->submitForm($edit, 'Save');
  $this->container
    ->get('entity_type.manager')
    ->getStorage('commerce_shipping_method')
    ->resetCache([
    $shipping_method
      ->id(),
  ]);
  $shipping_method_changed = ShippingMethod::load($shipping_method
    ->id());
  $this
    ->assertEquals($new_shipping_method_name, $shipping_method_changed
    ->getName(), 'The shipping method name successfully updated.');

  /** @var \Drupal\commerce_shipping\Plugin\Commerce\ShippingMethod\ShippingMethodInterface $plugin */
  $plugin = $shipping_method_changed
    ->getPlugin();
  $this
    ->assertEquals([
    'number' => '20.00',
    'currency_code' => 'USD',
  ], $plugin
    ->getConfiguration()['rate_amount']);
  $this
    ->assertEquals('shipment_good_test', $plugin
    ->getConfiguration()['workflow']);
}