Merge pull request #19561 from seamuslee001/search_task_map
[civicrm-core.git] / tests / phpunit / CRM / Core / Permission / BaseTest.php
1 <?php
2
3 /**
4 * Class CRM_Core_Permission_BaseTest
5 * @group headless
6 */
7 class CRM_Core_Permission_BaseTest extends CiviUnitTestCase {
8
9 use CRMTraits_ACL_PermissionTrait;
10
11 /**
12 * @return array
13 * (0 => input to translatePermission, 1 => expected output from translatePermission)
14 */
15 public function translateData(): array {
16 $cases = [];
17
18 $cases[] = ['administer CiviCRM', 'administer CiviCRM'];
19 $cases[] = ['cms:universal name', 'local name'];
20 $cases[] = ['cms:universal name2', 'local name2'];
21 $cases[] = ['cms:unknown universal name', CRM_Core_Permission::ALWAYS_DENY_PERMISSION];
22 $cases[] = ['myruntime:foo', 'foo'];
23 $cases[] = ['otherruntime:foo', CRM_Core_Permission::ALWAYS_DENY_PERMISSION];
24 $cases[] = ['otherruntime:foo:bar', CRM_Core_Permission::ALWAYS_DENY_PERMISSION];
25 $cases[] = [CRM_Core_Permission::ALWAYS_ALLOW_PERMISSION, CRM_Core_Permission::ALWAYS_ALLOW_PERMISSION];
26
27 return $cases;
28 }
29
30 /**
31 * @dataProvider translateData
32 *
33 * @param string $input
34 * The name of a permission which should be translated.
35 * @param string $expected
36 * The name of an actual permission (based on translation matrix for "runtime").
37 */
38 public function testTranslate(string $input, string $expected): void {
39 $perm = new CRM_Core_Permission_Base();
40 $actual = $perm->translatePermission($input, 'myruntime', [
41 'universal name' => 'local name',
42 'universal name2' => 'local name2',
43 'gunk' => 'gunky',
44 ]);
45 $this->assertEquals($expected, $actual);
46 }
47
48 /**
49 * Test that the user has the implied permission of administer CiviCRM data by virtue of having administer CiviCRM.
50 */
51 public function testImpliedPermission(): void {
52 $this->createLoggedInUser();
53 CRM_Core_Config::singleton()->userPermissionClass->permissions = [
54 'administer CiviCRM',
55 ];
56 $this->assertTrue(CRM_Core_Permission::check('administer CiviCRM data'));
57 }
58
59 /**
60 * Test that the super permission gives the implied permission of the whole shebang.
61 */
62 public function testImpliedPermissionSuperDuper(): void {
63 $this->createLoggedInUser();
64 CRM_Core_Config::singleton()->userPermissionClass->permissions = [
65 'all CiviCRM permissions and ACLs',
66 ];
67 $this->assertTrue(CRM_Core_Permission::check('view all contacts'));
68 }
69
70 }