public function EntityReferenceSelectionAccessTest::testUserHandler

Test the user-specific overrides of the entity handler.

File

drupal/core/modules/entity_reference/lib/Drupal/entity_reference/Tests/EntityReferenceSelectionAccessTest.php, line 198
Contains \Drupal\entity_reference\Tests\EntityReferenceSelectionAccessTest.

Class

EntityReferenceSelectionAccessTest
Tests the Entity Reference Selection plugin.

Namespace

Drupal\entity_reference\Tests

Code

public function testUserHandler() {

  // Build a fake field instance.
  $field = array(
    'translatable' => FALSE,
    'entity_types' => array(),
    'settings' => array(
      'target_type' => 'user',
    ),
    'field_name' => 'test_field',
    'type' => 'entity_reference',
    'cardinality' => '1',
  );
  $instance = array(
    'settings' => array(
      'handler' => 'default',
      'handler_settings' => array(
        'target_bundles' => array(),
      ),
    ),
  );

  // Build a set of test data.
  $user_values = array(
    'anonymous' => user_load(0),
    'admin' => user_load(1),
    'non_admin' => array(
      'name' => 'non_admin <&>',
      'mail' => 'non_admin@example.com',
      'roles' => array(),
      'pass' => user_password(),
      'status' => 1,
    ),
    'blocked' => array(
      'name' => 'blocked <&>',
      'mail' => 'blocked@example.com',
      'roles' => array(),
      'pass' => user_password(),
      'status' => 0,
    ),
  );
  $user_values['anonymous']->name = config('user.settings')
    ->get('anonymous');
  $users = array();
  $user_labels = array();
  foreach ($user_values as $key => $values) {
    if (is_array($values)) {
      $account = entity_create('user', $values);
      $account
        ->save();
    }
    else {
      $account = $values;
    }
    $users[$key] = $account;
    $user_labels[$key] = check_plain($account->name);
  }

  // Test as a non-admin.
  $GLOBALS['user'] = $users['non_admin'];
  $referencable_tests = array(
    array(
      'arguments' => array(
        array(
          NULL,
          'CONTAINS',
        ),
      ),
      'result' => array(
        'user' => array(
          $users['admin']->uid => $user_labels['admin'],
          $users['non_admin']->uid => $user_labels['non_admin'],
        ),
      ),
    ),
    array(
      'arguments' => array(
        array(
          'non_admin',
          'CONTAINS',
        ),
        array(
          'NON_ADMIN',
          'CONTAINS',
        ),
      ),
      'result' => array(
        'user' => array(
          $users['non_admin']->uid => $user_labels['non_admin'],
        ),
      ),
    ),
    array(
      'arguments' => array(
        array(
          'invalid user',
          'CONTAINS',
        ),
      ),
      'result' => array(),
    ),
    array(
      'arguments' => array(
        array(
          'blocked',
          'CONTAINS',
        ),
      ),
      'result' => array(),
    ),
  );
  $this
    ->assertReferencable($field, $instance, $referencable_tests, 'User handler');
  $GLOBALS['user'] = $users['admin'];
  $referencable_tests = array(
    array(
      'arguments' => array(
        array(
          NULL,
          'CONTAINS',
        ),
      ),
      'result' => array(
        'user' => array(
          $users['anonymous']->uid => $user_labels['anonymous'],
          $users['admin']->uid => $user_labels['admin'],
          $users['non_admin']->uid => $user_labels['non_admin'],
          $users['blocked']->uid => $user_labels['blocked'],
        ),
      ),
    ),
    array(
      'arguments' => array(
        array(
          'blocked',
          'CONTAINS',
        ),
      ),
      'result' => array(
        'user' => array(
          $users['blocked']->uid => $user_labels['blocked'],
        ),
      ),
    ),
    array(
      'arguments' => array(
        array(
          'Anonymous',
          'CONTAINS',
        ),
        array(
          'anonymous',
          'CONTAINS',
        ),
      ),
      'result' => array(
        'user' => array(
          $users['anonymous']->uid => $user_labels['anonymous'],
        ),
      ),
    ),
  );
  $this
    ->assertReferencable($field, $instance, $referencable_tests, 'User handler (admin)');
}