You are here

public function DataFetcherAutocompleteTest::testGlobalNodeAutocomplete in Typed Data API enhancements 8

Tests various @node example data selectors.

@covers ::autocompletePropertyPath

File

tests/src/Kernel/DataFetcherAutocompleteTest.php, line 412

Class

DataFetcherAutocompleteTest
Tests that data fetcher autocomplete function works correctly.

Namespace

Drupal\Tests\typed_data\Kernel

Code

public function testGlobalNodeAutocomplete() {
  $definitions = [
    '@node.node_route_context:node' => $this->globalNodeDefinition,
  ];

  // Tests that "node.uid.en" returns the suggestion "node.uid.entity".
  $results = $this->dataFetcher
    ->autocompletePropertyPath($definitions, '@node.node_route_context:node.uid.en');
  $this
    ->assertSame([
    [
      'value' => '@node.node_route_context:node.uid.entity',
      'label' => '@node.node_route_context:node.uid.entity (User)',
    ],
    [
      'value' => '@node.node_route_context:node.uid.entity.',
      'label' => '@node.node_route_context:node.uid.entity... (User)',
    ],
  ], $results);

  // Tests that "@node.node_route_context:node." returns all available fields
  // on a node.
  $results = $this->dataFetcher
    ->autocompletePropertyPath($definitions, '@node.node_route_context:node.');
  $expected = array_merge([
    [
      'value' => '@node.node_route_context:node.changed',
      'label' => '@node.node_route_context:node.changed (Changed)',
    ],
    [
      'value' => '@node.node_route_context:node.changed.',
      'label' => '@node.node_route_context:node.changed... (Changed)',
    ],
    [
      'value' => '@node.node_route_context:node.created',
      'label' => '@node.node_route_context:node.created (Authored on)',
    ],
    [
      'value' => '@node.node_route_context:node.created.',
      'label' => '@node.node_route_context:node.created... (Authored on)',
    ],
    [
      'value' => '@node.node_route_context:node.default_langcode',
      'label' => '@node.node_route_context:node.default_langcode (Default translation)',
    ],
    [
      'value' => '@node.node_route_context:node.default_langcode.',
      'label' => '@node.node_route_context:node.default_langcode... (Default translation)',
    ],
    [
      'value' => '@node.node_route_context:node.langcode',
      'label' => '@node.node_route_context:node.langcode (Language)',
    ],
    [
      'value' => '@node.node_route_context:node.langcode.',
      'label' => '@node.node_route_context:node.langcode... (Language)',
    ],
    [
      'value' => '@node.node_route_context:node.nid',
      'label' => '@node.node_route_context:node.nid (ID)',
    ],
    [
      'value' => '@node.node_route_context:node.nid.',
      'label' => '@node.node_route_context:node.nid... (ID)',
    ],
    [
      'value' => '@node.node_route_context:node.promote',
      'label' => '@node.node_route_context:node.promote (Promoted to front page)',
    ],
    [
      'value' => '@node.node_route_context:node.promote.',
      'label' => '@node.node_route_context:node.promote... (Promoted to front page)',
    ],
  ], [
    [
      'value' => '@node.node_route_context:node.revision_default',
      'label' => '@node.node_route_context:node.revision_default (Default revision)',
    ],
    [
      'value' => '@node.node_route_context:node.revision_default.',
      'label' => '@node.node_route_context:node.revision_default... (Default revision)',
    ],
  ], [
    [
      'value' => '@node.node_route_context:node.revision_log',
      'label' => '@node.node_route_context:node.revision_log (Revision log message)',
    ],
    [
      'value' => '@node.node_route_context:node.revision_log.',
      'label' => '@node.node_route_context:node.revision_log... (Revision log message)',
    ],
    [
      'value' => '@node.node_route_context:node.revision_timestamp',
      'label' => '@node.node_route_context:node.revision_timestamp (Revision create time)',
    ],
    [
      'value' => '@node.node_route_context:node.revision_timestamp.',
      'label' => '@node.node_route_context:node.revision_timestamp... (Revision create time)',
    ],
    [
      'value' => '@node.node_route_context:node.revision_translation_affected',
      'label' => '@node.node_route_context:node.revision_translation_affected (Revision translation affected)',
    ],
    [
      'value' => '@node.node_route_context:node.revision_translation_affected.',
      'label' => '@node.node_route_context:node.revision_translation_affected... (Revision translation affected)',
    ],
    [
      'value' => '@node.node_route_context:node.revision_uid',
      'label' => '@node.node_route_context:node.revision_uid (Revision user)',
    ],
    [
      'value' => '@node.node_route_context:node.revision_uid.',
      'label' => '@node.node_route_context:node.revision_uid... (Revision user)',
    ],
    [
      'value' => '@node.node_route_context:node.status',
      'label' => '@node.node_route_context:node.status (Published)',
    ],
    [
      'value' => '@node.node_route_context:node.status.',
      'label' => '@node.node_route_context:node.status... (Published)',
    ],
    [
      'value' => '@node.node_route_context:node.sticky',
      'label' => '@node.node_route_context:node.sticky (Sticky at top of lists)',
    ],
    [
      'value' => '@node.node_route_context:node.sticky.',
      'label' => '@node.node_route_context:node.sticky... (Sticky at top of lists)',
    ],
    [
      'value' => '@node.node_route_context:node.title',
      'label' => '@node.node_route_context:node.title (Title)',
    ],
    [
      'value' => '@node.node_route_context:node.title.',
      'label' => '@node.node_route_context:node.title... (Title)',
    ],
    [
      'value' => '@node.node_route_context:node.type',
      'label' => '@node.node_route_context:node.type (Content type)',
    ],
    [
      'value' => '@node.node_route_context:node.type.',
      'label' => '@node.node_route_context:node.type... (Content type)',
    ],
    [
      'value' => '@node.node_route_context:node.uid',
      'label' => '@node.node_route_context:node.uid (Authored by)',
    ],
    [
      'value' => '@node.node_route_context:node.uid.',
      'label' => '@node.node_route_context:node.uid... (Authored by)',
    ],
    [
      'value' => '@node.node_route_context:node.uuid',
      'label' => '@node.node_route_context:node.uuid (UUID)',
    ],
    [
      'value' => '@node.node_route_context:node.uuid.',
      'label' => '@node.node_route_context:node.uuid... (UUID)',
    ],
    [
      'value' => '@node.node_route_context:node.vid',
      'label' => '@node.node_route_context:node.vid (Revision ID)',
    ],
    [
      'value' => '@node.node_route_context:node.vid.',
      'label' => '@node.node_route_context:node.vid... (Revision ID)',
    ],
  ]);

  // Because this is a huge array, run the assertion per entry as that is
  // easier for debugging.
  foreach ($expected as $index => $entry) {
    $this
      ->assertSame($entry, $results[$index]);
  }

  // Tests that "@node.node_route_context:node.uid.entity.na" returns
  // "@node.node_route_context:node.uid.entity.name".
  $results = $this->dataFetcher
    ->autocompletePropertyPath($definitions, '@node.node_route_context:node.uid.entity.na');
  $this
    ->assertSame([
    [
      'value' => '@node.node_route_context:node.uid.entity.name',
      'label' => '@node.node_route_context:node.uid.entity.name (Name)',
    ],
    [
      'value' => '@node.node_route_context:node.uid.entity.name.',
      'label' => '@node.node_route_context:node.uid.entity.name... (Name)',
    ],
  ], $results);

  // A single-valued field should not show numeric indices suggestions.
  $results = $this->dataFetcher
    ->autocompletePropertyPath($definitions, '@node.node_route_context:node.title.');
  $this
    ->assertSame([
    [
      'value' => '@node.node_route_context:node.title.value',
      'label' => '@node.node_route_context:node.title.value (Text value)',
    ],
  ], $results);

  // A single-valued field should not show numeric indices suggestions.
  $results = $this->dataFetcher
    ->autocompletePropertyPath($definitions, '@node.node_route_context:n');
  $this
    ->assertSame([
    [
      'value' => '@node.node_route_context:node',
      'label' => '@node.node_route_context:node (Node from URL)',
    ],
    [
      'value' => '@node.node_route_context:node.',
      'label' => '@node.node_route_context:node... (Node from URL)',
    ],
  ], $results);
}