You are here

function TMGMTUITestCase::testCheckoutForm in Translation Management Tool 7

Test the page callbacks to create jobs and check them out.

File

ui/tmgmt_ui.test, line 29

Class

TMGMTUITestCase
Test the UI of tmgmt, for example the checkout form.

Code

function testCheckoutForm() {

  // Add a first item to the job. This will auto-create the job.
  $job = tmgmt_job_match_item('en', '');
  $job
    ->addItem('test_source', 'test', 1);

  // Go to checkout form.
  $redirects = tmgmt_ui_job_checkout_multiple(array(
    $job,
  ));
  $this
    ->drupalGet(reset($redirects));

  // Check checkout form.
  $this
    ->assertText('test_source:test:1');

  // Add two more job items.
  $job
    ->addItem('test_source', 'test', 2);
  $job
    ->addItem('test_source', 'test', 3);

  // Go to checkout form.
  $redirects = tmgmt_ui_job_checkout_multiple(array(
    $job,
  ));
  $this
    ->drupalGet(reset($redirects));

  // Check checkout form.
  $this
    ->assertText('test_source:test:1');
  $this
    ->assertText('test_source:test:2');
  $this
    ->assertText('test_source:test:3');

  // @todo: Test ajax functionality.
  // Attempt to translate into greek.
  $edit = array(
    'target_language' => 'el',
    'settings[action]' => 'translate',
  );
  $this
    ->drupalPost(NULL, $edit, t('Submit to translator'));
  $this
    ->assertText(t('@translator can not translate from @source to @target.', array(
    '@translator' => 'Test translator (auto created)',
    '@source' => 'English',
    '@target' => 'Greek',
  )));

  // Job still needs to be in state new.
  $job = entity_load_unchanged('tmgmt_job', $job->tjid);
  $this
    ->assertTrue($job
    ->isUnprocessed());
  $edit = array(
    'target_language' => 'es',
    'settings[action]' => 'translate',
  );
  $this
    ->drupalPost(NULL, $edit, t('Submit to translator'));

  // Job needs to be in state active.
  $job = entity_load_unchanged('tmgmt_job', $job->tjid);
  $this
    ->assertTrue($job
    ->isActive());
  foreach ($job
    ->getItems() as $job_item) {

    /* @var $job_item TMGMTJobItem */
    $this
      ->assertTrue($job_item
      ->isNeedsReview());
  }
  $this
    ->assertText(t('Test translation created'));
  $this
    ->assertNoText(t('Test translator called'));

  // Test redirection.
  $this
    ->assertText(t('Job overview'));

  // Another job.
  $previous_tjid = $job->tjid;
  $job = tmgmt_job_match_item('en', '');
  $job
    ->addItem('test_source', 'test', 1);
  $this
    ->assertNotEqual($job->tjid, $previous_tjid);

  // Go to checkout form.
  $redirects = tmgmt_ui_job_checkout_multiple(array(
    $job,
  ));
  $this
    ->drupalGet(reset($redirects));

  // Check checkout form.
  $this
    ->assertText('You can provide a label for this job in order to identify it easily later on.');
  $this
    ->assertText('test_source:test:1');
  $edit = array(
    'target_language' => 'es',
    'settings[action]' => 'submit',
  );
  $this
    ->drupalPost(NULL, $edit, t('Submit to translator'));
  $this
    ->assertText(t('Test submit'));
  $job = entity_load_unchanged('tmgmt_job', $job->tjid);
  $this
    ->assertTrue($job
    ->isActive());

  // Another job.
  $job = tmgmt_job_match_item('en', 'es');
  $job
    ->addItem('test_source', 'test', 1);

  // Go to checkout form.
  $redirects = tmgmt_ui_job_checkout_multiple(array(
    $job,
  ));
  $this
    ->drupalGet(reset($redirects));

  // Check checkout form.
  $this
    ->assertText('You can provide a label for this job in order to identify it easily later on.');
  $this
    ->assertText('test_source:test:1');
  $edit = array(
    'settings[action]' => 'reject',
  );
  $this
    ->drupalPost(NULL, $edit, t('Submit to translator'));
  $this
    ->assertText(t('This is not supported'));
  $job = entity_load_unchanged('tmgmt_job', $job->tjid);
  $this
    ->assertTrue($job
    ->isRejected());

  // Check displayed job messages.
  $args = array(
    '@view' => 'view-tmgmt-ui-job-messages',
  );
  $this
    ->assertEqual(2, count($this
    ->xpath('//div[contains(@class, @view)]//tbody/tr', $args)));

  // Check that the author for each is the current user.
  $message_authors = $this
    ->xpath('////div[contains(@class, @view)]//td[contains(@class, @field)]/span', $args + array(
    '@field' => 'views-field-name',
  ));
  $this
    ->assertEqual(2, count($message_authors));
  foreach ($message_authors as $message_author) {
    $this
      ->assertEqual((string) $message_author, $this->translator_user->name);
  }

  // Make sure that rejected jobs can be re-submitted.
  $this
    ->assertTrue($job
    ->isSubmittable());
  $edit = array(
    'settings[action]' => 'translate',
  );
  $this
    ->drupalPost(NULL, $edit, t('Submit to translator'));
  $this
    ->assertText(t('Test translation created'));

  // Another job.
  $job = tmgmt_job_match_item('en', 'es');
  $job
    ->addItem('test_source', 'test', 1);

  // Go to checkout form.
  $redirects = tmgmt_ui_job_checkout_multiple(array(
    $job,
  ));
  $this
    ->drupalGet(reset($redirects));

  // Check checkout form.
  $this
    ->assertText('You can provide a label for this job in order to identify it easily later on.');
  $this
    ->assertText('test_source:test:1');
  $edit = array(
    'settings[action]' => 'fail',
  );
  $this
    ->drupalPost(NULL, $edit, t('Submit to translator'));
  $this
    ->assertText(t('Service not reachable'));
  $job = entity_load_unchanged('tmgmt_job', $job->tjid);
  $this
    ->assertTrue($job
    ->isUnprocessed());

  // Verify that we are still on the form.
  $this
    ->assertText('You can provide a label for this job in order to identify it easily later on.');

  // Another job.
  $job = tmgmt_job_match_item('en', 'es');
  $job
    ->addItem('test_source', 'test', 1);

  // Go to checkout form.
  $redirects = tmgmt_ui_job_checkout_multiple(array(
    $job,
  ));
  $this
    ->drupalGet(reset($redirects));

  // Check checkout form.
  $this
    ->assertText('You can provide a label for this job in order to identify it easily later on.');
  $this
    ->assertText('test_source:test:1');
  $edit = array(
    'settings[action]' => 'not_translatable',
  );
  $this
    ->drupalPost(NULL, $edit, t('Submit to translator'));

  // @todo Update to correct failure message.
  $this
    ->assertText(t('Fail'));
  $job = entity_load_unchanged('tmgmt_job', $job->tjid);
  $this
    ->assertTrue($job
    ->isUnprocessed());

  // Test default settings.
  $this->default_translator->settings['action'] = 'reject';
  $this->default_translator
    ->save();
  $job = tmgmt_job_match_item('en', 'es');
  $job
    ->addItem('test_source', 'test', 1);

  // Go to checkout form.
  $redirects = tmgmt_ui_job_checkout_multiple(array(
    $job,
  ));
  $this
    ->drupalGet(reset($redirects));

  // Check checkout form.
  $this
    ->assertText('You can provide a label for this job in order to identify it easily later on.');
  $this
    ->assertText('test_source:test:1');

  // The action should now default to reject.
  $this
    ->drupalPost(NULL, array(), t('Submit to translator'));
  $this
    ->assertText(t('This is not supported.'));
  $job = entity_load_unchanged('tmgmt_job', $job->tjid);
  $this
    ->assertTrue($job
    ->isRejected());
}