You are here

public function DevelGenerateCommandsTest::testDrushGenerateContent in Devel 4.x

Same name and namespace in other branches
  1. 8.3 devel_generate/tests/src/Functional/DevelGenerateCommandsTest.php \Drupal\Tests\devel_generate\Functional\DevelGenerateCommandsTest::testDrushGenerateContent()

Tests generating content.

File

devel_generate/tests/src/Functional/DevelGenerateCommandsTest.php, line 133

Class

DevelGenerateCommandsTest
Test class for the Devel Generate drush commands.

Namespace

Drupal\Tests\devel_generate\Functional

Code

public function testDrushGenerateContent() {

  // Generate content using the minimum parameters.
  $this
    ->drush('devel-generate-content', [
    21,
  ]);
  $node = Node::load(21);
  $this
    ->assertNotEmpty($node);

  // Make sure articles get comments. Only one third of articles will have
  // comment status 'open' and therefore the ability to receive a comment.
  // However generating 30 articles will give the likelyhood of test failure
  // (i.e. no article gets a comment) as 2/3 ^ 30 = 0.00052% or 1 in 191751.
  $this
    ->drush('devel-generate-content', [
    30,
    9,
  ], [
    'kill' => NULL,
    'bundles' => 'article',
  ]);
  $comment = Comment::load(1);
  $this
    ->assertNotEmpty($comment);

  // Generate content with a higher number that triggers batch running.
  $this
    ->drush('devel-generate-content', [
    55,
  ], [
    'kill' => NULL,
  ]);
  $nodes = \Drupal::entityQuery('node')
    ->execute();
  $this
    ->assertCount(55, $nodes);
  $messages = $this
    ->getErrorOutput();
  $this
    ->assertStringContainsStringIgnoringCase('Finished 55 elements created successfully.', $messages, 'devel-generate-content batch ending message not found');

  // Generate content with specified language.
  $this
    ->drush('devel-generate-content', [
    10,
  ], [
    'kill' => NULL,
    'languages' => 'fr',
  ]);
  $nodes = \Drupal::entityQuery('node')
    ->execute();
  $node = Node::load(end($nodes));
  $this
    ->assertEquals($node
    ->language()
    ->getId(), 'fr');

  // Generate content with translations.
  $this
    ->drush('devel-generate-content', [
    18,
  ], [
    'kill' => NULL,
    'languages' => 'fr',
    'translations' => 'de',
  ]);

  // Only articles are enabled for translations.
  $articles = \Drupal::entityQuery('node')
    ->condition('type', 'article')
    ->execute();
  $pages = \Drupal::entityQuery('node')
    ->condition('type', 'page')
    ->execute();
  $this
    ->assertCount(18, $articles + $pages);

  // Check that the last article has 'de' and 'fr' but no 'ca' translation.
  $node = Node::load(end($articles));
  $this
    ->assertTrue($node
    ->hasTranslation('de'));
  $this
    ->assertTrue($node
    ->hasTranslation('fr'));
  $this
    ->assertFalse($node
    ->hasTranslation('ca'));

  // Generate just page content with option --add-type-label.
  // Note: Use the -v verbose option to get the ending message shown when not
  // generating enough to trigger batch mode.
  // @todo Remove -v when the messages are shown for both run types.
  $this
    ->drush('devel-generate-content -v', [
    9,
  ], [
    'kill' => NULL,
    'bundles' => 'page',
    'add-type-label' => NULL,
  ]);

  // Count the page nodes.
  $nodes = \Drupal::entityQuery('node')
    ->condition('type', 'page')
    ->execute();
  $this
    ->assertCount(9, $nodes);
  $messages = $this
    ->getErrorOutput();
  $this
    ->assertStringContainsStringIgnoringCase('Created 9 nodes', $messages, 'batch end message not found');

  // Load the final node and verify that the title starts with the label.
  $node = Node::load(end($nodes));
  $this
    ->assertEquals('Basic Page - ', substr($node->title->value, 0, 13));

  // Generate articles with a specified users.
  $this
    ->drush('devel-generate-content -v', [
    10,
  ], [
    'kill' => NULL,
    'bundles' => 'article',
    'authors' => '2',
  ]);

  // Count the nodes assigned to user 2. We have two other users (0 and 1) so
  // if the code was broken and users were assigned randomly the chance that
  // this fauly would be detected is 1 - (1/3 ** 10) = 99.998%.
  $nodes = \Drupal::entityQuery('node')
    ->condition('type', 'article')
    ->condition('uid', [
    '2',
  ], 'IN')
    ->execute();
  $this
    ->assertCount(10, $nodes);
}