function AccessPolicyProcessorTest::testCaching

Same name in other branches
  1. 11.x core/tests/Drupal/Tests/Core/Session/AccessPolicyProcessorTest.php \Drupal\Tests\Core\Session\AccessPolicyProcessorTest::testCaching()

Tests if the caches are called correctly.

@dataProvider cachingProvider

File

core/tests/Drupal/Tests/Core/Session/AccessPolicyProcessorTest.php, line 256

Class

AccessPolicyProcessorTest
Tests the AccessPolicyProcessor service.

Namespace

Drupal\Tests\Core\Session

Code

public function testCaching(bool $db_cache_hit, bool $static_cache_hit) : void {
    if ($static_cache_hit) {
        $this->assertFalse($db_cache_hit, 'DB cache should never be checked when there is a static hit.');
    }
    $account = $this->prophesize(AccountInterface::class)
        ->reveal();
    $scope = 'bar';
    $bar_access_policy = new BarAccessPolicy();
    $bar_permissions = $bar_access_policy->calculatePermissions($account, $scope);
    $bar_permissions->addCacheTags([
        'access_policies',
    ]);
    $none_refinable_bar_permissions = new CalculatedPermissions($bar_permissions);
    $cache_static = $this->prophesize(VariationCacheInterface::class);
    $cache_db = $this->prophesize(VariationCacheInterface::class);
    if (!$static_cache_hit) {
        if (!$db_cache_hit) {
            $cache_db->get(Argument::cetera())
                ->willReturn(FALSE);
            $cache_db->set(Argument::any(), $bar_permissions, Argument::cetera())
                ->shouldBeCalled();
        }
        else {
            $cache_item = new CacheItem($bar_permissions);
            $cache_db->get(Argument::cetera())
                ->willReturn($cache_item);
            $cache_db->set()
                ->shouldNotBeCalled();
        }
        $cache_static->get(Argument::cetera())
            ->willReturn(FALSE);
        $cache_static->set(Argument::any(), $none_refinable_bar_permissions, Argument::cetera())
            ->shouldBeCalled();
    }
    else {
        $cache_item = new CacheItem($none_refinable_bar_permissions);
        $cache_static->get(Argument::cetera())
            ->willReturn($cache_item);
        $cache_static->set()
            ->shouldNotBeCalled();
    }
    $cache_static = $cache_static->reveal();
    $cache_db = $cache_db->reveal();
    $processor = $this->setUpAccessPolicyProcessor($cache_db, $cache_static);
    $processor->addAccessPolicy($bar_access_policy);
    $permissions = $processor->processAccessPolicies($account, $scope);
    $this->assertEquals($none_refinable_bar_permissions, $permissions, 'Cached permission matches calculated.');
}

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.