View source
<?php
class TMGMTNodeSourceUITestCase extends TMGMTEntityTestCaseUtility {
static function getInfo() {
return array(
'name' => 'Node Source UI tests',
'description' => 'Tests the user interface for node translation sources.',
'group' => 'Translation Management',
);
}
function setUp() {
parent::setUp(array(
'tmgmt_node_ui',
'block',
));
$this
->loginAsAdmin(array(
'administer blocks',
));
$this
->setEnvironment('de');
$this
->setEnvironment('fr');
$this
->setEnvironment('es');
$this
->setEnvironment('el');
$edit = array(
'blocks[system_main][region]' => 'content',
);
$this
->drupalPost('admin/structure/block', $edit, t('Save blocks'));
$this
->createNodeType('page', 'Page', TRANSLATION_ENABLED, FALSE);
}
function testPermissions() {
$no_permissions = $this
->drupalCreateUser();
$this
->drupalLogin($no_permissions);
$this
->drupalGet('admin/tmgmt');
$this
->assertResponse(403);
$create_user = $this
->drupalCreateUser(array(
'access administration pages',
'translate content',
'create translation jobs',
));
$this
->drupalLogin($create_user);
$node = $this
->drupalCreateNode(array(
'type' => 'page',
'language' => 'en',
'body' => array(
'en' => array(
array(),
),
),
));
$this
->drupalGet('node/' . $node->nid);
$this
->clickLink('Translate');
$edit = array(
'languages[de]' => TRUE,
);
$this
->drupalPost(NULL, $edit, t('Request translation'));
$this
->assertText(t('One job has been created.'));
$this
->assertText(t('Translations of @title', array(
'@title' => $node->title,
)));
$this
->drupalGet('admin/tmgmt/sources');
$links = $this
->xpath('//a[contains(@title, :title)]', array(
':title' => t('Active job item: @state', array(
'@state' => t('Unprocessed'),
)),
));
$attributes = $links[0]
->attributes();
$this
->assertEqual($attributes['href'], url('admin/tmgmt/jobs/1', array(
'query' => array(
'destination' => 'admin/tmgmt/sources',
),
)));
$this
->drupalGet('admin/tmgmt');
$this
->assertResponse(200);
$this
->assertLink(t('manage'));
$this
->assertNoLink(t('submit'));
$this
->assertNoLink(t('delete'));
$this
->assertText(t('@title', array(
'@title' => $node->title,
)));
$this
->clickLink(t('manage'));
$this
->assertResponse(200);
$this
->assertNoRaw(t('Submit to translator'));
$this
->drupalGet($this
->getUrl() . '/delete');
$this
->assertResponse(403);
$submit_user = $this
->drupalCreateUser(array(
'access administration pages',
'translate content',
'submit translation jobs',
));
$this
->drupalLogin($submit_user);
$this
->drupalGet('node/' . $node->nid);
$this
->clickLink('Translate');
$this
->assertNoRaw(t('Request translation'));
$this
->drupalGet('admin/tmgmt');
$this
->assertResponse(200);
$this
->assertLink(t('submit'));
$this
->assertNoLink(t('manage'));
$this
->assertNoLink(t('delete'));
$this
->assertText(t('@title', array(
'@title' => $node->title,
)));
$element = $this
->xpath('//select[@id=:id]/option/@value', array(
':id' => 'edit-operation',
));
$options = array();
foreach ($element as $option) {
$options[] = (string) $option;
}
$this
->assertTrue(in_array('rules_component::rules_tmgmt_job_abort_translation', $options));
$this
->clickLink('submit');
$this
->drupalPost(NULL, array(), t('Submit to translator'));
$this
->assertUrl('admin/tmgmt');
$this
->assertText(t('Active'));
$this
->clickLink(t('abort'));
$this
->assertText(t('This will send a request to the translator to abort the job. After the action the job translation process will be aborted and only remaining action will be resubmitting it.'));
$this
->drupalGet('admin/tmgmt');
$this
->clickLink(t('manage'));
$this
->assertText(t('Needs review'));
$this
->assertNoLink(t('review'));
$accept_user = $this
->drupalCreateUser(array(
'access administration pages',
'accept translation jobs',
));
$this
->drupalLogin($accept_user);
$this
->drupalGet('admin/tmgmt');
$element = $this
->xpath('//select[@id=:id]/option/@value', array(
':id' => 'edit-operation',
));
$options = array();
foreach ($element as $option) {
$options[] = (string) $option;
}
$this
->assertTrue(in_array('rules_component::rules_tmgmt_job_accept_translation', $options));
$this
->clickLink('manage');
$this
->clickLink('review');
$this
->drupalPost(NULL, array(), '✓');
$this
->assertText('☑');
$this
->drupalPost(NULL, array(), t('Save as completed'));
$this
->assertText(t('Accepted'));
$this
->assertText('1/0/0');
$create_user = $this
->loginAsAdmin();
$this
->drupalLogin($create_user);
$this
->drupalGet('admin/tmgmt');
$element = $this
->xpath('//select[@id=:id]/option/@value', array(
':id' => 'edit-operation',
));
$options = array();
foreach ($element as $option) {
$options[] = (string) $option;
}
$this
->assertTrue(in_array('rules_component::rules_tmgmt_job_accept_translation', $options));
$this
->assertTrue(in_array('rules_component::rules_tmgmt_job_abort_translation', $options));
$this
->assertTrue(in_array('rules_component::rules_tmgmt_job_delete', $options));
}
function testTranslateTabSingleCheckout() {
$translater = $this
->drupalCreateUser(array(
'translate content',
'create translation jobs',
'submit translation jobs',
'accept translation jobs',
));
$this
->drupalLogin($translater);
$node = $this
->drupalCreateNode(array(
'type' => 'page',
'language' => 'en',
'body' => array(
'en' => array(
array(),
),
),
));
$this
->drupalGet('node/' . $node->nid);
$this
->clickLink('Translate');
$this
->assertText(t('Translations of @title', array(
'@title' => $node->title,
)));
$this
->assertText(t('Pending Translations'));
$edit = array(
'languages[de]' => TRUE,
);
$this
->drupalPost(NULL, $edit, t('Request translation'));
$this
->assertText(t('One job needs to be checked out.'));
$this
->assertText($node->title);
$this
->drupalGet('node/' . $node->nid . '/translate');
$this
->assertLink(t('Unprocessed'));
$this
->clickLink(t('Unprocessed'));
$this
->drupalPost(NULL, array(), t('Submit to translator'));
$this
->assertEqual(url('node/' . $node->nid . '/translate', array(
'absolute' => TRUE,
)), $this
->getUrl());
$this
->assertText(t('Test translation created.'));
$this
->assertText(t('The translation of @title to @language is finished and can now be reviewed.', array(
'@title' => $node->title,
'@language' => t('German'),
)));
$this
->clickLink(t('Needs review'));
$items = tmgmt_job_item_load_latest('node', 'node', $node->nid, 'en');
$items['de']
->acceptTranslation();
$this
->drupalGet('node/' . $node->nid . '/translate');
$this
->clickLink('de_' . $node->title);
$this
->drupalGet('node/' . $node->nid . '/translate', array(
'query' => array(
'destination' => 'node',
),
));
$edit = array(
'languages[es]' => TRUE,
);
$this
->drupalPost(NULL, $edit, t('Request translation'));
$this
->assertText(t('One job needs to be checked out.'));
$this
->assertText($node->title);
$this
->drupalPost(NULL, array(), t('Submit to translator'));
$this
->assertEqual(url('node', array(
'absolute' => TRUE,
)), $this
->getUrl());
}
function testTranslateTabMultipeCheckout() {
$translater = $this
->drupalCreateUser(array(
'translate content',
'create translation jobs',
'submit translation jobs',
'accept translation jobs',
));
$this
->drupalLogin($translater);
$node = $this
->drupalCreateNode(array(
'type' => 'page',
'language' => 'en',
'body' => array(
'en' => array(
array(),
),
),
));
$this
->drupalGet('node/' . $node->nid);
$this
->clickLink('Translate');
$this
->assertText(t('Translations of @title', array(
'@title' => $node->title,
)));
$this
->assertText(t('Pending Translations'));
$edit = array(
'languages[de]' => TRUE,
'languages[es]' => TRUE,
);
$this
->drupalPost(NULL, $edit, t('Request translation'));
$this
->assertText(t('2 jobs need to be checked out.'));
$this
->assertText($node->title);
$this
->drupalPost(NULL, array(), t('Submit to translator and continue'));
$this
->assertText($node->title);
$this
->drupalPost(NULL, array(), t('Submit to translator'));
$this
->assertEqual(url('node/' . $node->nid . '/translate', array(
'absolute' => TRUE,
)), $this
->getUrl());
$this
->assertText(t('Test translation created.'));
$this
->assertText(t('The translation of @title to @language is finished and can now be reviewed.', array(
'@title' => $node->title,
'@language' => t('Spanish'),
)));
$this
->clickLink(t('Needs review'));
$items = tmgmt_job_item_load_latest('node', 'node', $node->nid, 'en');
$items['de']
->acceptTranslation();
$items['es']
->acceptTranslation();
$this
->drupalGet('node/' . $node->nid . '/translate');
$this
->clickLink('de_' . $node->title);
$this
->drupalGet('node/' . $node->nid . '/translate');
$this
->clickLink('es_' . $node->title);
}
function testTranslateTabAutomatedCheckout() {
$default_translator = tmgmt_translator_load('test_translator');
$default_translator->settings = array(
'expose_settings' => FALSE,
);
$default_translator
->save();
$translater = $this
->drupalCreateUser(array(
'translate content',
'create translation jobs',
'submit translation jobs',
'accept translation jobs',
));
$this
->drupalLogin($translater);
$node = $this
->drupalCreateNode(array(
'type' => 'page',
'language' => 'en',
'body' => array(
'en' => array(
array(),
),
),
));
$this
->drupalGet('node/' . $node->nid);
$this
->clickLink('Translate');
$this
->assertText(t('Translations of @title', array(
'@title' => $node->title,
)));
$this
->assertText(t('Pending Translations'));
$edit = array(
'languages[de]' => TRUE,
);
$this
->drupalPost(NULL, $edit, t('Request translation'));
$this
->assertNoText(t('One job needs to be checked out.'));
$this
->assertEqual(url('node/' . $node->nid . '/translate', array(
'absolute' => TRUE,
)), $this
->getUrl());
$this
->assertText(t('Test translation created.'));
$this
->assertText(t('The translation of @title to @language is finished and can now be reviewed.', array(
'@title' => $node->title,
'@language' => t('German'),
)));
$this
->clickLink(t('Needs review'));
$items = tmgmt_job_item_load_latest('node', 'node', $node->nid, 'en');
$items['de']
->acceptTranslation();
$this
->drupalGet('node/' . $node->nid . '/translate');
$this
->clickLink('de_' . $node->title);
}
function testTranslateTabDisabledQuickCheckout() {
variable_set('tmgmt_quick_checkout', FALSE);
$default_translator = tmgmt_translator_load('test_translator');
$default_translator->settings = array(
'expose_settings' => FALSE,
);
$default_translator
->save();
$translater = $this
->drupalCreateUser(array(
'translate content',
'create translation jobs',
'submit translation jobs',
'accept translation jobs',
));
$this
->drupalLogin($translater);
$node = $this
->drupalCreateNode(array(
'type' => 'page',
'language' => 'en',
'body' => array(
'en' => array(
array(),
),
),
));
$this
->drupalGet('node/' . $node->nid);
$this
->clickLink('Translate');
$this
->assertText(t('Translations of @title', array(
'@title' => $node->title,
)));
$this
->assertText(t('Pending Translations'));
$edit = array(
'languages[de]' => TRUE,
);
$this
->drupalPost(NULL, $edit, t('Request translation'));
$this
->assertText(t('One job needs to be checked out.'));
$this
->assertText($node->title);
$this
->drupalPost(NULL, array(), t('Submit to translator'));
$this
->assertEqual(url('node/' . $node->nid . '/translate', array(
'absolute' => TRUE,
)), $this
->getUrl());
$this
->assertText(t('Test translation created.'));
$this
->assertText(t('The translation of @title to @language is finished and can now be reviewed.', array(
'@title' => $node->title,
'@language' => t('German'),
)));
$this
->clickLink(t('Needs review'));
$items = tmgmt_job_item_load_latest('node', 'node', $node->nid, 'en');
$items['de']
->acceptTranslation();
$this
->drupalGet('node/' . $node->nid . '/translate');
$this
->clickLink('de_' . $node->title);
}
function testCart() {
$nodes = array();
for ($i = 0; $i < 4; $i++) {
$nodes[] = $this
->createNode('page');
}
$this
->loginAsAdmin(array_merge($this->translator_permissions, array(
'translate content',
)));
$this
->drupalPost('admin/tmgmt/sources/node', array(
'views_bulk_operations[0]' => TRUE,
'views_bulk_operations[1]' => TRUE,
), t('Add to cart'));
$this
->drupalGet('admin/tmgmt/cart');
$this
->assertText($nodes[0]->title);
$this
->assertText($nodes[1]->title);
$this
->drupalGet('node/' . $nodes[3]->nid . '/translate');
$this
->assertRaw(t('There are @count items in the <a href="@url">translation cart</a>.', array(
'@count' => 2,
'@url' => url('admin/tmgmt/cart'),
)));
$this
->drupalPost(NULL, array(), t('Add to cart'));
$this
->assertRaw(t('@count content source was added into the <a href="@url">cart</a>.', array(
'@count' => 1,
'@url' => url('admin/tmgmt/cart'),
)));
$this
->assertRaw(t('There are @count items in the <a href="@url">translation cart</a> including the current item.', array(
'@count' => 3,
'@url' => url('admin/tmgmt/cart'),
)));
}
}