You are here

public function UniqueFieldReferencesTestCase::testUniqueSingleNode in Unique field 7

Test the unique requirement on a node reference field in the single scope.

File

tests/references.test, line 169
Functional tests for the Unique Field module with References field types.

Class

UniqueFieldReferencesTestCase
@file Functional tests for the Unique Field module with References field types.

Code

public function testUniqueSingleNode() {

  // Create a content type with two node reference fields that are set to be
  // unique
  $edit = array();
  $edit['name'] = 'Unique Node Single';
  $edit['type'] = 'uf_node_single';
  $this
    ->drupalPost('admin/structure/types/add', $edit, t('Save content type'));
  $this
    ->assertText('The content type Unique Node Single has been added.', 'Content type added.');
  $edit = array();
  $edit['fields[_add_new_field][label]'] = 'Unique Node Single Node 1';
  $edit['fields[_add_new_field][field_name]'] = 'uf_node_single_node_1';
  $edit['fields[_add_new_field][type]'] = 'node_reference';
  $edit['fields[_add_new_field][widget_type]'] = 'options_select';
  $this
    ->drupalPost('admin/structure/types/manage/uf_node_single/fields', $edit, t('Save'));
  $this
    ->assertText('These settings apply to the Unique Node Single Node 1 field everywhere it is used.', 'Field added to content type.');
  $edit = array();
  $edit['field[settings][referenceable_types][uf_node_single]'] = 'uf_node_single';
  $this
    ->drupalPost('admin/structure/types/manage/uf_node_single/fields/field_uf_node_single_node_1/field-settings', $edit, t('Save field settings'));
  $this
    ->assertText('Updated field Unique Node Single Node 1 field settings.', 'Node reference field configured.');
  $edit = array();
  $edit['fields[_add_new_field][label]'] = 'Unique Node Single Node 2';
  $edit['fields[_add_new_field][field_name]'] = 'uf_node_single_node_2';
  $edit['fields[_add_new_field][type]'] = 'node_reference';
  $edit['fields[_add_new_field][widget_type]'] = 'options_select';
  $this
    ->drupalPost('admin/structure/types/manage/uf_node_single/fields', $edit, t('Save'));
  $this
    ->assertText('These settings apply to the Unique Node Single Node 2 field everywhere it is used.', 'Field added to content type.');
  $edit = array();
  $edit['field[settings][referenceable_types][uf_node_single]'] = 'uf_node_single';
  $this
    ->drupalPost('admin/structure/types/manage/uf_node_single/fields/field_uf_node_single_node_2/field-settings', $edit, t('Save field settings'));
  $this
    ->assertText('Updated field Unique Node Single Node 2 field settings.', 'Node reference field configured.');
  $edit = array();
  $edit['unique_field_scope'] = UNIQUE_FIELD_SCOPE_NODE;
  $edit['unique_field_fields[field_uf_node_single_node_1]'] = 'field_uf_node_single_node_1';
  $edit['unique_field_fields[field_uf_node_single_node_2]'] = 'field_uf_node_single_node_2';
  $this
    ->drupalPost('admin/structure/types/manage/uf_node_single', $edit, t('Save content type'));
  $this
    ->assertText('The content type Unique Node Single has been updated.', 'Content type updated.');

  // Create a node to be referenced
  $edit = array();
  $edit['title'] = $this
    ->randomName(24);
  $edit['body[und][0][value]'] = $this
    ->randomName(48);
  $this
    ->drupalPost('node/add/uf-node-single', $edit, t('Save'));
  $this
    ->assertText($edit['body[und][0][value]'], 'Unique Node Single (uf_node_single) node has been created');

  // Attempt to create a node with the same text in both fields
  $ref_nid = 1;
  $edit = array();
  $edit['title'] = $this
    ->randomName(24);
  $edit['body[und][0][value]'] = $this
    ->randomName(48);
  $edit['field_uf_node_single_node_1[und]'] = $ref_nid;
  $edit['field_uf_node_single_node_2[und]'] = $ref_nid;
  $this
    ->drupalPost('node/add/uf-node-single', $edit, t('Save'));
  $this
    ->assertText('The Unique Node Single Node 2 fields must have unique values. The Unique Node Single Node 2 field has a value that is already used.', 'Unique Node Single (uf_node_single) node with duplicate content could not be created');

  // Check for false negative: Attempt to create a node with unique text
  $edit = array();
  $edit['title'] = $this
    ->randomName(24);
  $edit['body[und][0][value]'] = $this
    ->randomName(48);
  $this
    ->drupalPost('node/add/uf-node-single', $edit, t('Save'));
  $this
    ->assertText($edit['body[und][0][value]'], 'Unique Node Single (uf_node_single) node has been created');
  $edit = array();
  $edit['title'] = $this
    ->randomName(24);
  $edit['body[und][0][value]'] = $this
    ->randomName(48);
  $edit['field_uf_node_single_node_1[und]'] = 1;
  $edit['field_uf_node_single_node_2[und]'] = 2;
  $this
    ->drupalPost('node/add/uf-node-single', $edit, t('Save'));
  $this
    ->assertText($edit['body[und][0][value]'], 'Unique Node Single (uf_node_single) node has been created');
}