You are here

public function DeploymentAccessTest::testDeploymentAccess in Deploy - Content Staging 8

Test deployment access.

File

tests/src/Functional/DeploymentAccessTest.php, line 24

Class

DeploymentAccessTest
Tests access for creating deployments.

Namespace

Drupal\Tests\deploy\Functional

Code

public function testDeploymentAccess() {
  $web_assert = $this
    ->assertSession();

  // Create and login a user with limited permissions.
  $permissions = [
    'access administration pages',
    'administer workspaces',
    'access toolbar',
  ];
  $test_user = $this
    ->drupalCreateUser($permissions);
  $this
    ->drupalLogin($test_user);

  // Check the user can't access the deploy link or the deploy page for Live.
  $this
    ->drupalGet('<front>');
  $web_assert
    ->linkExists('Live');
  $web_assert
    ->linkByHrefNotExists('/admin/structure/deployment/add');
  $this
    ->drupalGet('/admin/structure/deployment/add');
  $web_assert
    ->statusCodeEquals('403');

  // Switch to the stage workspace.
  $this
    ->drupalPostForm('/admin/structure/workspace/2/activate', [], 'Activate');

  // Check the user can't access the deploy link or the deploy page for Stage.
  $this
    ->drupalGet('<front>');
  $web_assert
    ->linkExists('Stage');
  $web_assert
    ->linkByHrefNotExists('/admin/structure/deployment/add');
  $this
    ->drupalGet('/admin/structure/deployment/add');
  $web_assert
    ->statusCodeEquals('403');

  // Give the user access to deploy to live.
  $test_user_roles = $test_user
    ->getRoles();
  $this
    ->grantPermissions(Role::load(reset($test_user_roles)), [
    'Deploy to Live',
  ]);

  // Check the use can access the deploy link or the deploy page for Stage.
  $this
    ->drupalGet('<front>');
  $web_assert
    ->linkExists('Stage');
  $web_assert
    ->linkByHrefExists('/admin/structure/deployment/add');
  $this
    ->drupalGet('/admin/structure/deployment/add');
  $web_assert
    ->pageTextContains('Deploy changes from local Stage workspace to Live workspace');

  // Create a new workspace.
  $this
    ->drupalPostForm('/admin/structure/workspace/add', [
    'machine_name' => 'my_workspace',
    'label' => 'My Workspace',
    'upstream' => 2,
  ], 'Save');

  // Update stage to deploy to my_workspace.
  $this
    ->drupalPostForm('/admin/structure/workspace/2/edit', [
    'upstream' => 3,
  ], 'Save');

  // The user shouldn't be able to deploy to workspaces they created.
  $this
    ->drupalGet('/admin/structure/deployment/add');
  $web_assert
    ->statusCodeEquals('403');

  // Give the user access to deploy to workspaces they created.
  $test_user_roles = $test_user
    ->getRoles();
  $this
    ->grantPermissions(Role::load(reset($test_user_roles)), [
    'deploy to own workspace',
  ]);

  // The user should now have access to the deployment form.
  $this
    ->drupalGet('/admin/structure/deployment/add');
  $web_assert
    ->pageTextContains('Deploy changes from local Stage workspace to My Workspace workspace');

  // Switch to the my_workspace workspace.
  $this
    ->drupalPostForm('/admin/structure/workspace/3/activate', [], 'Activate');

  // The user doesn't have permission to deploy to stage.
  $this
    ->drupalGet('/admin/structure/deployment/add');
  $web_assert
    ->statusCodeEquals('403');

  // Give the user access to deploy to any workspace.
  $test_user_roles = $test_user
    ->getRoles();
  $this
    ->grantPermissions(Role::load(reset($test_user_roles)), [
    'deploy to any workspace',
  ]);

  // The user should now have access to the deployment form.
  $this
    ->drupalGet('/admin/structure/deployment/add');
  $web_assert
    ->pageTextContains('Deploy changes from local My Workspace workspace to Stage workspace');
}