aboutsummaryrefslogtreecommitdiffstats
path: root/tests/unit/Access/PermissionsTest.php
diff options
context:
space:
mode:
Diffstat (limited to 'tests/unit/Access/PermissionsTest.php')
-rw-r--r--tests/unit/Access/PermissionsTest.php246
1 files changed, 210 insertions, 36 deletions
diff --git a/tests/unit/Access/PermissionsTest.php b/tests/unit/Access/PermissionsTest.php
index 93c641fb1..40724fff8 100644
--- a/tests/unit/Access/PermissionsTest.php
+++ b/tests/unit/Access/PermissionsTest.php
@@ -23,6 +23,7 @@
namespace Zotlabs\Tests\Unit\Access;
+use phpmock\phpunit\PHPMock;
use Zotlabs\Tests\Unit\UnitTestCase;
use Zotlabs\Access\Permissions;
@@ -33,54 +34,228 @@ use Zotlabs\Access\Permissions;
*/
class PermissionsTest extends UnitTestCase {
+ use PHPMock;
+
+ public function testVersion() {
+ $expectedVersion = 2;
+
+ // static call
+ $this->assertEquals($expectedVersion, Permissions::version());
+
+ // instance call
+ $p = new Permissions();
+ $this->assertEquals($expectedVersion, $p->version());
+ }
+
+ /**
+ * @coversNothing
+ */
+ public function testVersionEqualsPermissionRoles() {
+ $p = new Permissions();
+ $pr = new \Zotlabs\Access\PermissionRoles();
+ $this->assertEquals($p->version(), $pr->version());
+ }
+
+ /**
+ * @uses ::call_hooks
+ */
+ public function testPerms() {
+ // There are 18 default perms
+ $permsCount = 18;
+
+ // Create a stub for global function t() with expectation
+ $t = $this->getFunctionMock('Zotlabs\Access', 't');
+ $t->expects($this->exactly(2*$permsCount))->willReturnCallback(
+ function ($string) {
+ return $string;
+ }
+ );
+
+ // static method Perms()
+ $perms = Permissions::Perms();
+
+ $p = new Permissions();
+ $this->assertEquals($perms, $p->Perms());
+
+ $this->assertEquals($permsCount, count($perms), "There should be $permsCount permissions.");
+
+ $this->assertEquals('Can view my channel stream and posts', $perms['view_stream']);
+
+ // non existent perm should not be set
+ $this->assertFalse(isset($perms['invalid_perm']));
+ }
+
/**
+ * filter parmeter is only used in hook \b permissions_list. So the result
+ * in this test should be the same as if there was no filter parameter.
+ *
+ * @todo Stub call_hooks() function and also test filter
+ *
+ * @uses ::call_hooks
+ */
+ public function testPermsFilter() {
+ // There are 18 default perms
+ $permsCount = 18;
+
+ // Create a stub for global function t() with expectation
+ $t = $this->getFunctionMock('Zotlabs\Access', 't');
+ $t->expects($this->exactly(2*$permsCount))->willReturnCallback(
+ function ($string) {
+ return $string;
+ }
+ );
+
+ $perms = Permissions::Perms('view_');
+ $this->assertEquals($permsCount, count($perms));
+
+ $this->assertEquals('Can view my channel stream and posts', $perms['view_stream']);
+
+ $perms = Permissions::Perms('invalid_perm');
+ $this->assertEquals($permsCount, count($perms));
+ }
+
+ /**
+ * Better should mock Permissions::Perms, but not possible with static methods.
+ *
+ * @uses ::call_hooks
+ *
* @dataProvider FilledPermsProvider
+ *
+ * @param array $permarr An indexed permissions array to pass
+ * @param array $expected The expected result perms array
*/
public function testFilledPerms($permarr, $expected) {
- $this->markTestIncomplete(
- 'Need to mock static function Permissions::Perms() ...'
- );
- //$this->assertEquals($expected, Permissions::FilledPerms($permarr));
-
-/* $perms = $this->getMockBuilder(Permissions::class)
- ->setMethods(['Perms'])
- ->getMock();
- $perms->expects($this->once())
- ->method('Perms');
- // still calls the static self::Perms()
- $perms->FilledPerms($permarr);
-*/
+ // Create a stub for global function t()
+ $t = $this->getFunctionMock('Zotlabs\Access', 't');
+
+ $this->assertEquals($expected, Permissions::FilledPerms($permarr));
}
+ /**
+ * @return array An associative array with test values for FilledPerms()
+ * * \e array Indexed array which is passed as parameter to FilledPerms()
+ * * \e array Expected associative result array with filled perms
+ */
public function FilledPermsProvider() {
return [
- 'empty' => [
+ 'Empty param array' => [
[],
- ['perm1' => 0, 'perm2' => 0]
+ [
+ 'view_stream' => 0,
+ 'send_stream' => 0,
+ 'view_profile' => 0,
+ 'view_contacts' => 0,
+ 'view_storage' => 0,
+ 'write_storage' => 0,
+ 'view_pages' => 0,
+ 'view_wiki' => 0,
+ 'write_pages' => 0,
+ 'write_wiki' => 0,
+ 'post_wall' => 0,
+ 'post_comments' => 0,
+ 'post_mail' => 0,
+ 'post_like' => 0,
+ 'tag_deliver' => 0,
+ 'chat' => 0,
+ 'republish' => 0,
+ 'delegate' => 0
+ ]
],
- 'valild' => [
- [['perm1' => 1]],
- ['perm1' => 1, 'perm2' => 0]
+ 'provide view_stream and view_pages as param' => [
+ ['view_stream', 'view_pages'],
+ [
+ 'view_stream' => 1,
+ 'send_stream' => 0,
+ 'view_profile' => 0,
+ 'view_contacts' => 0,
+ 'view_storage' => 0,
+ 'write_storage' => 0,
+ 'view_pages' => 1,
+ 'view_wiki' => 0,
+ 'write_pages' => 0,
+ 'write_wiki' => 0,
+ 'post_wall' => 0,
+ 'post_comments' => 0,
+ 'post_mail' => 0,
+ 'post_like' => 0,
+ 'tag_deliver' => 0,
+ 'chat' => 0,
+ 'republish' => 0,
+ 'delegate' => 0
+ ]
+ ],
+ 'provide an unknown param' => [
+ ['view_stream', 'unknown_perm'],
+ [
+ 'view_stream' => 1,
+ 'send_stream' => 0,
+ 'view_profile' => 0,
+ 'view_contacts' => 0,
+ 'view_storage' => 0,
+ 'write_storage' => 0,
+ 'view_pages' => 0,
+ 'view_wiki' => 0,
+ 'write_pages' => 0,
+ 'write_wiki' => 0,
+ 'post_wall' => 0,
+ 'post_comments' => 0,
+ 'post_mail' => 0,
+ 'post_like' => 0,
+ 'tag_deliver' => 0,
+ 'chat' => 0,
+ 'republish' => 0,
+ 'delegate' => 0
+ ]
]
];
}
-/* public function testFilledPermsNull() {
- // need to mock global function btlogger();
- Permissions::FilledPerms(null);
+ /**
+ * @uses ::call_hooks
+ */
+ public function testFilledPermsNull() {
+ // Create a stub for global function t() with expectation
+ $t = $this->getFunctionMock('Zotlabs\Access', 't');
+ $t->expects($this->atLeastOnce());
+ // Create a stub for global function bt() with expectations
+ $bt = $this->getFunctionMock('Zotlabs\Access', 'btlogger');
+ $bt->expects($this->once())->with($this->equalTo('FilledPerms: null'));
+
+ $result = [
+ 'view_stream' => 0,
+ 'send_stream' => 0,
+ 'view_profile' => 0,
+ 'view_contacts' => 0,
+ 'view_storage' => 0,
+ 'write_storage' => 0,
+ 'view_pages' => 0,
+ 'view_wiki' => 0,
+ 'write_pages' => 0,
+ 'write_wiki' => 0,
+ 'post_wall' => 0,
+ 'post_comments' => 0,
+ 'post_mail' => 0,
+ 'post_like' => 0,
+ 'tag_deliver' => 0,
+ 'chat' => 0,
+ 'republish' => 0,
+ 'delegate' => 0
+ ];
+
+ $this->assertEquals($result, Permissions::FilledPerms(null));
}
-*/
+
/**
* @dataProvider OPermsProvider
*
- * @param array $permarr
- * @param array $expected
+ * @param array $permarr The params to pass to the OPerms method
+ * @param array $expected The expected result
*/
public function testOPerms($permarr, $expected) {
$this->assertEquals($expected, Permissions::OPerms($permarr));
}
/**
- * @return Associative array with test values for OPerms()
- * * \e array Array to test
- * * \e array Expect array
+ * @return array An associative array with test values for OPerms()
+ * * \e array Array with perms to test
+ * * \e array Expected result array
*/
public function OPermsProvider() {
return [
@@ -99,22 +274,21 @@ class PermissionsTest extends UnitTestCase {
];
}
-
/**
* @dataProvider permsCompareProvider
*
- * @param array $p1
- * @param array $p2
- * @param boolean $expectedresult
+ * @param array $p1 The first permission
+ * @param array $p2 The second permission
+ * @param boolean $expectedresult The expected result of the tested method
*/
public function testPermsCompare($p1, $p2, $expectedresult) {
$this->assertEquals($expectedresult, Permissions::PermsCompare($p1, $p2));
}
/**
- * @return Associative array with test values for PermsCompare()
- * * \e array 1st array
- * * \e array 2nd array
- * * \e boolean expected result for the test
+ * @return array An associative array with test values for PermsCompare()
+ * * \e array 1st array with perms
+ * * \e array 2nd array with perms
+ * * \e boolean expected result for the perms comparison
*/
public function permsCompareProvider() {
return [
@@ -145,4 +319,4 @@ class PermissionsTest extends UnitTestCase {
]
];
}
-} \ No newline at end of file
+}