You are here

public function SalesforceMappingMapTestCase::testMappingAjax in Salesforce Suite 7.3

Tests the AJAX of the mapping form.

File

modules/salesforce_mapping/tests/salesforce_mapping.map.test, line 77

Class

SalesforceMappingMapTestCase
Tests the user interface for mapping Drupal entities to Salesforce objects.

Code

public function testMappingAjax() {

  // Form throws message if it cannot connect to Salesforce.
  $this
    ->drupalGet($this->addMapPath);
  $this
    ->assertText('You are not authorized to access this page.', 'Message appears when Salesforce is not connected.');

  // Add map page appears after connecting to Salesforce.
  $this
    ->salesforceConnect();
  $this
    ->drupalGet($this->addMapPath);
  $this
    ->assertFieldById('edit-label', '', 'Label field exists.');
  $this
    ->assertFieldById('edit-drupal-entity-type', '', 'Drupal entity type field exists.');
  $this
    ->assertFieldById('edit-salesforce-object-type', '', 'Salesforce object type field exists.');
  $this
    ->assertFieldById('edit-sync-triggers-1', '', 'Action triggers checkboxes exist.');
  $this
    ->assertFieldById('edit-push-async', '', 'Push async checkbox exists.');
  $this
    ->assertFieldById('edit-push-batch', '', 'Push batch checkbox exists.');

  // Verify default values.
  $this
    ->assertOptionSelected('edit-drupal-entity-type', '', 'Drupal entity type field has correct default value.');
  $this
    ->assertOptionSelected('edit-salesforce-object-type', '', 'Salesforce object type field has correct default value.');
  $this
    ->assertNoFieldChecked('edit-sync-triggers-1', 'Trigger on Drupal entity create field has correct default value.');
  $this
    ->assertNoFieldChecked('edit-sync-triggers-2', 'Trigger on Drupal entity create field has correct default value.');
  $this
    ->assertNoFieldChecked('edit-sync-triggers-4', 'Trigger on Drupal entity create field has correct default value.');
  $this
    ->assertNoFieldChecked('edit-sync-triggers-8', 'Trigger on Drupal entity create field has correct default value.');
  $this
    ->assertNoFieldChecked('edit-sync-triggers-16', 'Trigger on Drupal entity create field has correct default value.');
  $this
    ->assertNoFieldChecked('edit-sync-triggers-32', 'Trigger on Drupal entity create field has correct default value.');
  $this
    ->assertNoFieldChecked('edit-push-async', 'Push async field has correct default value.');
  $this
    ->assertNoFieldChecked('edit-push-batch', 'Push batch field has correct default value.');
  $edit = array();

  // Select a Drupal entity type.
  $this
    ->assertRaw('<select disabled="disabled" id="edit-drupal-bundle"', 'Drupal bundle field is disabled when Drupal entity type is not selected.');
  $this
    ->assertText('Select a value for Drupal Entity Type and Drupal Entity Bundle and Salesforce object in order to map fields.', 'Fieldmap give proper initial instructions of what is required to start mapping.');
  $edit['drupal_entity_type'] = 'user';
  $this
    ->drupalPostAjax(NULL, $edit, 'drupal_entity_type');
  $this
    ->assertNoRaw('<select disabled="disabled" id="edit-drupal-bundle"', 'Drupal bundle field is not disabled when Drupal entity type is selected.');
  $this
    ->assertRaw('<select id="edit-drupal-bundle"', 'Drupal bundle field is not disabled when Drupal entity type is selected.');
  $this
    ->assertNoText('Select a value for Drupal Entity Type and Drupal Entity Bundle and Salesforce object in order to map fields.', 'Initial fieldmap instructions have been replaced.');
  $this
    ->assertText('Select a value for Drupal Entity Bundle and Salesforce object in order to map fields.', 'Fieldmap instructions give updated information of what is required to start mapping.');

  // Select a Salesforce object type.
  $this
    ->assertNoFieldById('edit-salesforce-record-type', '', 'Salesforce record type field does not exist when no object type is selected.');
  $edit['salesforce_object_type'] = 'Opportunity';
  $this
    ->drupalPostAjax(NULL, $edit, 'salesforce_object_type');
  $this
    ->assertFieldById('edit-salesforce-record-type', '', 'Salesforce record type field showed up after object type was selected.');
  $this
    ->assertNoText('Select a value for Drupal Entity Type and Drupal Entity Bundle and Salesforce object in order to map fields.', 'Initial fieldmap instructions have been replaced.');
  $this
    ->assertNoText('Select a value for Drupal Entity Bundle and Salesforce object in order to map fields.', 'Updated fieldmap instructions have been replaced again.');
  $this
    ->assertText('Select a value for Drupal Entity Bundle in order to map fields.', 'Fieldmap instructions give updated information again of what is required to start mapping.');

  // Select a Drupal bundle.
  $edit['drupal_bundle'] = 'user';
  $this
    ->assertNoRaw('<table id="edit-salesforce-field-mappings"', 'Field map table does not yet exist.');
  $this
    ->drupalPostAjax(NULL, $edit, 'drupal_bundle');
  $this
    ->assertRaw('<table id="edit-salesforce-field-mappings"', 'Field map table has appeared.');
  $this
    ->assertNoText('Select a value for Drupal Entity Type and Drupal Entity Bundle and Salesforce object in order to map fields.', 'Initial fieldmap instructions have been removed from the page.');
  $this
    ->assertNoText('Select a value for Drupal Entity Bundle and Salesforce object in order to map fields.', 'Updated fieldmap instructions have been removed from the page.');
  $this
    ->assertNoText('Select a value for Drupal Entity Bundle in order to map fields.', 'Second updated fieldmap instructions have been removed from the page.');
  $this
    ->assertFieldById('edit-fieldmap-type-0', '', 'Drupal fieldmap type field has appeared.');
  $this
    ->assertFieldById('edit-salesforce-field-0', '', 'Salesforce map field has appeared.');
  $this
    ->assertFieldById('edit-key-0', '', 'Key field has appeared.');
  $this
    ->assertFieldById('edit-salesforce-field-mappings-0-direction-drupal-sf', '', 'Direction radios have appeared.');
  $this
    ->assertFieldById('edit-delete-field-mapping-0', '', 'Delete mapping field has appeared.');

  // Unselect the Salesforce object type.
  $edit['salesforce_object_type'] = '';
  $this
    ->drupalPostAjax(NULL, $edit, 'salesforce_object_type');
  $this
    ->assertNoFieldById('edit-salesforce-record-type', '', 'Salesforce record type field disappeared when salesforce object type field was deselected.');
  $this
    ->assertNoRaw('<table id="edit-salesforce-field-mappings"', 'Field map table disappeared when salesforce object type field was deslected.');
  $this
    ->assertText('Select a value for Salesforce object in order to map fields.', 'Instructions to select a salesforce object type have appeared.');

  // Reset the Salesforce object type.
  $edit['salesforce_object_type'] = 'Contact';
  $this
    ->drupalPostAjax(NULL, $edit, 'salesforce_object_type');
  $this
    ->assertRaw('<input type="hidden" name="salesforce_record_type" value="default">', 'Salesforce record type his hidden for a salesforce object without records.');
  $this
    ->assertRaw('<table id="edit-salesforce-field-mappings"', 'Field map table has appeared.');

  // Set the drupal fieldmap type.
  $edit['salesforce_field_mappings[0][drupal_field][fieldmap_type]'] = 'property';
  $this
    ->assertNoFieldById('edit-fieldmap-value-0', '', 'Drupal fieldmap value field does not appear when property field is not set.');
  $this
    ->drupalPostAjax(NULL, $edit, 'salesforce_field_mappings[0][drupal_field][fieldmap_type]');
  $this
    ->assertFieldById('edit-fieldmap-value-0', '', 'Drupal fieldmap value field has appeared when property field is set.');

  // Add a new row.
  $this
    ->assertNoFieldById('edit-fieldmap-type-1', '', 'A second row does not exist yet.');
  $this
    ->drupalPostAjax(NULL, $edit, array(
    'salesforce_add_field' => 'Add another field mapping',
  ));
  $this
    ->assertFieldById('edit-fieldmap-type-0', '', 'Original row still exists.');
  $this
    ->assertFieldById('edit-fieldmap-type-1', '', 'Another row appeared after pressing the add field button.');
  $this
    ->assertOptionSelected('edit-fieldmap-type-0', 'property', 'Original row has retained its previous value.');

  // Add another two rows.
  $this
    ->assertNoFieldById('edit-fieldmap-type-2', '', 'A third row does not exist yet.');
  $this
    ->assertNoFieldById('edit-fieldmap-type-3', '', 'A fourth row does not exist yet.');
  $this
    ->drupalPostAjax(NULL, $edit, array(
    'salesforce_add_field' => 'Add another field mapping',
  ));
  $this
    ->drupalPostAjax(NULL, $edit, array(
    'salesforce_add_field' => 'Add another field mapping',
  ));
  $this
    ->assertFieldById('edit-fieldmap-type-0', '', 'Original row still exists.');
  $this
    ->assertFieldById('edit-fieldmap-type-1', '', 'Second row still exists.');
  $this
    ->assertFieldById('edit-fieldmap-type-2', '', 'Third row added successfully.');
  $this
    ->assertFieldById('edit-fieldmap-type-3', '', 'Fourth row added successfully.');
  $this
    ->assertOptionSelected('edit-fieldmap-type-0', 'property', 'Original row has retained its previous value.');
  $this
    ->assertOptionSelected('edit-fieldmap-type-1', '', 'Previous new row retained its value.');

  // Delete a row.
  $edit['delete_field_mapping-1'] = TRUE;
  $this
    ->drupalPostAjax(NULL, $edit, 'delete_field_mapping-1');
  unset($edit['delete_field_mapping-1']);
  $this
    ->assertFieldById('edit-fieldmap-type-0', '', 'First row still exists.');
  $this
    ->assertNoFieldById('edit-fieldmap-type-1', '', 'Second row successfully deleted.');
  $this
    ->assertFieldById('edit-fieldmap-type-2', '', 'Third row still exists.');
  $this
    ->assertFieldById('edit-fieldmap-type-3', '', 'Fourth row still exists.');

  // Add another row.
  $this
    ->assertNoFieldById('edit-fieldmap-type-1', '', 'The deleted row has not reappeared.');
  $this
    ->assertNoFieldById('edit-fieldmap-type-4', '', 'A fourth row / 5th key has not appeared.');
  $this
    ->drupalPostAjax(NULL, $edit, array(
    'salesforce_add_field' => 'Add another field mapping',
  ));
  $this
    ->assertFieldById('edit-fieldmap-type-0', '', 'Row 0 still exists.');
  $this
    ->assertNoFieldById('edit-fieldmap-type-1', '', 'Row 1 still deleted.');
  $this
    ->assertFieldById('edit-fieldmap-type-2', '', 'Row 2 still exists.');
  $this
    ->assertFieldById('edit-fieldmap-type-3', '', 'Row 3 still exists.');
  $this
    ->assertFieldById('edit-fieldmap-type-3', '', 'Row 4 has appeared.');

  // Map label and name interaction is done by javascript, not by ajax, and
  // cannot be tested here.  There is a known interaction failure where if you
  // show the machine name field and then trigger an ajax event, the machine
  // name field will not show again, and will not be able to be shown again.
}