Open Journal Systems  3.3.0
PKPTestCase.inc.php
1 <?php
22 // Include PHPUnit
23 import('lib.pkp.tests.PKPTestHelper');
24 
25 use PHPUnit\Framework\TestCase;
26 
27 abstract class PKPTestCase extends TestCase {
28  private
29  $daoBackup = array(),
30  $registryBackup = array(),
32 
38  protected function getMockedDAOs() {
39  return array();
40  }
41 
47  protected function getMockedRegistryKeys() {
49  }
50 
54  protected function setUp() : void {
55  $this->setBackupGlobals(true);
56 
57  // Rather than using "include_once()", ADOdb uses
58  // a global variable to maintain the information
59  // whether its library has been included before (wtf!).
60  // This causes problems with PHPUnit as PHPUnit will
61  // delete all global state between two consecutive
62  // tests to isolate tests from each other.
63  if(function_exists('_array_change_key_case')) {
64  global $ADODB_INCLUDED_LIB;
65  $ADODB_INCLUDED_LIB = 1;
66  }
67  Config::setConfigFileName(Core::getBaseDir(). DIRECTORY_SEPARATOR. 'config.inc.php');
68 
69  // Backup DAOs.
70  foreach($this->getMockedDAOs() as $mockedDao) {
71  $this->daoBackup[$mockedDao] = DAORegistry::getDAO($mockedDao);
72  }
73 
74  // Backup registry keys.
75  foreach($this->getMockedRegistryKeys() as $mockedRegistryKey) {
76  $this->registryBackup[$mockedRegistryKey] = Registry::get($mockedRegistryKey);
77  }
78  }
79 
83  protected function tearDown() : void {
84  // Restore registry keys.
85  foreach($this->getMockedRegistryKeys() as $mockedRegistryKey) {
86  Registry::set($mockedRegistryKey, $this->registryBackup[$mockedRegistryKey]);
87  }
88 
89  // Restore DAOs.
90  foreach($this->getMockedDAOs() as $mockedDao) {
91  DAORegistry::registerDAO($mockedDao, $this->daoBackup[$mockedDao]);
92  }
93  }
94 
98  public function getActualOutput() : string {
99  // We do not want to see output.
100  return '';
101  }
102 
103 
104  //
105  // Protected helper methods
106  //
113  protected function setTestConfiguration($config, $configPath = 'config') {
114  // Get the configuration file belonging to
115  // this test configuration.
116  $configFile = $this->getConfigFile($config, $configPath);
117 
118  // Avoid unnecessary configuration switches.
119  if (Config::getConfigFileName() != $configFile) {
120  // Switch the configuration file
121  Config::setConfigFileName($configFile);
122  }
123  }
124 
143  protected function mockRequest($path = 'index/test-page/test-op', $userId = null) {
144  // Back up the default request.
145  if (!isset($this->registryBackup['request'])) {
146  $this->mockedRegistryKeys[] = 'request';
147  $this->registryBackup['request'] = Registry::get('request');
148  }
149 
150  // Create a test request.
151  Registry::delete('request');
153  $_SERVER['REQUEST_METHOD'] = 'GET';
154  $_SERVER['PATH_INFO'] = $path;
155  $request = $application->getRequest();
156  import('classes.core.PageRouter');
157 
158  // Test router.
159  $router = new PageRouter();
160  $router->setApplication($application);
161  import('lib.pkp.classes.core.Dispatcher');
162  $dispatcher = new Dispatcher();
163  $dispatcher->setApplication($application);
164  $router->setDispatcher($dispatcher);
165  $request->setRouter($router);
166 
167  // Test user.
168  $session = $request->getSession();
169  $session->setUserId($userId);
170 
171  return $request;
172  }
173 
174 
175  //
176  // Private helper methods
177  //
184  private function getConfigFile($config, $configPath = 'config') {
185  // Build the config file name.
186  return './lib/pkp/tests/'.$configPath.'/config.'.$config.'.inc.php';
187  }
188 }
189 
PKPTestCase\tearDown
tearDown()
Definition: PKPTestCase.inc.php:83
Config\getConfigFileName
static getConfigFileName()
Definition: Config.inc.php:86
PKPTestCase\getActualOutput
getActualOutput()
Definition: PKPTestCase.inc.php:98
$application
$application
Definition: index.php:65
PKPTestCase\getMockedRegistryKeys
getMockedRegistryKeys()
Definition: PKPTestCase.inc.php:47
DAORegistry\getDAO
static & getDAO($name, $dbconn=null)
Definition: DAORegistry.inc.php:57
Registry\delete
static delete($key)
Definition: Registry.inc.php:62
PKPTestCase
Class that implements functionality common to all PKP unit test cases.
Definition: PKPTestCase.inc.php:27
Registry\set
static set($key, &$value)
Definition: Registry.inc.php:53
PKPTestCase\setUp
setUp()
Definition: PKPTestCase.inc.php:54
PKPTestCase\getMockedDAOs
getMockedDAOs()
Definition: PKPTestCase.inc.php:38
Registry\get
static & get($key, $createIfEmpty=false, $createWithDefault=null)
Definition: Registry.inc.php:35
DAORegistry\registerDAO
static registerDAO($name, $dao)
Definition: DAORegistry.inc.php:40
PKPTestCase\setTestConfiguration
setTestConfiguration($config, $configPath='config')
Definition: PKPTestCase.inc.php:113
PKPTestCase\mockRequest
mockRequest($path='index/test-page/test-op', $userId=null)
Definition: PKPTestCase.inc.php:143
PageRouter
Class providing OJS-specific page routing.
Definition: PageRouter.inc.php:18
Config\setConfigFileName
static setConfigFileName($configFile)
Definition: Config.inc.php:73
PKPTestCase\$registryBackup
$registryBackup
Definition: PKPTestCase.inc.php:30
Core\getBaseDir
static getBaseDir()
Definition: Core.inc.php:37
PKPApplication\get
static get()
Definition: PKPApplication.inc.php:235
Dispatcher
Class dispatching HTTP requests to handlers.
Definition: Dispatcher.inc.php:17
PKPTestCase\$mockedRegistryKeys
$mockedRegistryKeys
Definition: PKPTestCase.inc.php:31