multiversion-8.x-1.0-beta34/tests/src/Functional/WorkspaceTest.php
tests/src/Functional/WorkspaceTest.php
<?php namespace Drupal\Tests\multiversion\Functional; use Drupal\multiversion\Entity\Workspace; use Drupal\multiversion\Entity\WorkspaceInterface; /** * Test the workspace entity. * * @group multiversion */ class WorkspaceTest extends MultiversionFunctionalTestBase { protected $strictConfigSchema = FALSE; protected static $modules = ['multiversion', 'key_value']; public function testOperations() { $default = Workspace::load(1); $this->assertTrue(!empty($default), 'Default workspace was created when installing Multiversion module.'); $machine_name = $this->randomMachineName(); $entity = Workspace::create(['machine_name' => $machine_name, 'label' => $machine_name, 'type' => 'basic']); $this->assertTrue($entity instanceof WorkspaceInterface, 'Workspace entity was created.'); $entity->save(); $this->assertEqual($machine_name, $entity->get('machine_name')->value, 'Workspace entity was saved.'); $entity = Workspace::load($entity->id()); $this->assertEqual($machine_name, $entity->get('machine_name')->value, 'Workspace entity was loaded by ID.'); $this->assertEqual($machine_name, $entity->label(), 'Label method returns the workspace name.'); $created = $entity->getStartTime(); $this->assertNotNull($created, "The value for 'created' field is not null."); $new_created_time = microtime(TRUE) * 1000000; $entity->setCreatedTime((int) $new_created_time); $this->assertEqual($new_created_time, $entity->getStartTime(), "Correct value for 'created' field."); // Note that only lowercase characters (a-z), digits (0-9), // or any of the characters _, $, (, ), +, -, and / are allowed. $workspace1 = Workspace::create(['label' => 'Workspace 1', 'machine_name' => 'a0_$()+-/', 'type' => 'basic']); $violations1 = $workspace1->validate(); $this->assertEqual($violations1->count(), 0, 'No violations'); $workspace2 = Workspace::create(['label' => 'Workspace 2', 'machine_name' => 'A!"£%^&*{}#~@?', 'type' => 'basic']); $violations2 = $workspace2->validate(); $this->assertEqual($violations2->count(), 1, 'One violation'); } public function testActiveWorkspace() { $live = $this->workspaceManager->getActiveWorkspace(); $this->assertEqual('live', $live->getMachineName()); // Create a test workspaces. $test1 = Workspace::create(['machine_name' => 'test1', 'label' => 'test1', 'type' => 'basic']); $test1->save(); $test2 = Workspace::create(['machine_name' => 'test2', 'label' => 'test2', 'type' => 'basic']); $test2->save(); // Create test users. $user1 = $this->drupalCreateUser(['administer workspaces']); $user2 = $this->drupalCreateUser(['administer workspaces']); // Assert the workspace doesn't change when logging in. $this->drupalLogin($user1); $this->assertEqual('live', $this->workspaceManager->getActiveWorkspace()->getMachineName()); // Switch and check that the manager return the correct workspace. $this->workspaceManager->setActiveWorkspace($test1); $this->assertEqual('test1', $this->workspaceManager->getActiveWorkspace()->getMachineName()); // Log out and check that we go back to the default workspace and log back // in and check that the previous workspace has persisted for that user. $this->drupalLogout(); $this->assertEqual('live', $this->workspaceManager->getActiveWorkspace()->getMachineName()); $this->drupalLogin($user1); $this->assertEqual('test1', $this->workspaceManager->getActiveWorkspace()->getMachineName()); $this->drupalLogout(); // Login as a different user and set another workspace. Then check that the // last user still has the previous workspace persisted. $this->drupalLogin($user2); $this->workspaceManager->setActiveWorkspace($test2); $this->assertEqual('test2', $this->workspaceManager->getActiveWorkspace()->getMachineName()); $this->drupalLogout(); $this->drupalLogin($user1); $this->assertEqual('test1', $this->workspaceManager->getActiveWorkspace()->getMachineName()); } public function testDeleteWorkspaceActiveForUser() { $cats = Workspace::create(['label' => 'Cats', 'machine_name' => 'cats', 'type' => 'basic']); $cats->save(); $dogs = Workspace::create(['label' => 'Dogs', 'machine_name' => 'dogs', 'type' => 'basic']); $dogs->save(); $dogs_id = $dogs->id(); $alina = $this->drupalCreateUser(['administer workspaces']); $john = $this->drupalCreateUser(['administer workspaces']); // Login Alina and set the Cats workspace as active. $this->drupalLogin($alina); $this->workspaceManager->setActiveWorkspace($cats); $this->assertEqual('cats', $this->workspaceManager->getActiveWorkspace()->getMachineName()); // Login John and set the Dogs workspace as active. $this->drupalLogin($john); $this->workspaceManager->setActiveWorkspace($dogs); $this->assertEqual('dogs', $this->workspaceManager->getActiveWorkspace()->getMachineName()); // Login again Alina, the active workspace for this user should still be the // Cats workspace. $this->drupalLogin($alina); $this->assertEqual('cats', $this->workspaceManager->getActiveWorkspace()->getMachineName()); // Alina is a cats person and decides to delete the Dogs workspace, without // taking into consideration that Dogs workspace can be active for another // user. This user has all the permissions to do that. $dogs->delete(); // As workspaces are fully deleted on cron, run it. \Drupal::service('cron')->run(); // After cron run the workspace should be deleted from the database. $this->assertEmpty(Workspace::load($dogs_id)); // Now login John, this user would expect to see as active the Dogs // workspace, but if anyone else with the permissions to delete that // workspace, deleted it, then John should have as active the default // workspace. As Alina deleted the Dogs workspace, the active workspace // should be the Live workspace. $this->drupalLogin($john); $this->assertEqual('live', $this->workspaceManager->getActiveWorkspace()->getMachineName()); } }