function ModerationStateNodeTypeTest::testEnablingOnExistingContent

Same name in other branches
  1. 9 core/modules/content_moderation/tests/src/Functional/ModerationStateNodeTypeTest.php \Drupal\Tests\content_moderation\Functional\ModerationStateNodeTypeTest::testEnablingOnExistingContent()
  2. 8.9.x core/modules/content_moderation/tests/src/Functional/ModerationStateNodeTypeTest.php \Drupal\Tests\content_moderation\Functional\ModerationStateNodeTypeTest::testEnablingOnExistingContent()
  3. 10 core/modules/content_moderation/tests/src/Functional/ModerationStateNodeTypeTest.php \Drupal\Tests\content_moderation\Functional\ModerationStateNodeTypeTest::testEnablingOnExistingContent()

Tests enabling moderation on an existing node-type, with content.

@covers \Drupal\content_moderation\EntityTypeInfo::formAlter @covers \Drupal\content_moderation\Entity\Handler\NodeModerationHandler::enforceRevisionsBundleFormAlter

File

core/modules/content_moderation/tests/src/Functional/ModerationStateNodeTypeTest.php, line 44

Class

ModerationStateNodeTypeTest
Tests moderation state node type integration.

Namespace

Drupal\Tests\content_moderation\Functional

Code

public function testEnablingOnExistingContent() : void {
    $editor_permissions = [
        'administer workflows',
        'access administration pages',
        'administer content types',
        'administer nodes',
        'view latest version',
        'view any unpublished content',
        'access content overview',
        'use editorial transition create_new_draft',
    ];
    $publish_permissions = array_merge($editor_permissions, [
        'use editorial transition publish',
    ]);
    $editor = $this->drupalCreateUser($editor_permissions);
    $editor_with_publish = $this->drupalCreateUser($publish_permissions);
    // Create a node type that is not moderated.
    $this->drupalLogin($editor);
    $this->createContentTypeFromUi('Not moderated', 'not_moderated');
    $this->grantUserPermissionToCreateContentOfType($editor, 'not_moderated');
    $this->grantUserPermissionToCreateContentOfType($editor_with_publish, 'not_moderated');
    // Create content.
    $this->drupalGet('node/add/not_moderated');
    $this->submitForm([
        'title[0][value]' => 'Test',
    ], 'Save');
    $this->assertSession()
        ->pageTextContains('Not moderated Test has been created.');
    // Check that the 'Create new revision' is not disabled.
    $this->drupalGet('/admin/structure/types/manage/not_moderated');
    $this->assertNull($this->assertSession()
        ->fieldExists('options[revision]')
        ->getAttribute('disabled'));
    // Now enable moderation state.
    $this->enableModerationThroughUi('not_moderated');
    // Check that the 'Create new revision' checkbox is checked and disabled.
    $this->drupalGet('/admin/structure/types/manage/not_moderated');
    $this->assertSession()
        ->checkboxChecked('options[revision]');
    $this->assertSession()
        ->fieldDisabled('options[revision]');
    // And make sure it works.
    $nodes = \Drupal::entityTypeManager()->getStorage('node')
        ->loadByProperties([
        'title' => 'Test',
    ]);
    if (empty($nodes)) {
        $this->fail('Could not load node with title Test');
        return;
    }
    $node = reset($nodes);
    $this->drupalGet('node/' . $node->id());
    $this->assertSession()
        ->statusCodeEquals(200);
    $this->assertSession()
        ->linkByHrefExists('node/' . $node->id() . '/edit');
    $this->drupalGet('node/' . $node->id() . '/edit');
    $this->assertSession()
        ->statusCodeEquals(200);
    $this->assertSession()
        ->optionExists('moderation_state[0][state]', 'draft');
    $this->assertSession()
        ->optionNotExists('moderation_state[0][state]', 'published');
    $this->drupalLogin($editor_with_publish);
    $this->drupalGet('node/' . $node->id() . '/edit');
    $this->assertSession()
        ->statusCodeEquals(200);
    $this->assertSession()
        ->optionExists('moderation_state[0][state]', 'draft');
    $this->assertSession()
        ->optionExists('moderation_state[0][state]', 'published');
}

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.