WorkspaceTest.php

Same filename and directory in other branches
  1. 9 core/modules/workspaces/tests/src/Functional/WorkspaceTest.php
  2. 10 core/modules/workspaces/tests/src/Functional/WorkspaceTest.php
  3. 11.x core/modules/workspaces/tests/src/Functional/WorkspaceTest.php
  4. 11.x core/modules/jsonapi/tests/src/Functional/WorkspaceTest.php
  5. 10 core/modules/jsonapi/tests/src/Functional/WorkspaceTest.php

Namespace

Drupal\Tests\workspaces\Functional

File

core/modules/workspaces/tests/src/Functional/WorkspaceTest.php

View source
<?php

namespace Drupal\Tests\workspaces\Functional;

use Drupal\Tests\BrowserTestBase;

/**
 * Test the workspace entity.
 *
 * @group workspaces
 */
class WorkspaceTest extends BrowserTestBase {
  use WorkspaceTestUtilities;
  
  /**
   * {@inheritdoc}
   */
  public static $modules = [
    'workspaces',
    'toolbar',
    'field_ui',
  ];
  
  /**
   * {@inheritdoc}
   */
  protected $defaultTheme = 'stark';
  
  /**
   * A test user.
   *
   * @var \Drupal\user\Entity\User
   */
  protected $editor1;
  
  /**
   * A test user.
   *
   * @var \Drupal\user\Entity\User
   */
  protected $editor2;
  
  /**
   * {@inheritdoc}
   */
  public function setUp() {
    parent::setUp();
    $permissions = [
      'access administration pages',
      'administer site configuration',
      'create workspace',
      'edit own workspace',
      'edit any workspace',
      'view own workspace',
      'access toolbar',
    ];
    $this->editor1 = $this->drupalCreateUser($permissions);
    $this->editor2 = $this->drupalCreateUser($permissions);
  }
  
  /**
   * Test creating a workspace with special characters.
   */
  public function testSpecialCharacters() {
    $this->drupalLogin($this->editor1);
    // Test a valid workspace name.
    $this->createWorkspaceThroughUi('Workspace 1', 'a0_$()+-/');
    // Test and invalid workspace name.
    $this->drupalGet('/admin/config/workflow/workspaces/add');
    $this->assertSession()
      ->statusCodeEquals(200);
    $page = $this->getSession()
      ->getPage();
    $page->fillField('label', 'workspace2');
    $page->fillField('id', 'A!"£%^&*{}#~@?');
    $page->findButton('Save')
      ->click();
    $page->hasContent("This value is not valid");
  }
  
  /**
   * Test that the toolbar correctly shows the active workspace.
   */
  public function testWorkspaceToolbar() {
    $this->drupalLogin($this->editor1);
    $this->drupalPostForm('/admin/config/workflow/workspaces/add', [
      'id' => 'test_workspace',
      'label' => 'Test workspace',
    ], 'Save');
    // Activate the test workspace.
    $this->drupalPostForm('/admin/config/workflow/workspaces/manage/test_workspace/activate', [], 'Confirm');
    $this->drupalGet('<front>');
    $page = $this->getSession()
      ->getPage();
    // Toolbar should show the correct label.
    $this->assertTrue($page->hasLink('Test workspace'));
    // Change the workspace label.
    $this->drupalPostForm('/admin/config/workflow/workspaces/manage/test_workspace/edit', [
      'label' => 'New name',
    ], 'Save');
    $this->drupalGet('<front>');
    $page = $this->getSession()
      ->getPage();
    // Toolbar should show the new label.
    $this->assertTrue($page->hasLink('New name'));
  }
  
  /**
   * Test changing the owner of a workspace.
   */
  public function testWorkspaceOwner() {
    $this->drupalLogin($this->editor1);
    $this->drupalPostForm('/admin/config/workflow/workspaces/add', [
      'id' => 'test_workspace',
      'label' => 'Test workspace',
    ], 'Save');
    $storage = \Drupal::entityTypeManager()->getStorage('workspace');
    $test_workspace = $storage->load('test_workspace');
    $this->assertEquals($this->editor1
      ->id(), $test_workspace->getOwnerId());
    $this->drupalPostForm('/admin/config/workflow/workspaces/manage/test_workspace/edit', [
      'uid[0][target_id]' => $this->editor2
        ->getAccountName(),
    ], 'Save');
    $test_workspace = $storage->loadUnchanged('test_workspace');
    $this->assertEquals($this->editor2
      ->id(), $test_workspace->getOwnerId());
  }
  
  /**
   * Tests that editing a workspace creates a new revision.
   */
  public function testWorkspaceFormRevisions() {
    $this->drupalLogin($this->editor1);
    $storage = \Drupal::entityTypeManager()->getStorage('workspace');
    // The current 'stage' workspace entity should be revision 1.
    $stage_workspace = $storage->load('stage');
    $this->assertEquals('1', $stage_workspace->getRevisionId());
    // Re-save the 'stage' workspace via the UI to create revision 2.
    $this->drupalPostForm($stage_workspace->toUrl('edit-form')
      ->toString(), [], 'Save');
    $stage_workspace = $storage->loadUnchanged('stage');
    $this->assertEquals('2', $stage_workspace->getRevisionId());
  }
  
  /**
   * Tests adding new fields to workspace entities.
   */
  public function testWorkspaceFieldUi() {
    $user = $this->drupalCreateUser([
      'administer workspaces',
      'access administration pages',
      'administer site configuration',
      'administer workspace fields',
      'administer workspace display',
      'administer workspace form display',
    ]);
    $this->drupalLogin($user);
    $this->drupalGet('admin/config/workflow/workspaces/fields');
    $this->assertSession()
      ->statusCodeEquals(200);
    // Create a new filed.
    $field_name = mb_strtolower($this->randomMachineName());
    $field_label = $this->randomMachineName();
    $edit = [
      'new_storage_type' => 'string',
      'label' => $field_label,
      'field_name' => $field_name,
    ];
    $this->drupalPostForm("admin/config/workflow/workspaces/fields/add-field", $edit, 'Save and continue');
    $page = $this->getSession()
      ->getPage();
    $page->pressButton('Save field settings');
    $page->pressButton('Save settings');
    // Check that the field is displayed on the manage form display page.
    $this->drupalGet('admin/config/workflow/workspaces/form-display');
    $this->assertText($field_label);
    // Check that the field is displayed on the manage display page.
    $this->drupalGet('admin/config/workflow/workspaces/display');
    $this->assertText($field_label);
  }

}

Classes

Title Deprecated Summary
WorkspaceTest Test the workspace entity.

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