1 layout.test LayoutSelectionTest::testRoleSelection()

Test role-based selection of layouts.

File

core/modules/layout/tests/layout.test, line 2450
Tests for the Layout module.

Class

LayoutSelectionTest
Tests that the correct layout is used in various situations.

Code

function testRoleSelection() {
  // Create and login admin user.
  $admin_user = $this->backdropCreateUser(array(
    'access administration pages',
    'administer site configuration',
    'administer modules',
    'administer layouts',
    'administer nodes',
  ));
  $this->backdropLogin($admin_user);

  // Create a web user.
  $web_user = $this->backdropCreateUser(array('access user profiles', 'access content'));

  // Test ordinary role-based selection.
  // Create a layout at a custom path.
  $layout_name = strtolower($this->randomName());
  $layout_path = $layout_name;
  $edit = array(
    'name' => $layout_name,
    'title' => $layout_name,
    'path' => $layout_path,
    'layout_template' => 'moscone_flipped',
  );

  // This adds a condition, not saving the layout yet.
  $this->backdropPost('admin/structure/layouts/add', $edit, t('Add visibility condition'));

  // Select the condition to add.
  $edit = array(
    'condition' => 'user_role',
  );
  $this->backdropPost(NULL, $edit, t('Load condition'));

  // Allow authenticated users to see the layout only.
  $edit = array(
    'roles[authenticated]' => TRUE,
  );
  $this->backdropPost(NULL, $edit, t('Add visibility condition'));

  // Save the layout.
  $this->backdropPost(NULL, array(), t('Create layout'));

  // View as an administrator.
  $this->backdropGet($layout_path);
  $this->assertResponse(200);
  $this->backdropLogout();

  // View as a basic user.
  $this->backdropLogin($web_user);
  $this->backdropGet($layout_path);
  $this->assertResponse(200);
  $this->backdropLogout();

  // View as anonymous, where they should get a 404.
  $this->backdropGet($layout_path);
  $this->assertResponse(404);

  // Go back and configure the visibility condition to test a negated role.
  $this->backdropLogin($admin_user);

  $edit = array(
    'roles[authenticated]' => FALSE,
    'roles[anonymous]' => TRUE,
    'negate' => TRUE,
  );
  $this->backdropPost('admin/structure/layouts/manage/' . $layout_name . '/condition/edit/layout/0', $edit, t('Save visibility condition'));

  // View as an administrator.
  $this->backdropGet($layout_path);
  $this->assertResponse(200);
  $this->backdropLogout();

  // View as a basic user.
  $this->backdropLogin($web_user);
  $this->backdropGet($layout_path);
  $this->assertResponse(200);
  $this->backdropLogout();

  // View as anonymous, where they should get a 404.
  $this->backdropGet($layout_path);
  $this->assertResponse(404);
}