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.');
}