translation_views-8.x-1.x-dev/tests/src/Functional/TranslatorsContentIntegrationTest.php

tests/src/Functional/TranslatorsContentIntegrationTest.php
<?php

namespace Drupal\Tests\translation_views\Functional;

use Drupal\node\Entity\Node;
use Drupal\Tests\BrowserTestBase;
use Drupal\Tests\translators_content\Functional\TranslatorsContentTestsTrait;

/**
 * Class TranslatorsContentIntegrationTest.
 *
 * @package Drupal\Tests\translation_views\Functional
 *
 * @group translation_views
 * @requires module translators
 */
class TranslatorsContentIntegrationTest extends BrowserTestBase {
  use TranslatorsContentTestsTrait;

  /**
   * {@inheritdoc}
   */
  protected $profile = 'standard';

  /**
   * {@inheritdoc}
   */
  protected static $modules = ['translation_views_translators_test'];

  /**
   * {@inheritdoc}
   */
  protected $defaultTheme = 'stark';

  protected $adminTheme = 'stark';

  /**
   * Translators skills service.
   *
   * @var \Drupal\translators\Services\TranslatorSkills
   */
  protected $translatorSkills;
  /**
   * User registered skills.
   *
   * @var array
   */
  protected static $registeredSkills = ['en', 'fr'];
  /**
   * User unregistered skills.
   *
   * @var array
   */
  protected static $unregisteredSkills = ['de', 'sq'];
  /**
   * Default language ID.
   *
   * @var string
   */
  protected $defaultLanguage = 'en';

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

    // By default Drupal 9.4 uses Claro theme in "standard" install profile.
    // The submit buttons in this theme located outside of "form" element.
    // The above is true for "/admin/structure/views/nojs/handler" like paths.
    // So to avoid failure on submitting form,
    // within testTranslatorsLanguageFilterInView,
    // we need to change default admin theme.
    \Drupal::service('theme_installer')->install([$this->adminTheme]);
    \Drupal::configFactory()
      ->getEditable('system.theme')
      ->set('admin', $this->adminTheme)
      ->save();

