You are here

public function SalesforceMappingCrudFormTest::testMappingCrudForm in Salesforce Suite 5.0.x

Same name and namespace in other branches
  1. 8.4 modules/salesforce_mapping_ui/src/Tests/SalesforceMappingCrudFormTest.php \Drupal\salesforce_mapping_ui\Tests\SalesforceMappingCrudFormTest::testMappingCrudForm()

Tests webform admin settings.

File

modules/salesforce_mapping_ui/src/Tests/SalesforceMappingCrudFormTest.php, line 61

Class

SalesforceMappingCrudFormTest
Tests for salesforce admin settings.

Namespace

Drupal\salesforce_mapping_ui\Tests

Code

public function testMappingCrudForm() {
  global $base_path;
  $mappingStorage = \Drupal::entityTypeManager()
    ->getStorage('salesforce_mapping');
  $this
    ->drupalLogin($this->adminSalesforceUser);
  $this
    ->drupalGet('admin/structure/salesforce/mappings/add');

  /* Salesforce Mapping Add Form */
  $mapping_name = 'mapping' . rand(100, 10000);
  $post = [
    'id' => $mapping_name,
    'label' => $mapping_name,
    'drupal_entity_type' => 'node',
    'drupal_bundle' => 'salesforce_mapping_test_content',
    'salesforce_object_type' => 'Contact',
  ];
  $this
    ->submitForm($post, $this
    ->t('Save'));
  $this
    ->assertSession()
    ->pageTextContainsOnce($this
    ->t('The mapping has been successfully saved.'));
  $mapping = $mappingStorage
    ->load($mapping_name);

  // Make sure mapping was saved correctly.
  $this
    ->assertEquals($mapping
    ->id(), $mapping_name);
  $this
    ->assertEquals($mapping
    ->label(), $mapping_name);

  /* Salesforce Mapping Edit Form */

  // Need to rebuild caches before proceeding to edit link.
  drupal_flush_all_caches();
  $this
    ->drupalGet('admin/structure/salesforce/mappings/manage/' . $mapping_name);
  $post = [
    'label' => $this
      ->randomMachineName(),
    'drupal_entity_type' => 'node',
    'drupal_bundle' => 'salesforce_mapping_test_content',
    'salesforce_object_type' => 'Contact',
  ];
  $this
    ->submitForm($post, $this
    ->t('Save'));
  $this
    ->assertSession()
    ->fieldValueEquals('label', $post['label']);

  // Test simply adding a field plugin of every possible type. This is not
  // great coverage, but will at least make sure our plugin definitions don't
  // cause fatal errors.
  $mappingFieldsPluginManager = \Drupal::service('plugin.manager.salesforce_mapping_field');
  $field_plugins = $mappingFieldsPluginManager
    ->getDefinitions();
  $post = [];
  $i = 0;
  $this
    ->drupalGet('admin/structure/salesforce/mappings/manage/' . $mapping_name . '/fields');
  foreach ($field_plugins as $definition) {
    if (call_user_func([
      $definition['class'],
      'isAllowed',
    ], $mapping)) {

      // Add a new field:
      $post['buttons[field_type]'] = $definition['id'];
      $this
        ->submitForm($post, $this
        ->t('Add a field mapping to get started'));

      // Confirm that the new field shows up:
      $this
        ->assertSession()
        ->pageTextContains($definition['label']);

      // @TODO need an interface for field plugins that will tell us which config values are applicable.
      // Add all components of this field plugin to our post array to build up the mapping.
      $this
        ->assertSession()
        ->elementExists('css', "[name='field_mappings[{$i}][config][drupal_field_value]'], [name='field_mappings[{$i}][config][drupal_field_value][setting]']");
      $this
        ->assertSession()
        ->elementExists('css', "[name='field_mappings[{$i}][config][salesforce_field]'], [name='field_mappings[{$i}][config][drupal_constant]']");
      $this
        ->assertSession()
        ->fieldExists("field_mappings[{$i}][config][description]");
      $this
        ->assertSession()
        ->fieldExists("field_mappings[{$i}][config][direction]");
      $this
        ->assertSession()
        ->hiddenFieldExists("field_mappings[{$i}][drupal_field_type]");
      if ($this
        ->getSession()
        ->getPage()
        ->find('css', "select[name='field_mappings[{$i}][config][salesforce_field]'] option[value='LastName']")) {
        $post["field_mappings[{$i}][config][salesforce_field]"] = 'LastName';
      }
      if ($this
        ->getSession()
        ->getPage()
        ->find('css', "select[name='field_mappings[{$i}][config][drupal_field_value]'] option[value='title']")) {
        $post["field_mappings[{$i}][config][drupal_field_value]"] = 'title';
      }
      $i++;
    }
  }

  // Confirm that form saves correctly.
  $this
    ->submitForm($post, $this
    ->t('Save'));
  $this
    ->assertSession()
    ->pageTextContainsOnce($this
    ->t('The mapping has been successfully saved.'));

  // Confirm that the changes are stored properly by reloading and counting the fields.
  $this
    ->drupalGet('admin/structure/salesforce/mappings/manage/' . $mapping_name . '/fields');
  for ($j = 0; $j < $i; $j++) {
    $this
      ->assertSession()
      ->elementExists('css', "#edit-field-mappings-{$j}");
  }
}