public function DevelGenerateBrowserTest::testDevelGenerateContent in Devel 4.x
Same name and namespace in other branches
- 8.3 devel_generate/tests/src/Functional/DevelGenerateBrowserTest.php \Drupal\Tests\devel_generate\Functional\DevelGenerateBrowserTest::testDevelGenerateContent()
Tests generating content.
File
- devel_generate/
tests/ src/ Functional/ DevelGenerateBrowserTest.php, line 34
Class
- DevelGenerateBrowserTest
- Tests the logic to generate data.
Namespace
Drupal\Tests\devel_generate\FunctionalCode
public function testDevelGenerateContent() {
// Tests that if no content types are selected an error message is shown.
$edit = [
'num' => 4,
'title_length' => 4,
];
$this
->drupalPostForm('admin/config/development/generate/content', $edit, 'Generate');
$this
->assertText('Please select at least one content type');
// Create a node in order to test the Delete content checkbox.
$this
->drupalCreateNode([
'type' => 'article',
]);
// Generate articles with comments and aliases.
$edit = [
'num' => 4,
'kill' => TRUE,
'node_types[article]' => TRUE,
'time_range' => 604800,
'max_comments' => 3,
'title_length' => 4,
'add_alias' => 1,
];
$this
->drupalPostForm('admin/config/development/generate/content', $edit, 'Generate');
$this
->assertSession()
->pageTextContains('Deleted 1 node');
$this
->assertSession()
->pageTextContains('Created 4 nodes');
$this
->assertSession()
->pageTextContains('Generate process complete.');
$this
->assertSession()
->pageTextNotContains('translations');
// Tests that nodes have been created in the generation process.
$nodes = Node::loadMultiple();
$this
->assert(count($nodes) == 4, 'Nodes generated successfully.');
// Tests url alias for the generated nodes.
foreach ($nodes as $node) {
$alias = 'node-' . $node
->id() . '-' . $node
->bundle();
$this
->drupalGet($alias);
$this
->assertSession()
->statusCodeEquals('200');
$this
->assertSession()
->pageTextContains($node
->getTitle(), 'Generated url alias for the node works.');
}
// Generate articles with translations.
$edit = [
'num' => 3,
'kill' => TRUE,
'node_types[article]' => TRUE,
'add_language[]' => [
'en',
],
'translate_language[]' => [
'de',
'ca',
],
'add_alias' => TRUE,
];
$this
->drupalPostForm('admin/config/development/generate/content', $edit, 'Generate');
$this
->assertSession()
->pageTextContains('Deleted 4 nodes');
$this
->assertSession()
->pageTextContains('Created 3 nodes');
// Two translations for each node makes six.
$this
->assertSession()
->pageTextContains('Created 6 node translations');
$articles = \Drupal::entityQuery('node')
->execute();
$this
->assertCount(3, $articles);
$node = Node::load(end($articles));
$this
->assertTrue($node
->hasTranslation('de'));
$this
->assertTrue($node
->hasTranslation('ca'));
$this
->assertFalse($node
->hasTranslation('fr'));
// Check url alias for each of the translations.
foreach (Node::loadMultiple($articles) as $node) {
foreach ([
'de',
'ca',
] as $langcode) {
$translation_node = $node
->getTranslation($langcode);
$alias = 'node-' . $translation_node
->id() . '-' . $translation_node
->bundle() . '-' . $langcode;
$this
->drupalGet($langcode . '/' . $alias);
$this
->assertSession()
->statusCodeEquals('200');
$this
->assertSession()
->pageTextContains($translation_node
->getTitle());
}
}
// Create article to make sure it is not deleted when only killing pages.
$article = $this
->drupalCreateNode([
'type' => 'article',
'title' => 'Alive',
]);
// The 'page' content type is not enabled for translation.
$edit = [
'num' => 2,
'kill' => TRUE,
'node_types[page]' => TRUE,
'add_language[]' => [
'en',
],
'translate_language[]' => [
'fr',
],
];
$this
->drupalPostForm('admin/config/development/generate/content', $edit, 'Generate');
$this
->assertSession()
->pageTextNotContains('Deleted');
$this
->assertSession()
->pageTextContains('Created 2 nodes');
$this
->assertSession()
->pageTextNotContains('node translations');
// Check that 'kill' has not deleted the article.
$this
->assertNotEmpty(Node::load($article
->id()));
$pages = \Drupal::entityQuery('node')
->condition('type', 'page')
->execute();
$this
->assertCount(2, $pages);
$node = Node::load(end($pages));
$this
->assertFalse($node
->hasTranslation('fr'));
// Create articles with add-type-label option.
$edit = [
'num' => 5,
'kill' => TRUE,
'node_types[article]' => TRUE,
'add_type_label' => TRUE,
];
$this
->drupalPostForm('admin/config/development/generate/content', $edit, 'Generate');
$this
->assertSession()
->pageTextContains('Created 5 nodes');
$this
->assertSession()
->pageTextContains('Generate process complete');
// Count the articles created in the generation process.
$nodes = \Drupal::entityQuery('node')
->condition('type', 'article')
->execute();
$this
->assertCount(5, $nodes);
// Load the final node and verify that the title starts with the label.
$node = Node::load(end($nodes));
$this
->assertEquals('Article - ', substr($node->title->value, 0, 10));
// Test creating content with specified authors. First create 15 more users
// making 18 in total, to make the test much stronger.
for ($i = 0; $i < 15; $i++) {
$this
->drupalCreateUser();
}
$edit = [
'num' => 10,
'kill' => TRUE,
'node_types[article]' => TRUE,
'authors[3]' => TRUE,
'authors[4]' => TRUE,
];
$this
->drupalPostForm('admin/config/development/generate/content', $edit, 'Generate');
// Display the full content list for information and debug only.
$this
->drupalGet('admin/content');
// Count all the articles by user 3 and 4 and by others. We count the two
// users nodes separately to ensure that there are some by each user.
$nodes_by_user_3 = \Drupal::entityQuery('node')
->condition('type', 'article')
->condition('uid', [
'3',
], 'IN')
->execute();
$nodes_by_user_4 = \Drupal::entityQuery('node')
->condition('type', 'article')
->condition('uid', [
'4',
], 'IN')
->execute();
$nodes_by_others = \Drupal::entityQuery('node')
->condition('type', 'article')
->condition('uid', [
'3',
'4',
], 'NOT IN')
->execute();
// If the user option was not working correctly and users were assigned at
// random, then the chance that these assertions will correctly detect the
// error is 1 - (2/18 ** 10) = 99.99%.
$this
->assertEquals(10, count($nodes_by_user_3) + count($nodes_by_user_4));
$this
->assertCount(0, $nodes_by_others);
// If the user option is coded correctly the chance of either of these
// assertions giving a false failure is 1/2 ** 10 = 0.097%.
$this
->assertGreaterThan(0, count($nodes_by_user_3));
$this
->assertGreaterThan(0, count($nodes_by_user_4));
}