You are here

DevelGenerateTest.php in Devel 8

File

devel_generate/src/Tests/DevelGenerateTest.php
View source
<?php

namespace Drupal\devel_generate\Tests;

use Drupal\comment\Tests\CommentTestTrait;
use Drupal\Component\Utility\Unicode;
use Drupal\Core\Field\FieldStorageDefinitionInterface;
use Drupal\Core\Language\Language;
use Drupal\field\Tests\EntityReference\EntityReferenceTestTrait;
use Drupal\node\Entity\Node;
use Drupal\simpletest\WebTestBase;

/**
 * Tests the logic to generate data.
 *
 * @group devel_generate
 */
class DevelGenerateTest extends WebTestBase {
  use CommentTestTrait;
  use EntityReferenceTestTrait;

  /**
   * Vocabulary for testing.
   *
   * @var \Drupal\taxonomy\VocabularyInterface
   */
  protected $vocabulary;

  /**
   * Modules to enable.
   *
   * @var array
   */
  public static $modules = array(
    'menu_ui',
    'node',
    'comment',
    'taxonomy',
    'path',
    'devel_generate',
  );

  /**
   * Prepares the testing environment
   */
  public function setUp() {
    parent::setUp();

    // Create Basic page and Article node types.
    if ($this->profile != 'standard') {
      $this
        ->drupalCreateContentType(array(
        'type' => 'page',
        'name' => 'Basic Page',
      ));
      $this
        ->drupalCreateContentType(array(
        'type' => 'article',
        'name' => 'Article',
      ));
      $this
        ->addDefaultCommentField('node', 'article');
    }

    // Creating a vocabulary to associate taxonomy terms generated.
    $this->vocabulary = entity_create('taxonomy_vocabulary', array(
      'name' => $this
        ->randomMachineName(),
      'description' => $this
        ->randomMachineName(),
      'vid' => Unicode::strtolower($this
        ->randomMachineName()),
      'langcode' => Language::LANGCODE_NOT_SPECIFIED,
      'weight' => mt_rand(0, 10),
    ));
    $this->vocabulary
      ->save();

    // Creates a field of an entity reference field storage on article.
    $field_name = 'taxonomy_' . $this->vocabulary
      ->id();
    $handler_settings = array(
      'target_bundles' => array(
        $this->vocabulary
          ->id() => $this->vocabulary
          ->id(),
      ),
      'auto_create' => TRUE,
    );
    $this
      ->createEntityReferenceField('node', 'article', $field_name, NULL, 'taxonomy_term', 'default', $handler_settings, FieldStorageDefinitionInterface::CARDINALITY_UNLIMITED);
    entity_get_form_display('node', 'article', 'default')
      ->setComponent($field_name, array(
      'type' => 'options_select',
    ))
      ->save();
    entity_get_display('node', 'article', 'default')
      ->setComponent($field_name, array(
      'type' => 'entity_reference_label',
    ))
      ->save();
    $admin_user = $this
      ->drupalCreateUser(array(
      'administer devel_generate',
    ));
    $this
      ->drupalLogin($admin_user);
  }

  /**
   * Tests generate commands
   */
  public function testDevelGenerate() {

    // Creating users.
    $edit = array(
      'num' => 4,
    );
    $this
      ->drupalPostForm('admin/config/development/generate/user', $edit, t('Generate'));
    $this
      ->assertText(t('4 users created.'));
    $this
      ->assertText(t('Generate process complete.'));

    // Tests that if no content types are selected an error message is shown.
    $edit = array(
      'num' => 4,
      'title_length' => 4,
    );
    $this
      ->drupalPostForm('admin/config/development/generate/content', $edit, t('Generate'));
    $this
      ->assertText(t('Please select at least one content type'));

    // Creating content.
    // First we create a node in order to test the Delete content checkbox.
    $this
      ->drupalCreateNode(array(
      'type' => 'article',
    ));
    $edit = array(
      '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, t('Generate'));
    $this
      ->assertText(t('Deleted 1 nodes.'));
    $this
      ->assertText(t('Finished creating 4 nodes'));
    $this
      ->assertText(t('Generate process complete.'));

    // 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
        ->assertResponse('200');
      $this
        ->assertText($node
        ->getTitle(), 'Generated url alias for the node works.');
    }

    // Creating terms.
    $edit = array(
      'vids[]' => $this->vocabulary
        ->id(),
      'num' => 5,
      'title_length' => 12,
    );
    $this
      ->drupalPostForm('admin/config/development/generate/term', $edit, t('Generate'));
    $this
      ->assertText(t('Created the following new terms: '));
    $this
      ->assertText(t('Generate process complete.'));

    // Creating vocabularies.
    $edit = array(
      'num' => 5,
      'title_length' => 12,
      'kill' => TRUE,
    );
    $this
      ->drupalPostForm('admin/config/development/generate/vocabs', $edit, t('Generate'));
    $this
      ->assertText(t('Created the following new vocabularies: '));
    $this
      ->assertText(t('Generate process complete.'));

    // Creating menus.
    $edit = array(
      'num_menus' => 5,
      'num_links' => 7,
      'title_length' => 12,
      'link_types[node]' => 1,
      'link_types[front]' => 1,
      'link_types[external]' => 1,
      'max_depth' => 4,
      'max_width' => 6,
      'kill' => 1,
    );
    $this
      ->drupalPostForm('admin/config/development/generate/menu', $edit, t('Generate'));
    $this
      ->assertText(t('Created the following new menus: '));
    $this
      ->assertText(t('Created 7 new menu links'));
    $this
      ->assertText(t('Generate process complete.'));
  }

}

Classes

Namesort descending Description
DevelGenerateTest Tests the logic to generate data.