123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450 |
- <?php
- /**
- * Basic Node Source UI tests.
- */
- 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'));
- // We need the administer blocks permission.
- $this->loginAsAdmin(array('administer blocks'));
- $this->setEnvironment('de');
- $this->setEnvironment('fr');
- $this->setEnvironment('es');
- $this->setEnvironment('el');
- // @todo Re-enable this when switching to testing profile.
- // Enable the main page content block for hook_page_alter() to work.
- $edit = array(
- 'blocks[system_main][region]' => 'content',
- );
- $this->drupalPost('admin/structure/block', $edit, t('Save blocks'));
- $this->createNodeType('page', 'Page', TRANSLATION_ENABLED, FALSE);
- }
- /**
- * Tests the create, submit and accept permissions.
- */
- function testPermissions() {
- $no_permissions = $this->drupalCreateUser();
- $this->drupalLogin($no_permissions);
- $this->drupalGet('admin/tmgmt');
- $this->assertResponse(403);
- // Test with a user that is only allowed to create jobs.
- $create_user = $this->drupalCreateUser(array('access administration pages', 'translate content', 'create translation jobs'));
- $this->drupalLogin($create_user);
- // Create an english source node.
- $node = $this->drupalCreateNode(array('type' => 'page', 'language' => 'en', 'body' => array('en' => array(array()))));
- // Go to the translate tab.
- $this->drupalGet('node/' . $node->nid);
- $this->clickLink('Translate');
- // Request a translation for german.
- $edit = array(
- 'languages[de]' => TRUE,
- );
- $this->drupalPost(NULL, $edit, t('Request translation'));
- $this->assertText(t('One job has been created.'));
- // Verify that we are still on the translate tab.
- $this->assertText(t('Translations of @title', array('@title' => $node->title)));
- // The job is unprocessed, check the status flag in the source list.
- $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();
- // Check if the found link points to the job checkout page instead of the
- // job item review form.
- $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'));
- // Try to access the delete page directly.
- $this->drupalGet($this->getUrl() . '/delete');
- $this->assertResponse(403);
- // Log in as user with only submit permission.
- $submit_user = $this->drupalCreateUser(array('access administration pages', 'translate content', 'submit translation jobs'));
- $this->drupalLogin($submit_user);
- // Go to the translate tab, verify that there is no request translation
- // button.
- $this->drupalGet('node/' . $node->nid);
- $this->clickLink('Translate');
- $this->assertNoRaw(t('Request translation'));
- // Go to the overview and submit the job.
- $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)));
- // Check VBO actions - "submit translation job" has the right to cancel
- // translation only.
- $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));
- // Go to the job checkout page and submit it.
- $this->clickLink('submit');
- $this->drupalPost(NULL, array(), t('Submit to translator'));
- // After submit the redirect goes back to the job overview.
- $this->assertUrl('admin/tmgmt');
- // Make sure that the job is active now.
- $this->assertText(t('Active'));
- // Click abort link and check if we are at the job abort confirm page.
- $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.'));
- // Return back to job overview and test the manage link.
- $this->drupalGet('admin/tmgmt');
- $this->clickLink(t('manage'));
- $this->assertText(t('Needs review'));
- $this->assertNoLink(t('review'));
- // Now log in as user with only accept permission and review the job.
- $accept_user = $this->drupalCreateUser(array('access administration pages', 'accept translation jobs'));
- $this->drupalLogin($accept_user);
- $this->drupalGet('admin/tmgmt');
- // Check VBO actions - "accept translation jobs" has the right to accept
- // translation only.
- $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(), '✓');
- // Verify that the accepted character is shown.
- $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');
- // Check VBO actions - "administer tmgmt" has rights for all actions.
- $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));
- // Go to the translate tab, verify that there is no request translation
- // button.
- //$this->drupalGet('node/' . $node->nid);
- //$this->clickLink('Translate');
- //$this->assertNoRaw(t('Request translation'));
- }
- /**
- * Test the translate tab for a single checkout.
- */
- function testTranslateTabSingleCheckout() {
- // Create a user that is allowed to translate nodes.
- $translater = $this->drupalCreateUser(array('translate content', 'create translation jobs', 'submit translation jobs', 'accept translation jobs'));
- $this->drupalLogin($translater);
- // Create an english source node.
- $node = $this->drupalCreateNode(array('type' => 'page', 'language' => 'en', 'body' => array('en' => array(array()))));
- // Go to the translate tab.
- $this->drupalGet('node/' . $node->nid);
- $this->clickLink('Translate');
- // Assert some basic strings on that page.
- $this->assertText(t('Translations of @title', array('@title' => $node->title)));
- $this->assertText(t('Pending Translations'));
- // Request a translation for german.
- $edit = array(
- 'languages[de]' => TRUE,
- );
- $this->drupalPost(NULL, $edit, t('Request translation'));
- // Verify that we are on the translate tab.
- $this->assertText(t('One job needs to be checked out.'));
- $this->assertText($node->title);
- // Go to the translate tab and check if the pending translation label is
- // "Unprocessed" and links to the job checkout page.
- $this->drupalGet('node/' . $node->nid . '/translate');
- $this->assertLink(t('Unprocessed'));
- $this->clickLink(t('Unprocessed'));
- // Submit.
- $this->drupalPost(NULL, array(), t('Submit to translator'));
- // Make sure that we're back on the translate tab.
- $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'))));
- // Review.
- $this->clickLink(t('Needs review'));
- // @todo Review job throuh the UI.
- $items = tmgmt_job_item_load_latest('node', 'node', $node->nid, 'en');
- $items['de']->acceptTranslation();
- // German node should now be listed and be clickable.
- $this->drupalGet('node/' . $node->nid . '/translate');
- $this->clickLink('de_' . $node->title);
- // Test that the destination query argument does not break the redirect
- // and we are redirected back to the correct page.
- $this->drupalGet('node/' . $node->nid . '/translate', array('query' => array('destination' => 'node')));
- // Request a spanish translation.
- $edit = array(
- 'languages[es]' => TRUE,
- );
- $this->drupalPost(NULL, $edit, t('Request translation'));
- // Verify that we are on the checkout page.
- $this->assertText(t('One job needs to be checked out.'));
- $this->assertText($node->title);
- $this->drupalPost(NULL, array(), t('Submit to translator'));
- // Make sure that we're back on the originally defined destination URL.
- $this->assertEqual(url('node', array('absolute' => TRUE)), $this->getUrl());
- }
- /**
- * Test the translate tab for a single checkout.
- */
- function testTranslateTabMultipeCheckout() {
- // Create a user that is allowed to translate nodes.
- $translater = $this->drupalCreateUser(array('translate content', 'create translation jobs', 'submit translation jobs', 'accept translation jobs'));
- $this->drupalLogin($translater);
- // Create an english source node.
- $node = $this->drupalCreateNode(array('type' => 'page', 'language' => 'en', 'body' => array('en' => array(array()))));
- // Go to the translate tab.
- $this->drupalGet('node/' . $node->nid);
- $this->clickLink('Translate');
- // Assert some basic strings on that page.
- $this->assertText(t('Translations of @title', array('@title' => $node->title)));
- $this->assertText(t('Pending Translations'));
- // Request a translation for german.
- $edit = array(
- 'languages[de]' => TRUE,
- 'languages[es]' => TRUE,
- );
- $this->drupalPost(NULL, $edit, t('Request translation'));
- // Verify that we are on the translate tab.
- $this->assertText(t('2 jobs need to be checked out.'));
- // Submit all jobs.
- $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'));
- // Make sure that we're back on the translate tab.
- $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'))));
- // Review.
- $this->clickLink(t('Needs review'));
- // @todo Review job throuh the UI.
- $items = tmgmt_job_item_load_latest('node', 'node', $node->nid, 'en');
- $items['de']->acceptTranslation();
- $items['es']->acceptTranslation();
- // Translated nodes should now be listed and be clickable.
- $this->drupalGet('node/' . $node->nid . '/translate');
- $this->clickLink('de_' . $node->title);
- // Translated nodes should now be listed and be clickable.
- $this->drupalGet('node/' . $node->nid . '/translate');
- $this->clickLink('es_' . $node->title);
- }
- /**
- * Test the translate tab for a single checkout.
- */
- function testTranslateTabAutomatedCheckout() {
- // Hide settings on the test translator.
- $default_translator = tmgmt_translator_load('test_translator');
- $default_translator->settings = array(
- 'expose_settings' => FALSE,
- );
- $default_translator->save();
- // Create a user that is allowed to translate nodes.
- $translater = $this->drupalCreateUser(array('translate content', 'create translation jobs', 'submit translation jobs', 'accept translation jobs'));
- $this->drupalLogin($translater);
- // Create an english source node.
- $node = $this->drupalCreateNode(array('type' => 'page', 'language' => 'en', 'body' => array('en' => array(array()))));
- // Go to the translate tab.
- $this->drupalGet('node/' . $node->nid);
- $this->clickLink('Translate');
- // Assert some basic strings on that page.
- $this->assertText(t('Translations of @title', array('@title' => $node->title)));
- $this->assertText(t('Pending Translations'));
- // Request a translation for german.
- $edit = array(
- 'languages[de]' => TRUE,
- );
- $this->drupalPost(NULL, $edit, t('Request translation'));
- // Verify that we are on the translate tab.
- $this->assertNoText(t('One job needs to be checked out.'));
- // Make sure that we're back on the translate tab.
- $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'))));
- // Review.
- $this->clickLink(t('Needs review'));
- // @todo Review job throuh the UI.
- $items = tmgmt_job_item_load_latest('node', 'node', $node->nid, 'en');
- $items['de']->acceptTranslation();
- // German node should now be listed and be clickable.
- $this->drupalGet('node/' . $node->nid . '/translate');
- $this->clickLink('de_' . $node->title);
- }
- /**
- * Test the translate tab for a single checkout.
- */
- function testTranslateTabDisabledQuickCheckout() {
- variable_set('tmgmt_quick_checkout', FALSE);
- // Hide settings on the test translator.
- $default_translator = tmgmt_translator_load('test_translator');
- $default_translator->settings = array(
- 'expose_settings' => FALSE,
- );
- $default_translator->save();
- // Create a user that is allowed to translate nodes.
- $translater = $this->drupalCreateUser(array('translate content', 'create translation jobs', 'submit translation jobs', 'accept translation jobs'));
- $this->drupalLogin($translater);
- // Create an english source node.
- $node = $this->drupalCreateNode(array('type' => 'page', 'language' => 'en', 'body' => array('en' => array(array()))));
- // Go to the translate tab.
- $this->drupalGet('node/' . $node->nid);
- $this->clickLink('Translate');
- // Assert some basic strings on that page.
- $this->assertText(t('Translations of @title', array('@title' => $node->title)));
- $this->assertText(t('Pending Translations'));
- // Request a translation for german.
- $edit = array(
- 'languages[de]' => TRUE,
- );
- $this->drupalPost(NULL, $edit, t('Request translation'));
- // Verify that we are on the translate tab.
- $this->assertText(t('One job needs to be checked out.'));
- $this->assertText($node->title);
- // Submit.
- $this->drupalPost(NULL, array(), t('Submit to translator'));
- // Make sure that we're back on the translate tab.
- $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'))));
- // Review.
- $this->clickLink(t('Needs review'));
- // @todo Review job throuh the UI.
- $items = tmgmt_job_item_load_latest('node', 'node', $node->nid, 'en');
- $items['de']->acceptTranslation();
- // German node should now be listed and be clickable.
- $this->drupalGet('node/' . $node->nid . '/translate');
- $this->clickLink('de_' . $node->title);
- }
- /**
- * Test the node source specific cart functionality.
- */
- function testCart() {
- $nodes = array();
- for ($i = 0; $i < 4; $i++) {
- $nodes[] = $this->createNode('page');
- }
- $this->loginAsAdmin(array_merge($this->translator_permissions, array('translate content')));
- // Test the source overview.
- $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);
- // Test the translate tab.
- $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'))));
- }
- }
|