3 namespace Drupal\Tests\block_content\Unit\Access;
5 use Drupal\block_content\Access\AccessGroupAnd;
6 use Drupal\Core\Access\AccessResult;
7 use Drupal\Core\Session\AccountInterface;
8 use Drupal\Tests\UnitTestCase;
11 * Tests accessible groups.
13 * @group block_content
15 class AccessGroupAndTest extends UnitTestCase {
17 use AccessibleTestingTrait;
22 protected function setUp() {
24 $this->account = $this->prophesize(AccountInterface::class)->reveal();
28 * @covers \Drupal\block_content\Access\AccessGroupAnd
30 public function testGroups() {
31 $allowedAccessible = $this->createAccessibleDouble(AccessResult::allowed());
32 $forbiddenAccessible = $this->createAccessibleDouble(AccessResult::forbidden());
33 $neutralAccessible = $this->createAccessibleDouble(AccessResult::neutral());
35 // Ensure that groups with no dependencies return a neutral access result.
36 $this->assertTrue((new AccessGroupAnd())->access('view', $this->account, TRUE)->isNeutral());
38 $andNeutral = new AccessGroupAnd();
39 $andNeutral->addDependency($allowedAccessible)->addDependency($neutralAccessible);
40 $this->assertTrue($andNeutral->access('view', $this->account, TRUE)->isNeutral());
42 $andForbidden = $andNeutral;
43 $andForbidden->addDependency($forbiddenAccessible);
44 $this->assertTrue($andForbidden->access('view', $this->account, TRUE)->isForbidden());
46 // Ensure that groups added to other groups works.
47 $andGroupsForbidden = new AccessGroupAnd();
48 $andGroupsForbidden->addDependency($andNeutral)->addDependency($andForbidden);
49 $this->assertTrue($andGroupsForbidden->access('view', $this->account, TRUE)->isForbidden());
50 // Ensure you can add a non-group accessible object.
51 $andGroupsForbidden->addDependency($allowedAccessible);
52 $this->assertTrue($andGroupsForbidden->access('view', $this->account, TRUE)->isForbidden());