Updated Drupal to 8.6. This goes with the following updates because it's possible...
[yaffs-website] / web / core / modules / workspaces / tests / src / Functional / WorkspaceSwitcherTest.php
diff --git a/web/core/modules/workspaces/tests/src/Functional/WorkspaceSwitcherTest.php b/web/core/modules/workspaces/tests/src/Functional/WorkspaceSwitcherTest.php
new file mode 100644 (file)
index 0000000..ce0b3ed
--- /dev/null
@@ -0,0 +1,85 @@
+<?php
+
+namespace Drupal\Tests\workspaces\Functional;
+
+use Drupal\Tests\BrowserTestBase;
+use Drupal\Tests\system\Functional\Cache\AssertPageCacheContextsAndTagsTrait;
+
+/**
+ * Tests workspace switching functionality.
+ *
+ * @group workspaces
+ */
+class WorkspaceSwitcherTest extends BrowserTestBase {
+
+  use AssertPageCacheContextsAndTagsTrait;
+  use WorkspaceTestUtilities;
+
+  /**
+   * {@inheritdoc}
+   */
+  public static $modules = ['block', 'workspaces'];
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function setUp() {
+    parent::setUp();
+
+    $permissions = [
+      'create workspace',
+      'edit own workspace',
+      'view own workspace',
+      'bypass entity access own workspace',
+    ];
+
+    $this->setupWorkspaceSwitcherBlock();
+
+    $mayer = $this->drupalCreateUser($permissions);
+    $this->drupalLogin($mayer);
+  }
+
+  /**
+   * Test switching workspace via the switcher block and admin page.
+   */
+  public function testSwitchingWorkspaces() {
+    $vultures = $this->createWorkspaceThroughUi('Vultures', 'vultures');
+    $this->switchToWorkspace($vultures);
+
+    $gravity = $this->createWorkspaceThroughUi('Gravity', 'gravity');
+
+    $this->drupalGet('/admin/config/workflow/workspaces/manage/' . $gravity->id() . '/activate');
+
+    $this->assertSession()->statusCodeEquals(200);
+    $page = $this->getSession()->getPage();
+    $page->findButton('Confirm')->click();
+
+    // Check that WorkspaceCacheContext provides the cache context used to
+    // support its functionality.
+    $this->assertCacheContext('session');
+
+    $page->findLink($gravity->label());
+  }
+
+  /**
+   * Test switching workspace via a query parameter.
+   */
+  public function testQueryParameterNegotiator() {
+    $web_assert = $this->assertSession();
+    // Initially the default workspace should be active.
+    $web_assert->elementContains('css', '.block-workspace-switcher', 'Live');
+
+    // When adding a query parameter the workspace will be switched.
+    $this->drupalGet('<front>', ['query' => ['workspace' => 'stage']]);
+    $web_assert->elementContains('css', '.block-workspace-switcher', 'Stage');
+
+    // The workspace switching via query parameter should persist.
+    $this->drupalGet('<front>');
+    $web_assert->elementContains('css', '.block-workspace-switcher', 'Stage');
+
+    // Check that WorkspaceCacheContext provides the cache context used to
+    // support its functionality.
+    $this->assertCacheContext('session');
+  }
+
+}