Open Journal Systems  3.3.0
PolicyTestCase.inc.php
1 <?php
2 
18 import('lib.pkp.tests.PKPTestCase');
19 import('lib.pkp.classes.security.UserGroup');
20 import('lib.pkp.classes.core.PKPRequest');
21 
22 define('ROLE_ID_TEST', 0x9999);
23 
24 abstract class PolicyTestCase extends PKPTestCase {
26  private $contextObjects;
27 
29  private $authorizationContextManipulationPolicy;
30 
34  protected function getMockedRegistryKeys() {
35  return array('user');
36  }
37 
42  private function getContextObjects() {
43  return $this->contextObjects;
44  }
45 
50  private function setContextObjects($contextObjects) {
51  $this->contextObjects = $contextObjects;
52  }
53 
61  protected function getAuthorizationContextManipulationPolicy() {
62  if (is_null($this->authorizationContextManipulationPolicy)) {
63  // Use a policy to prepare an authorized context
64  // with a user group.
65  $policy = $this->getMockBuilder(AuthorizationPolicy::class)
66  ->setMethods(array('effect'))
67  ->getMock();
68  $policy->expects($this->any())
69  ->method('effect')
70  ->will($this->returnCallback(array($this, 'mockEffect')));
71  $this->authorizationContextManipulationPolicy = $policy;
72  }
73  return $this->authorizationContextManipulationPolicy;
74  }
75 
81  public function mockEffect() {
82  // Add a user group to the authorized context
83  // of the authorization context manipulation policy.
85  $userGroup = new UserGroup();
86  $userGroup->setRoleId(ROLE_ID_TEST);
87  $policy->addAuthorizedContextObject(ASSOC_TYPE_USER_GROUP, $userGroup);
88 
89  // Add user roles array to the authorized context.
90  $userRoles = array(ROLE_ID_TEST, ROLE_ID_SITE_ADMIN);
91  $policy->addAuthorizedContextObject(ASSOC_TYPE_USER_ROLES, $userRoles);
92  return AUTHORIZATION_PERMIT;
93  }
94 
103  protected function getMockRequest($requestedOp, $context = null, $user = null) {
104  // Mock a request to the permitted operation.
105  $request = new PKPRequest();
106 
107  $this->setContextObjects($context);
108 
109  // Mock a router.
110  $router = $this->getMockBuilder(PKPRouter::class)
111  ->setMethods(array('getHandler', 'getRequestedOp', 'getContext'))
112  ->getMock();
113 
114  $router->expects($this->any())
115  ->method('getHandler')
116  ->will($this->returnValue(new PKPHandler()));
117 
118  // Mock the getRequestedOp() method.
119  $router->expects($this->any())
120  ->method('getRequestedOp')
121  ->will($this->returnValue($requestedOp));
122 
123  // Mock the getContext() method.
124  $router->expects($this->any())
125  ->method('getContext')
126  ->will($this->returnCallback(array($this, 'mockGetContext')));
127 
128  // Put a user into the registry if one has been
129  // passed in.
130  if ($user instanceof User) {
131  Registry::set('user', $user);
132  }
133 
134  $request->setRouter($router);
135  return $request;
136  }
137 
144  public function mockGetContext() {
145  $functionArgs = func_get_args();
146  $contextLevel = $functionArgs[1];
147 
148  $contextObjects = $this->getContextObjects();
149  if (!empty($contextObjects[$contextLevel - 1])) {
150  return $contextObjects[$contextLevel - 1];
151  }
152  return null;
153  }
154 }
155 
PolicyTestCase\mockGetContext
mockGetContext()
Definition: PolicyTestCase.inc.php:150
PolicyTestCase\getAuthorizationContextManipulationPolicy
getAuthorizationContextManipulationPolicy()
Definition: PolicyTestCase.inc.php:67
PKPTestCase
Class that implements functionality common to all PKP unit test cases.
Definition: PKPTestCase.inc.php:27
PKPHandler
Definition: PKPHandler.inc.php:17
Registry\set
static set($key, &$value)
Definition: Registry.inc.php:53
PKPRequest
Class providing operations associated with HTTP requests.
Definition: PKPRequest.inc.php:17
PolicyTestCase\getMockedRegistryKeys
getMockedRegistryKeys()
Definition: PolicyTestCase.inc.php:40
PolicyTestCase\mockEffect
mockEffect()
Definition: PolicyTestCase.inc.php:87
UserGroup
Describes user groups.
Definition: UserGroup.inc.php:20
PolicyTestCase\getMockRequest
getMockRequest($requestedOp, $context=null, $user=null)
Definition: PolicyTestCase.inc.php:109
PolicyTestCase
Abstract base test class that provides infrastructure for several types of policy tests.
Definition: PolicyTestCase.inc.php:24
User
Basic class describing users existing in the system.
Definition: User.inc.php:23