You are here

BaseFlowTest.php in TMGMT Translator Smartling 8.3

File

tests/src/Functional/BaseFlowTest.php
View source
<?php

namespace Drupal\Tests\tmgmt_smartling\Functional;

use Drupal\tmgmt\Entity\Job;
use Drupal\tmgmt\JobInterface;

/**
 * Basic flow tests.
 *
 * @group tmgmt_smartling
 */
class BaseFlowTest extends SmartlingTestBase {

  /**
   * Test upload and download translation.
   */
  public function testUploadFileAndDownloadTranslation() {
    if (!empty($this->smartlingPluginProviderSettings)) {
      $translator = $this
        ->setUpSmartlingProviderSettings($this->smartlingPluginProviderSettings);
      $job = $this
        ->requestTranslationForNode($this->testNodeId, $this->targetLanguage, $translator);
      $fileName = $job
        ->getTranslatorPlugin()
        ->getFileName($job);
      $this
        ->checkGeneratedFile($fileName, $this->testNodeTitle);

      // Check fr node title before translation (should be same as en title).
      $this
        ->drupalGet("{$this->targetLanguage}/node/{$this->testNodeId}");
      $this
        ->assertResponse(200);
      $this
        ->assertText($this->testNodeTitle);

      // Download translated file.
      $this
        ->downloadAndCheckTranslatedFile($job
        ->id(), $fileName);

      // Check translation.
      $this
        ->drupalGet("{$this->targetLanguage}/node/{$this->testNodeId}");
      $this
        ->assertResponse(200);
      $this
        ->assertNoText($this->testNodeTitle);
    }
    else {
      $this
        ->fail("Smartling settings file for simpletests not found.");
    }
  }

  /**
   * Test uploading/downloading xml file: rely on file name in tmgmt_job.
   */
  public function testUploadXmlChangeToXlfDownloadXml() {
    if (!empty($this->smartlingPluginProviderSettings)) {
      $translator = $this
        ->setUpSmartlingProviderSettings($this->smartlingPluginProviderSettings);
      $job = $this
        ->requestTranslationForNode($this->testNodeId, $this->targetLanguage, $translator);
      $fileName = $job
        ->getTranslatorPlugin()
        ->getFileName($job);
      $this
        ->checkGeneratedFile($fileName, $this->testNodeTitle);

      // Check fr node title before translation (should be same as en title).
      $this
        ->drupalGet("{$this->targetLanguage}/node/{$this->testNodeId}");
      $this
        ->assertResponse(200);
      $this
        ->assertText($this->testNodeTitle);

      // Change export format to xlf and download translated file.
      $translator
        ->setSetting('export_format', 'xlf');
      $translator
        ->save();
      $this
        ->downloadAndCheckTranslatedFile($job
        ->id(), $fileName);

      // Check translation.
      $this
        ->drupalGet("{$this->targetLanguage}/node/{$this->testNodeId}");
      $this
        ->assertResponse(200);
      $this
        ->assertNoText($this->testNodeTitle);
    }
    else {
      $this
        ->fail("Smartling settings file for simpletests not found.");
    }
  }

  /**
   * Test uploading/downloading xlf file: rely on file name in tmgmt_job.
   */
  public function testUploadXlfChangeToXmlDownloadXlf() {
    if (!empty($this->smartlingPluginProviderSettings)) {
      $providerSettings = $this->smartlingPluginProviderSettings;
      $providerSettings['settings[export_format]'] = 'xlf';
      $translator = $this
        ->setUpSmartlingProviderSettings($providerSettings);
      $job = $this
        ->requestTranslationForNode($this->testNodeId, $this->targetLanguage, $translator);
      $fileName = $job
        ->getTranslatorPlugin()
        ->getFileName($job);
      $this
        ->checkGeneratedFile($fileName, $this->testNodeTitle, $providerSettings['settings[export_format]']);

      // Check fr node title before translation (should be same as en title).
      $this
        ->drupalGet("{$this->targetLanguage}/node/{$this->testNodeId}");
      $this
        ->assertResponse(200);
      $this
        ->assertText($this->testNodeTitle);

      // Change export format to xml and download translated file.
      $translator
        ->setSetting('export_format', 'xml');
      $translator
        ->save();
      $this
        ->downloadAndCheckTranslatedFile($job
        ->id(), $fileName);

      // Check translation.
      $this
        ->drupalGet("{$this->targetLanguage}/node/{$this->testNodeId}");
      $this
        ->assertResponse(200);
      $this
        ->assertNoText($this->testNodeTitle);
    }
    else {
      $this
        ->fail("Smartling settings file for simpletests not found.");
    }
  }

