local_translation-8.x-1.x-dev/modules/local_translation_content/src/LocalTranslationContentTestsTrait.php

modules/local_translation_content/src/LocalTranslationContentTestsTrait.php
<?php

namespace Drupal\local_translation_content;

use Drupal\Core\Entity\EntityStorageException;
use Drupal\language\Entity\ConfigurableLanguage;
use Drupal\node\Entity\Node;

/**
 * Trait LocalTranslationContentTestsTrait.
 *
 * @package Drupal\local_translation_content
 */
trait LocalTranslationContentTestsTrait {

  /**
   * Local translation skills service.
   *
   * @var \Drupal\local_translation\Services\LocalTranslationUserSkills
   */
  protected $skills;
  /**
   * 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';

  /**
   * Additional steps for tests set up.
   */
  protected function setUpTest() {
    $this->drupalLogin($this->rootUser);
    $this->skills = $this->container->get('local_translation.user_skills');
    $this->createLanguages();
    $this->enableTranslation('node', 'article');
    $this->enablePermissionsChecking();
    $this->enableAllowAccessBySourceLanguageSkills();
    $this->enableAutoPresetSourceLanguage();
    $this->enableFilterTranslationTabToSkills();
    $this->drupalLogout();
  }

  /**
   * Get array of all testing languages.
   *
   * @return array
   *   All testing langcodes array.
   */
  private static function getAllTestingLanguages() {
    return array_merge(static::$registeredSkills, static::$unregisteredSkills);
  }

  /**
   * Enable permissions checking.
   *
   * @param bool $negate
   *   An option to negate the enabling, e.g. disabling this option.
   */
  protected function enablePermissionsChecking($negate = FALSE) {
    $this->drupalPostForm(
      '/admin/config/regional/local_translation',
      ['enable_local_translation_content_permissions' => !$negate],
      'Save configuration'
    );
    $this->assertSession()->statusCodeEquals(200);
    $this->assertTextHelper('The configuration options have been saved.', FALSE);
  }

  /**
   * Enable "Filter translation tab to users translation skills" feature.
   *
   * @param bool $negate
   *   An option to negate the enabling, e.g. disabling this option.
   */
  protected function enableFilterTranslationTabToSkills($negate = FALSE) {
    $this->drupalPostForm(
      '/admin/config/regional/local_translation',
      ['enable_filter_translation_tab_to_skills' => !$negate],
      'Save configuration'
    );
    $this->assertSession()->statusCodeEquals(200);
    $this->assertTextHelper('The configuration options have been saved.', FALSE);
  }

  /**
   * Enable preseting source language to the users translation skills.
   *
   * @param bool $negate
   *   An option to negate the enabling, e.g. disabling this option.
   */
  protected function enableAutoPresetSourceLanguage($negate = FALSE) {
    $this->drupalPostForm(
      '/admin/config/regional/local_translation',
      ['enable_auto_preset_source_language_by_skills' => !$negate],
      'Save configuration'
    );
    $this->assertSession()->statusCodeEquals(200);
    $this->assertTextHelper('The configuration options have been saved.', FALSE);
  }

  /**
   * Enable limiting source language by a registered source skill.
   *
   * @param bool $negate
   *   An option to negate the enabling, e.g. disabling this option.
   */
  protected function enableAllowAccessBySourceLanguageSkills($negate = FALSE) {
    $this->drupalPostForm(
      '/admin/config/regional/local_translation',
      ['enable_access_by_source_skills' => !$negate],
      'Save configuration'
    );
    $this->assertSession()->statusCodeEquals(200);
    $this->assertTextHelper('The configuration options have been saved.', FALSE);
  }

  /**
   * Change language settings for entity types.
   *
   * @param string $category
   *   Entity category (e.g. node).
   * @param string $subcategory
   *   Entity subcategory (e.g. article).
   */
  protected function enableTranslation($category, $subcategory) {
    $this->drupalPostForm('admin/config/regional/content-language', [
      "entity_types[$category]"                                                   => 1,
      "settings[$category][$subcategory][translatable]"                           => 1,
      "settings[$category][$subcategory][settings][language][language_alterable]" => 1,
    ], 'Save configuration');
    \Drupal::entityTypeManager()->clearCachedDefinitions();
  }

  /**
   * Create testing node.
   *
   * @param null|int|string $author_id
   *   Optional. Author's user ID.
   *
   * @return int
   *   Node ID.
   *
   * @throws \Drupal\Core\Entity\EntityStorageException
   */
  protected function createTestNode($author_id = NULL) {
    $values = ['type' => 'article', 'title' => $this->randomString()];
    if (!empty($author_id)) {
      $values['uid'] = $author_id;
    }
    $this->assertEqual(1, Node::create($values)->save());
    // Ensure node we've created is exists.
    $this->assertNotNull(Node::load(1));
    return 1;
  }

  /**
   * Add test translations to the node.
   *
   * @param \Drupal\node\Entity\Node $node
   *   Node object.
   * @param null|int|string $author_id
   *   Optional. Author's user ID.
   *
   * @throws \Drupal\Core\Entity\EntityStorageException
   */
  protected function addTestTranslations(Node $node, $author_id = NULL) {
    $values = ['title' => $this->randomString()];
    if (!empty($author_id)) {
      $values['uid'] = $author_id;
    }

    foreach (static::getAllTestingLanguages() as $language) {
      // Skip default language.
      if ($language === $this->defaultLanguage) {
        continue;
      }
      $node->addTranslation($language, $values)->save();
    }
  }

  /**
   * Register translation skills for testing.
   *
   * @throws \Drupal\Core\Entity\EntityStorageException
   */
  protected function registerTestSkills() {
    $this->skills->addSkill(static::$registeredSkills);
    foreach (static::$registeredSkills as $skill) {
      $this->assertTrue($this->skills->userHasSkill($skill));
    }
  }

  /**
   * Create additional languages for testing.
   */
  protected function createLanguages() {
    try {
      foreach (static::getAllTestingLanguages() as $language) {
        if ($language === $this->defaultLanguage) {
          continue;
        }
        $this->assertEqual(1, ConfigurableLanguage::createFromLangcode($language)->save());
      }
    }
    catch (EntityStorageException $e) {
      $this->fail('Additional languages have not been created');
    }
  }

  /**
   * Helper wrapper for the response code assertion.
   *
   * @param int $code
   *   Expected response code.
   * @param bool $negate
   *   Optional. Flag for whether checking code equality or NOT equality.
   *   Defaults to FALSE.
   */
  protected function assertResponseCode($code, $negate = FALSE) {
    if (!$negate) {
      $this->assertSession()->statusCodeEquals($code);
    }
    else {
      $this->assertSession()->statusCodeNotEquals($code);
    }
  }

}

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

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