You are here

function TMGMTPluginsTestCase::testBasicWorkflow in Translation Management Tool 7

File

tests/tmgmt.plugin.test, line 45

Class

TMGMTPluginsTestCase
Tests interaction between core and the plugins.

Code

function testBasicWorkflow() {

  // Submit a translation job.
  $submit_job = $this
    ->createJob();
  $submit_job->settings = array(
    'action' => 'submit',
  );
  $submit_job
    ->requestTranslation();
  $submit_job = tmgmt_job_load($submit_job->tjid);
  $this
    ->assertTrue($submit_job
    ->isActive());
  $messages = $submit_job
    ->getMessages();
  $last_message = end($messages);
  $this
    ->assertEqual('Test submit.', $last_message->message);

  // Translate a job.
  $translate_job = $this
    ->createJob();
  $translate_job->settings = array(
    'action' => 'translate',
  );
  $translate_job
    ->requestTranslation();
  $translate_job = tmgmt_job_load($translate_job->tjid);
  foreach ($translate_job
    ->getItems() as $job_item) {
    $this
      ->assertTrue($job_item
      ->isNeedsReview());
  }
  $messages = $translate_job
    ->getMessages();

  // array_values() results in numeric keys, which is necessary for list.
  list($debug, $translated, $needs_review) = array_values($messages);
  $this
    ->assertEqual('Test translator called.', $debug->message);
  $this
    ->assertEqual('debug', $debug->type);
  $this
    ->assertEqual('Test translation created.', $translated->message);
  $this
    ->assertEqual('status', $translated->type);

  // The third message is specific to a job item and has different state
  // constants.
  $this
    ->assertEqual('The translation of !source to @language is finished and can now be <a href="!review_url">reviewed</a>.', $needs_review->message);
  $this
    ->assertEqual('status', $needs_review->type);
  $i = 1;
  foreach ($translate_job
    ->getItems() as $item) {

    // Check the translated text.
    if ($i != 3) {
      $expected_text = 'de_Text for job item with type ' . $item->item_type . ' and id ' . $item->item_id . '.';
    }
    else {

      // The third item has an explicitly stored data value.
      $expected_text = 'de_Stored data';
    }
    $item_data = $item
      ->getData();
    $this
      ->assertEqual($expected_text, $item_data['dummy']['deep_nesting']['#translation']['#text']);
    $i++;
  }
  foreach ($translate_job
    ->getItems() as $job_item) {
    $job_item
      ->acceptTranslation();
  }

  // @todo Accepting does not result in messages on the job anymore.
  // Update once there are job item messages.

  /*
      $messages = $translate_job->getMessages();
      $last_message = end($messages);
      $this->assertEqual('Job accepted', $last_message->message);
      $this->assertEqual('status', $last_message->type);*/

  // Check if the translations have been "saved".
  foreach ($translate_job
    ->getItems() as $item) {
    $this
      ->assertTrue(variable_get('tmgmt_test_saved_translation_' . $item->item_type . '_' . $item->item_id, FALSE));
  }

  // A rejected job.
  $reject_job = $this
    ->createJob();
  $reject_job->settings = array(
    'action' => 'reject',
  );
  $reject_job
    ->requestTranslation();

  // Still rejected.
  $this
    ->assertTrue($reject_job
    ->isRejected());
  $messages = $reject_job
    ->getMessages();
  $last_message = end($messages);
  $this
    ->assertEqual('This is not supported.', $last_message->message);
  $this
    ->assertEqual('error', $last_message->type);

  // A failing job.
  $failing_job = $this
    ->createJob();
  $failing_job->settings = array(
    'action' => 'fail',
  );
  $failing_job
    ->requestTranslation();

  // Still new.
  $this
    ->assertTrue($failing_job
    ->isUnprocessed());
  $messages = $failing_job
    ->getMessages();
  $last_message = end($messages);
  $this
    ->assertEqual('Service not reachable.', $last_message->message);
  $this
    ->assertEqual('error', $last_message->type);
}