graphql_core_schema-1.0.x-dev/tests/src/Kernel/ResolveTranslationsTest.php

tests/src/Kernel/ResolveTranslationsTest.php
<?php

namespace Drupal\Tests\graphql_core_schema\Kernel;

use Drupal\node\Entity\Node;
use GraphQL\Server\OperationParams;

/**
 * Tests the default resolver for translation handling.
 *
 * @group graphql_core_schema
 */
class ResolveTranslationsTest extends CoreComposableKernelTestBase {

  /**
   * {@inheritdoc}
   */
  protected function setUp(): void {
    parent::setUp();

    $user = $this->setUpCurrentUser();
    $role = $this->createRole(['bypass node access', 'administer taxonomy']);
    $user->addRole($role);
    $this->setCurrentUser($user);

    $this->createTranslatableContentType();
  }

  /**
   * Resolves entities in correct language.
   */
  public function testResolveCorrectLanguage(): void {
    $node = Node::create([
      'type' => 'article',
      'title' => 'English Article',
    ]);
    $node->save();
    $node_de = $node->addTranslation('de');
    $node_de->set('title', 'Deutscher Artikel');
    $node_de->save();

    $server = $this->getCoreComposableServerBuilder()
      ->enableEntityType('node', [], ['article'])
      ->enableExtension('entity_query')
      ->enableBaseEntityField('label')
      ->enableValueFields()
      ->createServer();

    $query = <<<GQL
    query entityById(\$id: ID!) {
      entityById(id: \$id, entityType: NODE) {
        ... on NodeArticle {
          label
        }
      }
    }
GQL;
    $params = OperationParams::create([
      'query' => $query,
      'variables' => [
        'id' => $node->id(),
      ],
    ]);
    $result = $server->executeOperation($params);
    $data = $result->data['entityById'];
    $this->assertEquals('English Article', $data['label']);

    $this->setCurrentLanguage('de');
    $result = $server->executeOperation($params);
    $data = $result->data['entityById'];
    $this->assertEquals('Deutscher Artikel', $data['label']);
  }

  /**
   * Resolves entities in correct language across entity references.
   */
  public function testResolveCorrectLanguageReference(): void {
    $this->createEntityReferenceField('node', 'article', 'field_related_articles', NULL, 'node', 'default', ['target_bundles' => ['article' => 'article']], 10);
    $related_node = Node::create([
      'type' => 'article',
      'title' => 'Related node in all languages',
    ]);
    $related_node->save();

    $related_node_translation = $related_node->addTranslation('de');
    $related_node_translation->set('title', 'Verwandte Node in allen Sprachen');
    $related_node_translation->save();

    $node = Node::create([
      'type' => 'article',
      'title' => 'Article in all languages',
      'field_related_articles' => [
        'target_id' => $related_node->id(),
      ],
    ]);
    $node->save();

    $node = Node::load($node->id());

    $node_de = $node->addTranslation('de');
    $node_de->set('title', 'Artikel in allen Sprachen');
    $node_de->set('field_related_articles', $related_node);
    $node_de->save();

    $node_en_only = Node::create([
      'type' => 'article',
      'title' => 'Node in English only',
      'field_related_articles' => [
        'target_id' => $related_node->id(),
      ],
    ]);
    $node_en_only->save();

    $server = $this->getCoreComposableServerBuilder()
      ->enableEntityType('node', ['field_related_articles'], ['article'])
      ->enableExtension('entity_query')
      ->enableBaseEntityField('label')
      ->enableValueFields()
      ->createServer();

    // Set current language to German.
    $this->setCurrentLanguage('de');

    $query = <<<GQL
    query entityById(\$id: ID!) {
      entityById(id: \$id, entityType: NODE) {
        ... on NodeArticle {
          label
          fieldRelatedArticles {
            label
          }
        }
      }
    }
GQL;

    $params = OperationParams::create([
      'query' => $query,
      'variables' => [
        'id' => $node->id(),
      ],
    ]);
    $result = $server->executeOperation($params);
    $data = $result->data['entityById'];

    // Expect both the node and the referenced node to be resolved in the current language.
    $this->assertEquals('Artikel in allen Sprachen', $data['label']);
    $this->assertEquals('Verwandte Node in allen Sprachen', $data['fieldRelatedArticles'][0]['label']);

    $params = OperationParams::create([
      'query' => $query,
      'variables' => [
        'id' => $node_en_only->id(),
      ],
    ]);
    $result = $server->executeOperation($params);
    $data = $result->data['entityById'];

    // The node should be resolved in English, as it has no German translation.
    // The referenced related node should be resolved in German.
    $this->assertEquals('Node in English only', $data['label']);
    $this->assertEquals('Verwandte Node in allen Sprachen', $data['fieldRelatedArticles'][0]['label']);
  }

}

Главная | Обратная связь

drupal hosting | друпал хостинг | it patrol .inc