    $this->drupalLogin($this->rootUser);
    $this->translatorSkills = $this->container->get('translators.skills');
    $this->createLanguages(['fr', 'de', 'sq']);
    $this->enableTranslation('node', 'article');
    $this->drupalLogout();
  }

  /**
   * Simply check that all required modules have been installed.
   */
  public function testDependencyInstallation() {
    $this->assertTrue($this->container->get('module_handler')
      ->moduleExists('translators'));
    $this->assertTrue($this->container->get('module_handler')
      ->moduleExists('translators_content'));
    $this->assertTrue($this->container->has('translators.skills'));
  }

  /**
   * Test Content Translators integration for target language filter.
   */
  public function testTranslatorsLanguageFilterInView() {
    $this->drupalLogin($this->rootUser);
    $this->addSkill(['en', 'fr']);
    $node = $this->createTestNode();
    $this->addAllNodeTranslations($node);

    // Check that all languages are available as target language.
    $this->drupalGet('/test-translators-content-filter');
    $this->assertSession()->statusCodeEquals(200);

    $this->assertOptionCount('translation_target_language', 4);
    $this->assertOptionAvailable('translation_target_language', 'en');
    $this->assertOptionAvailable('translation_target_language', 'fr');
    $this->assertOptionAvailable('translation_target_language', 'de');
    $this->assertOptionAvailable('translation_target_language', 'sq');

    // Limit target languages to translation skills.
    $this->drupalGet('/admin/structure/views/nojs/handler/test_translators_content_integration/page_1/filter/translation_target_language');
    // Check for the default state of the options.
    $this->assertSession()->checkboxNotChecked('options[limit]');
    $this->assertSession()->checkboxNotChecked('options[column][source]');
    $this->assertSession()->checkboxChecked('options[column][target]');
    // Update options.
    $this->submitForm([
      'options[limit]'          => TRUE,
      'options[column][source]' => TRUE,
      'options[column][target]' => TRUE,
    ], 'Apply');

    $this->drupalGet('/admin/structure/views/view/test_translators_content_integration/edit/page_1');
    $this->submitForm([], 'Save');

    // Check that all languages are available as target language.
    $this->drupalGet('/test-translators-content-filter');
    $this->assertSession()->statusCodeEquals(200);

    $this->assertOptionCount('translation_target_language', 2);
    $this->assertOptionAvailable('translation_target_language', 'en');
    $this->assertOptionAvailable('translation_target_language', 'fr');
    $this->assertOptionNotAvailable('translation_target_language', 'de');
    $this->assertOptionNotAvailable('translation_target_language', 'sq');

    // Check results without any registered translation skills.
    $this->removeSkills();
    $this->drupalGet('/test-translators-content-filter');
    $this->assertSession()->statusCodeEquals(200);
    $this->assertSession()
      ->elementNotExists('css', 'table > tbody > tr:nth-child(1)');
    $this->assertOptionCount('translation_target_language', 1);
    $this->assertOptionAvailable('translation_target_language', 'All');

  }

  /**
   * Test Content Translators integration for target language filter.
   */
  public function testTranslatorsOperationLinks() {
    $userTranslatorsLimited = $this->createUser([
      'translators_content create content translations',
      'translators_content update content translations',
      'translators_content delete content translations',
      'translate any entity',
    ]);
    Node::create([
      'type' => 'article',
      'title' => "English node",
      'langcode' => 'en',
    ])->save();

    $this->drupalLogin($userTranslatorsLimited);
    $this->addSkill(['en', 'fr']);
    // Check Add translation.
    $this->drupalGet('/test-translators-content-filter', [
      'query' => [
        'langcode' => 'en',
        'translation_target_language' => 'fr',
      ],
    ]);
    $this->assertSession()->statusCodeEquals(200);
    $this->assertSession()
      ->elementTextContains(
        'css',
        "table > tbody > tr:nth-child(1) .views-field-translation-operations ul li a",
        'Add'
      );
    $this->drupalGet('/test-translators-content-filter', [
      'query' => [
        'langcode' => 'en',
        'translation_target_language' => 'de',
      ],
    ]);
    $this->assertSession()->statusCodeEquals(200);
    $this->assertSession()
      ->elementTextNotContains(
        'css',
        "table > tbody > tr:nth-child(1) .views-field-translation-operations",
        'Add'
      );
    // Check Edit translation for registered language.
    Node::load(1)->addTranslation('fr', ['title' => 'French translation '])
      ->save();
    $this->drupalGet('/test-translators-content-filter', [
      'query' => [
        'langcode' => 'en',
        'translation_target_language' => 'fr',
      ],
    ]);
    $this->assertSession()->statusCodeEquals(200);
    $edit_op_selector = 'table > tbody > tr:nth-child(1) .views-field-translation-operations ul li a[href$="/edit"]';
    $this->assertSession()
      ->elementTextContains(
        'css',
        $edit_op_selector,
        'Edit'
      );
    $this->click($edit_op_selector);
    // @todo: Fix when translators permission handeling is fixed.
    $this->assertSession()->addressEquals('fr/node/1/edit');

    // Check Delete translation for registered language.
    $this->drupalGet('/test-translators-content-filter', [
      'query' => [
        'langcode' => 'en',
        'translation_target_language' => 'fr',
      ],
    ]);
    $this->assertSession()->statusCodeEquals(200);
    $delete_op_selector = 'table > tbody > tr:nth-child(1) .views-field-translation-operations ul li a[href$="/delete"]';
    $this->assertSession()
      ->elementTextContains(
        'css',
        $delete_op_selector,
        'Delete'
      );
    $this->click($delete_op_selector);
    // @todo: Fix when translators permission handeling is fixed.
    $this->assertSession()->addressEquals('fr/node/1/delete');

    // Check translation operations for not registered languages.
    $this->drupalGet('/test-translators-content-filter', [
      'query' => [
        'langcode' => 'en',
        'translation_target_language' => 'de',
      ],
    ]);
    $this->assertSession()->statusCodeEquals(200);
    $this->assertSession()
      ->elementTextNotContains(
        'css',
        "table > tbody > tr:nth-child(1) .views-field-translation-operations",
        'Edit'
      );
    $this->assertSession()
      ->elementTextNotContains(
        'css',
        "table > tbody > tr:nth-child(1) .views-field-translation-operations",
        'Delete'
      );
  }

}

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

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