  /**
   * Test request translation when there is one provider in a list.
   *
   * There was an issue when there is only one provider in the list
   * and system requests translation without checkout settings form.
   */
  public function testRequestTranslationWhenOneProviderAvailable() {
    if (!empty($this->smartlingPluginProviderSettings)) {
      $this
        ->drupalPostForm('/admin/tmgmt/translators/manage/smartling', $this->smartlingPluginProviderSettings, t('Save'));
      $this
        ->drupalPostForm('/admin/tmgmt/translators/manage/local/delete', [], t('Delete'));
      $this
        ->drupalPostForm('/admin/tmgmt/translators/manage/file/delete', [], t('Delete'));
      $this
        ->drupalPostForm('/admin/tmgmt/translators/manage/test_translator/delete', [], t('Delete'));
      $this
        ->drupalPostForm('/admin/tmgmt/sources', [
        'items[1]' => 1,
        'target_language' => 'de',
      ], t('Request translation'));
      $this
        ->assertText('One job needs to be checked out.');
      $this
        ->assertText('Create new job');
      $this
        ->assertText('Add to job');
    }
    else {
      $this
        ->fail("Smartling settings file for simpletests not found.");
    }
  }

  /**
   * Test job rejection on "file.not.found" exception while checking status.
   */
  public function testJobRejectionOnFileNotFoundExceptionWhileCheckingStatus() {
    if (!empty($this->smartlingPluginProviderSettings)) {
      $translator = $this
        ->setUpSmartlingProviderSettings($this->smartlingPluginProviderSettings);
      $job = $this
        ->requestTranslationForNode($this->testNodeId, $this->targetLanguage, $translator);
      $this
        ->assertEqual($job
        ->getState(), JobInterface::STATE_ACTIVE);
      $job->job_file_name = uniqid() . '_tmgmt_smartling_test_file_name.xml';
      $job
        ->save();
      $job
        ->getTranslatorPlugin()
        ->isReadyForDownload($job);
      $job = Job::load($job
        ->id());
      $this
        ->assertEqual($job
        ->getState(), JobInterface::STATE_REJECTED);
    }
    else {
      $this
        ->fail("Smartling settings file for simpletests not found.");
    }
  }

  /**
   * Test job rejection on "locale.not.found" exception while checking status.
   */
  public function testJobRejectionOnLocaleNotFoundExceptionWhileCheckingStatus() {
    if (!empty($this->smartlingPluginProviderSettings)) {
      $translator = $this
        ->setUpSmartlingProviderSettings($this->smartlingPluginProviderSettings);

      // Locale af-ZA isn't in test project's linguistic package so check status
      // for TMGMT Job submitted to af-ZA will throw exception locale.not.found.
      $translator
        ->set('remoteLanguages', [
        'af-ZA' => 'af-ZA',
      ]);
      $translator
        ->set('remote_languages_mappings', [
        'fr' => 'af-ZA',
      ]);
      $translator
        ->save();
      $job = $this
        ->requestTranslationForNode($this->testNodeId, $this->targetLanguage, $translator);
      $this
        ->assertEqual($job
        ->getState(), JobInterface::STATE_ACTIVE);
      $job
        ->getTranslatorPlugin()
        ->isReadyForDownload($job);
      $job = Job::load($job
        ->id());
      $this
        ->assertEqual($job
        ->getState(), JobInterface::STATE_REJECTED);
    }
    else {
      $this
        ->fail("Smartling settings file for simpletests not found.");
    }
  }

  /**
   * Test job rejection on "locale.disabled" exception while checking status.
   */
  public function testJobRejectionOnLocaleDisabledExceptionWhileCheckingStatus() {
    if (!empty($this->smartlingPluginProviderSettings)) {
      $translator = $this
        ->setUpSmartlingProviderSettings($this->smartlingPluginProviderSettings);

      // Locale fr-CA is in test project's linguistic package but disabled in
      // smartling project so check status for TMGMT Job submitted to fr-CA will
      // throw exception locale.disabled.
      $translator
        ->set('remoteLanguages', [
        'fr-CA' => 'fr-CA',
      ]);
      $translator
        ->set('remote_languages_mappings', [
        'fr' => 'fr-CA',
      ]);
      $translator
        ->save();
      $job = $this
        ->requestTranslationForNode($this->testNodeId, $this->targetLanguage, $translator);
      $this
        ->assertEqual($job
        ->getState(), JobInterface::STATE_ACTIVE);
      $job
        ->getTranslatorPlugin()
        ->isReadyForDownload($job);
      $job = Job::load($job
        ->id());
      $this
        ->assertEqual($job
        ->getState(), JobInterface::STATE_REJECTED);
    }
    else {
      $this
        ->fail("Smartling settings file for simpletests not found.");
    }
  }

}

Classes

Namesort descending Description
BaseFlowTest Basic flow tests.