Tests the user interface for entity translation lists.
@group tmgmt
Expanded class hierarchy of ConfigSourceListTest
class ConfigSourceListTest extends TMGMTTestBase {
use TmgmtEntityTestTrait;
/**
* Modules to enable.
*
* @var array
*/
protected static $modules = array(
'tmgmt_config',
'tmgmt_content',
'config_translation',
'views',
'views_ui',
'field_ui',
);
protected $nodes = array();
function setUp() : void {
parent::setUp();
$this
->loginAsAdmin();
$this
->loginAsTranslator(array(
'translate configuration',
));
$this
->addLanguage('de');
$this
->addLanguage('it');
$this
->drupalCreateContentType(array(
'type' => 'article',
'name' => 'Article',
));
$this
->drupalCreateContentType(array(
'type' => 'page',
'name' => 'Page',
));
$this
->drupalCreateContentType(array(
'type' => 'simplenews_issue',
'name' => 'Newsletter issue',
));
}
function testNodeTypeSubmissions() {
// Simple submission.
$this
->drupalGet('admin/tmgmt/sources/config/node_type');
$edit = array(
'items[node.type.article]' => TRUE,
);
$this
->submitForm($edit, 'Request translation');
// Verify that we are on the translate tab.
$this
->assertSession()
->pageTextContains('One job needs to be checked out.');
$this
->assertSession()
->pageTextContains('Article content type (English to ?, Unprocessed)');
// Submit.
$this
->submitForm([], 'Submit to provider');
// Make sure that we're back on the originally defined destination URL.
$this
->assertSession()
->addressEquals('admin/tmgmt/sources/config/node_type');
$this
->assertSession()
->pageTextContains('Test translation created.');
$this
->assertSession()
->pageTextContains('The translation of Article content type to German is finished and can now be reviewed.');
// Submission of two different entity types.
$this
->drupalGet('admin/tmgmt/sources/config/node_type');
$edit = array(
'items[node.type.article]' => TRUE,
'items[node.type.page]' => TRUE,
);
$this
->submitForm($edit, 'Request translation');
// Verify that we are on the translate tab.
// This is still one job, unlike when selecting more languages.
$this
->assertSession()
->pageTextContains('One job needs to be checked out.');
$this
->assertSession()
->pageTextContains('Article content type and 1 more (English to ?, Unprocessed)');
$this
->assertSession()
->pageTextContains('1 item conflicts with pending item and will be dropped on submission. Conflicting item: Article content type.');
// Submit.
$this
->submitForm([], 'Submit to provider');
// Make sure that we're back on the originally defined destination URL.
$this
->assertSession()
->addressEquals('admin/tmgmt/sources/config/node_type');
$this
->assertSession()
->pageTextContains('Test translation created.');
$this
->assertSession()
->pageTextNotContains('The translation of Article content type to German is finished and can now be reviewed.');
$this
->assertSession()
->pageTextContains('The translation of Page content type to German is finished and can now be reviewed.');
}
function testViewTranslation() {
// Check if we have appropriate message in case there are no entity
// translatable content types.
$this
->drupalGet('admin/tmgmt/sources/config/view');
$this
->assertSession()
->pageTextContains('View overview (Config Entity)');
// Request a translation for archive.
$edit = array(
'items[views.view.archive]' => TRUE,
);
$this
->submitForm($edit, 'Request translation');
// Verify that we are on the translate tab.
$this
->assertSession()
->pageTextContains('One job needs to be checked out.');
$this
->assertSession()
->pageTextContains('Archive view (English to ?, Unprocessed)');
// Submit.
$this
->submitForm([], 'Submit to provider');
// Make sure that we're back on the originally defined destination URL.
$this
->assertSession()
->addressEquals('admin/tmgmt/sources/config/view');
$this
->assertSession()
->pageTextContains('Test translation created.');
$this
->assertSession()
->pageTextContains('The translation of Archive view to German is finished and can now be reviewed.');
// Request a translation for more archive, recent comments, content and job
// overview.
$edit = array(
'items[views.view.archive]' => TRUE,
'items[views.view.content_recent]' => TRUE,
'items[views.view.content]' => TRUE,
'items[views.view.tmgmt_job_overview]' => TRUE,
);
$this
->submitForm($edit, 'Request translation');
// Verify that we are on the translate tab.
$this
->assertSession()
->pageTextContains('One job needs to be checked out.');
$this
->assertSession()
->pageTextContains('Archive view and 3 more (English to ?, Unprocessed)');
$this
->assertSession()
->pageTextContains('1 item conflicts with pending item and will be dropped on submission. Conflicting item: Archive view.');
// Submit.
$this
->submitForm([], 'Submit to provider');
// Make sure that we're back on the originally defined destination URL.
$this
->assertSession()
->addressEquals('admin/tmgmt/sources/config/view');
$this
->assertSession()
->pageTextContains('Test translation created.');
$this
->assertSession()
->pageTextNotContains('The translation of Archive view to German is finished and can now be reviewed.');
$this
->assertSession()
->pageTextContains('The translation of Recent content view to German is finished and can now be reviewed.');
$this
->assertSession()
->pageTextContains('The translation of Content view to German is finished and can now be reviewed.');
$this
->assertSession()
->pageTextContains('The translation of Job overview view to German is finished and can now be reviewed.');
// Make sure that the Cart page works.
$edit = array(
'items[views.view.tmgmt_job_items]' => TRUE,
);
$this
->submitForm($edit, 'Add to cart');
$this
->clickLink('cart');
// Verify that we are on the Cart page.
$cart_tab_active = $this
->xpath('//ul[@class="tabs primary"]/li[@class="is-active"]/a')[0];
$this
->assertStringContainsString('Cart', $cart_tab_active
->getText());
$this
->assertSession()
->titleEquals('Cart | Drupal');
$this
->assertSession()
->pageTextContains('Request translation');
}
function testNodeTypeFilter() {
$this
->drupalGet('admin/tmgmt/sources/config/node_type');
$this
->assertSession()
->pageTextContains('Content type overview (Config Entity)');
// Simple filtering.
$this
->drupalGet('admin/tmgmt/sources/config/node_type');
$filters = array(
'search[name]' => '',
'search[langcode]' => '',
'search[target_language]' => '',
);
$this
->submitForm($filters, 'Search');
// Random text in the name label.
$this
->drupalGet('admin/tmgmt/sources/config/node_type');
$filters = array(
'search[name]' => $this
->randomMachineName(5),
'search[langcode]' => '',
'search[target_language]' => '',
);
$this
->submitForm($filters, 'Search');
$this
->assertSession()
->pageTextContains('No source items matching given criteria have been found.');
// Searching for article.
$this
->drupalGet('admin/tmgmt/sources/config/node_type');
$filters = array(
'search[name]' => 'article',
'search[langcode]' => '',
'search[target_language]' => '',
);
$this
->submitForm($filters, 'Search');
$rows = $this
->xpath('//tbody/tr/td[2]/a');
foreach ($rows as $value) {
$this
->assertEquals('Article', $value
->getText());
}
// Searching for article, with english source language and italian target language.
$this
->drupalGet('admin/tmgmt/sources/config/node_type');
$filters = array(
'search[name]' => 'article',
'search[langcode]' => 'en',
'search[target_language]' => 'it',
);
$this
->submitForm($filters, 'Search');
$rows = $this
->xpath('//tbody/tr/td[2]/a');
foreach ($rows as $value) {
$this
->assertEquals('Article', $value
->getText());
}
// Searching by keywords (shorter terms).
$this
->drupalGet('admin/tmgmt/sources/config/node_type');
$filters = array(
'search[name]' => 'art',
'search[langcode]' => 'en',
'search[target_language]' => 'it',
);
$this
->submitForm($filters, 'Search');
$rows = $this
->xpath('//tbody/tr/td[2]/a');
foreach ($rows as $value) {
$this
->assertEquals('Article', $value
->getText());
}
}
/**
* Test for simple configuration translation.
*/
function testSimpleConfigTranslation() {
$this
->loginAsTranslator(array(
'translate configuration',
));
// Go to the translate tab.
$this
->drupalGet('admin/tmgmt/sources/config/_simple_config');
// Assert some basic strings on that page.
$this
->assertSession()
->pageTextContains('Simple configuration overview (Config Entity)');
// Request a translation for Site information settings.
$edit = array(
'items[system.site_information_settings]' => TRUE,
);
$this
->submitForm($edit, 'Request translation');
// Verify that we are on the translate tab.
$this
->assertSession()
->pageTextContains('One job needs to be checked out.');
$this
->assertSession()
->pageTextContains('System information (English to ?, Unprocessed)');
// Submit.
$this
->submitForm([], 'Submit to provider');
// Make sure that we're back on the originally defined destination URL.
$this
->assertSession()
->addressEquals('admin/tmgmt/sources/config/_simple_config');
$overview_url = Url::fromRoute('tmgmt.source_overview', array(
'plugin' => 'config',
'item_type' => '_simple_config',
))
->toString();
// Translated languages should now be listed as Needs review.
$url = JobItem::load(1)
->toUrl()
->setOption('query', [
'destination' => $overview_url,
])
->toString();
$imgs = $this
->xpath('//a[@href=:href]/img', [
':href' => $url,
]);
$this
->assertEquals('Active job item: Needs review', $imgs[0]
->getAttribute('title'));
$this
->assertSession()
->pageTextContains('Test translation created.');
$this
->assertSession()
->pageTextContains('The translation of System information to German is finished and can now be reviewed.');
// Verify that the pending translation is shown.
$review = $this
->xpath('//table[@id="edit-items"]/tbody/tr[@class="even"][1]/td[@class="langstatus-de"]/a');
$destination = $this
->getAbsoluteUrl($review[0]
->getAttribute('href'));
$this
->drupalGet($destination);
$this
->submitForm([], 'Save');
// Request a translation for Account settings
$edit = array(
'items[entity.user.admin_form]' => TRUE,
);
$this
->submitForm($edit, 'Request translation');
// Verify that we are on the checkout page.
$this
->assertSession()
->pageTextContains('One job needs to be checked out.');
$this
->assertSession()
->pageTextContains('Account settings (English to ?, Unprocessed)');
$this
->submitForm([], 'Submit to provider');
// Make sure that we're back on the originally defined destination URL.
$this
->assertSession()
->addressEquals('admin/tmgmt/sources/config/_simple_config');
// Translated languages should now be listed as Needs review.
$links = $this
->xpath('//table[@id="edit-items"]/tbody/tr/td/a');
$this
->assertEquals(2, count($links));
// Save one translation.
$this
->drupalGet('admin/tmgmt/items/1');
$this
->submitForm([], 'Save as completed');
// Test if the filter works.
$this
->drupalGet('admin/tmgmt/sources/config/_simple_config');
$filters = array(
'search[name]' => 'system',
);
$this
->submitForm($filters, 'Search');
// Check if the list has 2 rows.
$this
->assertCount(2, $this
->xpath('//tbody/tr'));
$this
->drupalGet('admin/tmgmt/sources/config/_simple_config');
$filters = array(
'search[target_language]' => 'de',
'search[target_status]' => 'translated',
);
$this
->submitForm($filters, 'Search');
// Just 1 simple configuration was translated.
$this
->assertCount(1, $this
->xpath('//tbody/tr'));
// Filter with name and target_status.
$this
->drupalGet('admin/tmgmt/sources/config/_simple_config');
$filters = array(
'search[name]' => 'settings',
'search[target_language]' => 'de',
'search[target_status]' => 'untranslated',
);
$this
->submitForm($filters, 'Search');
// There is 1 simple configuration untranslated with name 'settings'.
$this
->assertCount(1, $this
->xpath('//tbody/tr'));
$this
->drupalGet('admin/tmgmt/sources/config/_simple_config');
$filters = array(
'search[name]' => 'sys',
'search[target_language]' => 'de',
'search[target_status]' => 'translated',
);
$this
->submitForm($filters, 'Search');
// There are 2 simple configurations with name 'sys' but just 1 is translated.
$this
->assertCount(1, $this
->xpath('//tbody/tr'));
}
/**
* Test for field configuration translation from source list.
*/
function testFieldConfigList() {
$this
->drupalGet('admin/tmgmt/sources/config/field_config');
// Test submission.
$this
->submitForm([
'items[field.field.node.article.body]' => TRUE,
], 'Request translation');
$this
->assertSession()
->pageTextContains('One job needs to be checked out.');
$this
->submitForm([], 'Submit to provider');
// Make sure that we're back on the originally defined destination URL.
$this
->assertSession()
->addressEquals('admin/tmgmt/sources/config/field_config');
$this
->assertSession()
->pageTextContains('Test translation created.');
$this
->assertSession()
->pageTextContains('The translation of Body to German is finished and can now be reviewed.');
}
}
Name | Modifiers | Type | Description | Overrides |
---|---|---|---|---|
ConfigSourceListTest:: |
protected static | property |
Modules to enable. Overrides TMGMTTestBase:: |
|
ConfigSourceListTest:: |
protected | property | ||
ConfigSourceListTest:: |
function |
Overrides DrupalWebTestCase::setUp() Overrides TMGMTTestBase:: |
||
ConfigSourceListTest:: |
function | Test for field configuration translation from source list. | ||
ConfigSourceListTest:: |
function | |||
ConfigSourceListTest:: |
function | |||
ConfigSourceListTest:: |
function | Test for simple configuration translation. | ||
ConfigSourceListTest:: |
function | |||
TmgmtEntityTestTrait:: |
public | property | ||
TmgmtEntityTestTrait:: |
function | Creates fields of type text and text_with_summary of different cardinality. | ||
TmgmtEntityTestTrait:: |
function | Creates node type with several text fields with different cardinality. | ||
TmgmtEntityTestTrait:: |
function | Creates a taxonomy term of a given vocabulary. | ||
TmgmtEntityTestTrait:: |
function | Creates taxonomy vocabulary with custom fields. | ||
TmgmtEntityTestTrait:: |
protected | function | Creates a node of a given bundle. | |
TMGMTTestBase:: |
protected | property | ||
TMGMTTestBase:: |
protected | property | A default translator using the test translator. | |
TmgmtTestTrait:: |
protected | property | List of permissions used by loginAsAdmin(). | |
TmgmtTestTrait:: |
protected | property | Drupal user object created by loginAsAdmin(). | |
TmgmtTestTrait:: |
protected | property | The language weight for new languages. | |
TmgmtTestTrait:: |
protected | property | List of permissions used by loginAsTranslator(). | |
TmgmtTestTrait:: |
protected | property | Drupal user object created by loginAsTranslator(). | |
TmgmtTestTrait:: |
function | Sets the proper environment. | ||
TmgmtTestTrait:: |
function | Asserts job item language codes. | ||
TmgmtTestTrait:: |
protected | function | Asserts text in the page with an xpath expression. | |
TmgmtTestTrait:: |
function | Clicks on an image link with the provided title attribute. | ||
TmgmtTestTrait:: |
function | Creates, saves and returns a translation job. | ||
TmgmtTestTrait:: |
function | Creates, saves and returns a translator. | ||
TmgmtTestTrait:: |
function | Will create a user with admin permissions and log it in. | ||
TmgmtTestTrait:: |
function | Will create a user with translator permissions and log it in. |