You are here

public function EntityReferenceSelectSynonymsWebTestCase::testWidget in Synonyms 7

Test main functionality of the widget.

Overrides AbstractSelectSynonymsWebTestCase::testWidget

File

./synonyms.test, line 1673
Tests for the Synonyms module.

Class

EntityReferenceSelectSynonymsWebTestCase
Test synonyms friendly select widget for entity reference field type.

Code

public function testWidget() {
  $name = $this
    ->randomName();
  $this
    ->drupalPost('node/add/synonyms-test-content', array(
    'title' => $name,
    $this->reference_field['field_name'] . '[' . LANGUAGE_NONE . '][]' => array(
      $this
        ->synonymSelectKey($this->terms['parent_term'], $this->terms['parent_term']->{$this->fields['enabled']['field']['field_name']}[LANGUAGE_NONE][0]['value']),
      $this->terms['child_term']->tid,
      $this->terms['normal_term']->tid,
      $this
        ->synonymSelectKey($this->terms['normal_term'], $this->terms['normal_term']->{$this->fields['enabled']['field']['field_name']}[LANGUAGE_NONE][0]['value']),
    ),
  ), 'Save');
  $node = $this
    ->drupalGetNodeByTitle($name);
  $this
    ->drupalGet('node/' . $node->nid);
  $this
    ->assertText($this->terms['parent_term']->name, 'Term is saved when its synonym is submitted through synonyms friendly select for the unlimited cardinality.');
  $this
    ->assertText($this->terms['child_term']->name, 'Term is saved when it is submitted through synonyms friendly select for the unlimited cardinality.');
  $this
    ->assertUniqueText($this->terms['normal_term']->name, 'Term is saved only once when the term and its synonym are submitted through synonyms friendly select for the unlimited cardinality.');
  $options = array();
  $options[] = array(
    'entity' => $this->terms['child_term'],
    'selected' => TRUE,
  );
  $options[] = array(
    'entity' => $this->terms['child_term'],
    'synonym' => $this->terms['child_term']->{$this->fields['enabled']['field']['field_name']}[LANGUAGE_NONE][1]['value'],
  );
  $options[] = array(
    'entity' => $this->terms['child_term'],
    'synonym' => $this->terms['child_term']->{$this->fields['enabled']['field']['field_name']}[LANGUAGE_NONE][0]['value'],
  );
  $options[] = array(
    'entity' => $this->terms['normal_term'],
    'selected' => TRUE,
  );
  $options[] = array(
    'entity' => $this->terms['normal_term'],
    'synonym' => $this->terms['normal_term']->{$this->fields['enabled']['field']['field_name']}[LANGUAGE_NONE][0]['value'],
  );
  $options[] = array(
    'entity' => $this->terms['normal_term'],
    'synonym' => $this->terms['normal_term']->{$this->fields['enabled']['field']['field_name']}[LANGUAGE_NONE][1]['value'],
  );
  $options[] = array(
    'entity' => $this->terms['parent_term'],
    'selected' => TRUE,
  );
  $options[] = array(
    'entity' => $this->terms['parent_term'],
    'synonym' => $this->terms['parent_term']->{$this->fields['enabled']['field']['field_name']}[LANGUAGE_NONE][0]['value'],
  );
  $options[] = array(
    'entity' => $this->terms['parent_term'],
    'synonym' => $this->terms['parent_term']->{$this->fields['enabled']['field']['field_name']}[LANGUAGE_NONE][1]['value'],
  );
  $this
    ->drupalGet('node/' . $node->nid . '/edit');
  $this
    ->assertSynonymsSelect($options, 'Default values are set correctly in the synonyms friendly select widget when working with field cardinality more than 1.');
  $this->reference_field['cardinality'] = 2;
  field_update_field($this->reference_field);
  $name = $this
    ->randomName();
  $this
    ->drupalPost('node/add/synonyms-test-content', array(
    'title' => $name,
    $this->reference_field['field_name'] . '[' . LANGUAGE_NONE . '][]' => array(
      $this
        ->synonymSelectKey($this->terms['parent_term'], $this->terms['parent_term']->{$this->fields['enabled']['field']['field_name']}[LANGUAGE_NONE][0]['value']),
      $this->terms['child_term']->tid,
      $this->terms['normal_term']->tid,
    ),
  ), 'Save');
  $this
    ->assertText('this field cannot hold more than 2 values.', 'Submitting 3 entries into a field with cardinality of 2, that refer to 3 terms, results in a form error.');
  $this
    ->drupalPost('node/add/synonyms-test-content', array(
    'title' => $name,
    $this->reference_field['field_name'] . '[' . LANGUAGE_NONE . '][]' => array(
      $this
        ->synonymSelectKey($this->terms['parent_term'], $this->terms['parent_term']->{$this->fields['enabled']['field']['field_name']}[LANGUAGE_NONE][0]['value']),
      $this->terms['normal_term']->tid,
      $this
        ->synonymSelectKey($this->terms['normal_term'], $this->terms['normal_term']->{$this->fields['enabled']['field']['field_name']}[LANGUAGE_NONE][0]['value']),
    ),
  ), 'Save');
  $node = $this
    ->drupalGetNodeByTitle($name);
  $this
    ->drupalGet('node/' . $node->nid);
  $this
    ->assertUniqueText($this->terms['parent_term']->name, 'Submitting 3 entries into a field with cardinality of 2, that refer to only 2 terms, results in form getting submitted. Term #1 is saved.');
  $this
    ->assertUniqueText($this->terms['normal_term']->name, 'Term #2 is saved.');
  $this->reference_field['cardinality'] = 1;
  field_update_field($this->reference_field);
  $name = $this
    ->randomName();
  $this
    ->drupalPost('node/add/synonyms-test-content', array(
    'title' => $name,
    $this->reference_field['field_name'] . '[' . LANGUAGE_NONE . ']' => $this
      ->synonymSelectKey($this->terms['parent_term'], $this->terms['parent_term']->{$this->fields['enabled']['field']['field_name']}[LANGUAGE_NONE][0]['value']),
  ), 'Save');
  $node = $this
    ->drupalGetNodeByTitle($name);
  $this
    ->drupalGet('node/' . $node->nid);
  $this
    ->assertText($this->terms['parent_term']->name, 'Term is saved when its synonym is submitted through synonyms friendly select for the cardinality of 1.');
  $options = array();
  $options[] = array(
    'entity' => $this->terms['child_term'],
  );
  $options[] = array(
    'entity' => $this->terms['child_term'],
    'synonym' => $this->terms['child_term']->{$this->fields['enabled']['field']['field_name']}[LANGUAGE_NONE][1]['value'],
  );
  $options[] = array(
    'entity' => $this->terms['child_term'],
    'synonym' => $this->terms['child_term']->{$this->fields['enabled']['field']['field_name']}[LANGUAGE_NONE][0]['value'],
  );
  $options[] = array(
    'entity' => $this->terms['normal_term'],
  );
  $options[] = array(
    'entity' => $this->terms['normal_term'],
    'synonym' => $this->terms['normal_term']->{$this->fields['enabled']['field']['field_name']}[LANGUAGE_NONE][0]['value'],
  );
  $options[] = array(
    'entity' => $this->terms['normal_term'],
    'synonym' => $this->terms['normal_term']->{$this->fields['enabled']['field']['field_name']}[LANGUAGE_NONE][1]['value'],
  );
  $options[] = array(
    'entity' => $this->terms['parent_term'],
    'selected' => TRUE,
  );
  $options[] = array(
    'entity' => $this->terms['parent_term'],
    'synonym' => $this->terms['parent_term']->{$this->fields['enabled']['field']['field_name']}[LANGUAGE_NONE][0]['value'],
  );
  $options[] = array(
    'entity' => $this->terms['parent_term'],
    'synonym' => $this->terms['parent_term']->{$this->fields['enabled']['field']['field_name']}[LANGUAGE_NONE][1]['value'],
  );
  $this
    ->drupalGet('node/' . $node->nid . '/edit');
  $this
    ->assertSynonymsSelect($options, 'Default values are set correctly in the synonyms friendly select widget when working with the field cardinality of 1.');
  $this
    ->drupalPost('node/' . $node->nid . '/edit', array(
    $this->reference_field['field_name'] . '[' . LANGUAGE_NONE . ']' => $this->terms['child_term']->tid,
  ), 'Save');
  $this
    ->drupalGet('node/' . $node->nid);
  $this
    ->assertNoText($this->terms['parent_term']->name, 'After updating entity the old term is removed.');
  $this
    ->assertText($this->terms['child_term']->name, 'Term is saved when it is submitted through synonyms friendly select for the cardinality of 1.');
  $options = array();
  $options[] = array(
    'entity' => $this->terms['child_term'],
    'selected' => TRUE,
  );
  $options[] = array(
    'entity' => $this->terms['child_term'],
    'synonym' => $this->terms['child_term']->{$this->fields['enabled']['field']['field_name']}[LANGUAGE_NONE][1]['value'],
  );
  $options[] = array(
    'entity' => $this->terms['child_term'],
    'synonym' => $this->terms['child_term']->{$this->fields['enabled']['field']['field_name']}[LANGUAGE_NONE][0]['value'],
  );
  $options[] = array(
    'entity' => $this->terms['normal_term'],
  );
  $options[] = array(
    'entity' => $this->terms['normal_term'],
    'synonym' => $this->terms['normal_term']->{$this->fields['enabled']['field']['field_name']}[LANGUAGE_NONE][0]['value'],
  );
  $options[] = array(
    'entity' => $this->terms['normal_term'],
    'synonym' => $this->terms['normal_term']->{$this->fields['enabled']['field']['field_name']}[LANGUAGE_NONE][1]['value'],
  );
  $options[] = array(
    'entity' => $this->terms['parent_term'],
  );
  $options[] = array(
    'entity' => $this->terms['parent_term'],
    'synonym' => $this->terms['parent_term']->{$this->fields['enabled']['field']['field_name']}[LANGUAGE_NONE][0]['value'],
  );
  $options[] = array(
    'entity' => $this->terms['parent_term'],
    'synonym' => $this->terms['parent_term']->{$this->fields['enabled']['field']['field_name']}[LANGUAGE_NONE][1]['value'],
  );
  $this
    ->drupalGet('node/' . $node->nid . '/edit');
  $this
    ->assertSynonymsSelect($options, 'Default values are set correctly in the synonyms friendly select widget when working with the field cardinality of 1.');
}