tmgmt-8.x-1.x-dev/tests/src/Functional/TranslatorTest.php

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

namespace Drupal\Tests\tmgmt\Functional;

use Drupal\tmgmt\Entity\Job;
use Drupal\tmgmt\Entity\JobItem;

/**
 * Verifies functionality of translator handling
 *
 * @group tmgmt
 */
class TranslatorTest extends TMGMTTestBase {

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

    // Login as admin to be able to set environment variables.
    $this->loginAsAdmin();
    $this->addLanguage('de');
    $this->addLanguage('es');
    $this->addLanguage('el');

    // Login as translation administrator to run these tests.
    $this->loginAsTranslator(array(
      'administer tmgmt',
    ), TRUE);
  }


  /**
   * Tests creating and deleting a translator.
   */
  function testTranslatorHandling() {
    // Create a translator for later deletion.
    $translator = parent::createTranslator();
    // Does the translator exist in the listing?
    $this->drupalGet('admin/tmgmt/translators');
    $this->assertSession()->pageTextContains($translator->label());
    $this->assertCount(2, $this->xpath('//tbody/tr'));

    // Create job, attach to the translator and activate.
    $job = $this->createJob();
    $job->settings = array();
    $job->save();
    $job->setState(Job::STATE_ACTIVE);
    $item = $job->addItem('test_source', 'test', 1);
    $this->drupalGet('admin/tmgmt/items/' . $item->id());
    $this->assertSession()->pageTextContains('(Undefined)');
    $job->translator = $translator;
    $job->save();

    // Try to delete the translator, should fail because of active job.
    $delete_url = '/admin/tmgmt/translators/manage/' . $translator->id() . '/delete';
    $this->drupalGet($delete_url);
    $this->assertSession()->statusCodeEquals(403);

    // Create a continuous job.
    $continuous = $this->createJob('en', 'de', 1, ['label' => 'Continuous', 'job_type' => Job::TYPE_CONTINUOUS]);
    $continuous->translator = $translator;
    $continuous->save();

    // Delete a provider using an API call and assert that active job and its
    // job item used by deleted translator were aborted.
    $translator->delete();
    /** @var \Drupal\tmgmt\JobInterface $job */
    $job = Job::load($job->id());
    $continuous = Job::load($continuous->id());
    $this->assertEquals(Job::STATE_ABORTED, $job->getState());
    $item = $job->getMostRecentItem('test_source', 'test', 1);
    $this->assertEquals(JobItem::STATE_ABORTED, $item->getState());
    $this->assertEquals(Job::STATE_ABORTED, $continuous->getState());

    // Delete a finished job.
    $translator = parent::createTranslator();
    $job = $this->createJob();
    $job->translator = $translator;
    $item = $job->addItem('test_source', 'test', 2);
    $job->setState(Job::STATE_FINISHED);
    $job->set('label', $job->label());
    $job->save();
    $delete_url = '/admin/tmgmt/translators/manage/' . $translator->id() . '/delete';
    $this->drupalGet($delete_url);
    $this->submitForm([], 'Delete');
    $this->assertSession()->pageTextContains('Add provider');
    // Check if the list of translators has 1 row.
    $this->assertCount(1, $this->xpath('//tbody/tr'));
    $this->assertSession()->pageTextContains(t('@label has been deleted.', array('@label' => $translator->label())));

    // Check if the clone action works.
    $this->clickLink('Clone');
    $edit = array(
      'name' => $translator->id() . '_clone',
    );
    $this->submitForm($edit, 'Save');
    // Check if the list of translators has 2 row.
    $this->assertCount(2, $this->xpath('//tbody/tr'));
    $this->assertSession()->pageTextContains('configuration has been created');
    // Assert that the job works and there is a text saying that the translator
    // is missing.
    $this->drupalGet('admin/tmgmt/jobs/' . $job->id());
    $this->assertSession()->pageTextContains('The job has no provider assigned.');

    // Assert that also the job items are working.
    $this->drupalGet('admin/tmgmt/items/' . $item->id());
    $this->assertSession()->pageTextContains('(Missing)');

    // Testing the translators form with no installed translator plugins.
    // Uninstall the test module (which provides a translator).
    \Drupal::service('module_installer')->uninstall(array('tmgmt_test'), FALSE);

    // Assert that job deletion works correctly.
    \Drupal::service('module_installer')->install(array('tmgmt_file'), FALSE);
    $this->drupalGet($job->toUrl('delete-form'));
    $this->submitForm([], 'Delete');
    $this->assertSession()->statusCodeEquals(200);
    $this->assertSession()->pageTextContains(t('The translation job @value has been deleted.', array('@value' => $job->label())));
    \Drupal::service('module_installer')->uninstall(array('tmgmt_file'), FALSE);

    // Get the overview.
    $this->drupalGet('admin/tmgmt/translators');
    $this->assertSession()->pageTextNotContains('Add provider');
    $this->assertSession()->pageTextContains('There are no provider plugins available. Please install a provider plugin.');
  }

  /**
   * Tests remote languages mappings support in the tmgmt core.
   */
  public function testRemoteLanguagesMappings() {
    $mappings = $this->default_translator->getRemoteLanguagesMappings();
    $this->assertEquals(array(
      'en' => 'en-us',
      'de' => 'de-ch',
      'el' => 'el',
      'es' => 'es',
    ), $mappings);

    $this->assertEquals('en-us', $this->default_translator->mapToRemoteLanguage('en'));
    $this->assertEquals('de-ch', $this->default_translator->mapToRemoteLanguage('de'));

    $remote_language_mappings = $this->default_translator->get('remote_languages_mappings');
    $remote_language_mappings['de'] = 'de-de';
    $remote_language_mappings['en'] = 'en-uk';
    $this->default_translator->set('remote_languages_mappings', $remote_language_mappings);
    $this->default_translator->save();

    $this->assertEquals('en-uk', $this->default_translator->mapToRemoteLanguage('en'));
    $this->assertEquals('de-de', $this->default_translator->mapToRemoteLanguage('de'));

    // Test the fallback.
    $this->container->get('state')->set('tmgmt_test_translator_map_languages', FALSE);
    $this->container->get('plugin.manager.tmgmt.translator')->clearCachedDefinitions();

    $this->assertEquals('en', $this->default_translator->mapToRemoteLanguage('en'));
    $this->assertEquals('de', $this->default_translator->mapToRemoteLanguage('de'));
  }

}

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

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