Open Journal Systems  3.3.0
PluginTestCase.inc.php
1 <?php
2 
21 require_mock_env('env2');
22 
23 import('lib.pkp.tests.DatabaseTestCase');
24 import('lib.pkp.classes.plugins.Plugin');
25 
30  protected function getAffectedTables() {
31  return array(
32  'filters', 'filter_settings', 'filter_groups',
33  'versions', 'plugin_settings'
34  );
35  }
36 
40  protected function getMockedRegistryKeys() {
41  return array('request', 'hooks');
42  }
43 
51  protected function executePluginTest($pluginCategory, $pluginDir, $pluginName, $filterGroups) {
52  // Make sure that the xml configuration is valid.
53  $filterConfigFile = 'plugins/'.$pluginCategory.'/'.$pluginDir.'/filter/'.PLUGIN_FILTER_DATAFILE;
54  $this->validateXmlConfig(array('./'.$filterConfigFile, './lib/pkp/'.$filterConfigFile));
55 
56  // Mock request and router.
57  import('lib.pkp.classes.core.PKPRouter');
58  import('classes.core.Request');
59  $mockRequest = $this->getMockBuilder(Request::class)
60  ->setMethods(array('getRouter', 'getUser'))
61  ->getMock();
62  $router = new PKPRouter();
63  $mockRequest->expects($this->any())
64  ->method('getRouter')
65  ->will($this->returnValue($router));
66  $mockRequest->expects($this->any())
67  ->method('getUser')
68  ->will($this->returnValue(null));
69  Registry::set('request', $mockRequest);
70 
71  // Instantiate the installer.
72  import('classes.install.Install');
73  $installFile = './lib/pkp/tests/plugins/testPluginInstall.xml';
74  $params = $this->getConnectionParams();
75  $installer = new Install($params, $installFile, true);
76 
77  // Parse the plug-ins version.xml.
78  import('lib.pkp.classes.site.VersionCheck');
79  self::assertFileExists($versionFile = './plugins/'.$pluginCategory.'/'.$pluginDir.'/version.xml');
80  self::assertArrayHasKey('version', $versionInfo = VersionCheck::parseVersionXML($versionFile));
81  self::assertInstanceOf('Version', $pluginVersion = $versionInfo['version']);
82  $installer->setCurrentVersion($pluginVersion);
83 
84  // Install the plug-in.
85  self::assertTrue($installer->execute());
86 
87  // Reset the hook registry.
88  $nullVar = null;
89  Registry::set('hooks', $nullVar);
90 
91  // Test whether the installation is idempotent.
92  $this->markTestIncomplete('Idempotence test disabled temporarily.');
93  // self::assertTrue($installer->execute());
94 
95  // Test whether the filter groups have been installed.
96  $filterGroupDao = DAORegistry::getDAO('FilterGroupDAO'); /* @var $filterGroupDao FilterGroupDAO */
97  foreach($filterGroups as $filterGroupSymbolic) {
98  // Check the group.
99  self::assertInstanceOf('FilterGroup', $filterGroupDao->getObjectBySymbolic($filterGroupSymbolic), $filterGroupSymbolic);
100  }
101  }
102 
103 
104  //
105  // Protected helper function
106  //
107  protected function validateXmlConfig($configFiles) {
108  foreach($configFiles as $configFile) {
109  if(file_exists($configFile)) {
110  $xmlDom = new DOMDocument();
111  $xmlDom->load($configFile);
112  self::assertTrue($xmlDom->validate());
113  unset($xmlDom);
114  }
115  }
116  }
117 
118 
119  //
120  // Private helper function
121  //
126  private function getConnectionParams() {
127  return array(
128  'clientCharset' => Config::getVar('i18n', 'client_charset'),
129  'connectionCharset' => Config::getVar('i18n', 'connection_charset'),
130  'databaseDriver' => Config::getVar('database', 'driver'),
131  'databaseHost' => Config::getVar('database', 'host'),
132  'databaseUsername' => Config::getVar('database', 'username'),
133  'databasePassword' => Config::getVar('database', 'password'),
134  'databaseName' => Config::getVar('database', 'name')
135  );
136  }
137 }
138 
DAORegistry\getDAO
static & getDAO($name, $dbconn=null)
Definition: DAORegistry.inc.php:57
Registry\set
static set($key, &$value)
Definition: Registry.inc.php:53
PluginTestCase
Abstract base class for Plugin tests.
Definition: PluginTestCase.inc.php:26
PluginTestCase\getAffectedTables
getAffectedTables()
Definition: PluginTestCase.inc.php:30
PluginTestCase\getMockedRegistryKeys
getMockedRegistryKeys()
Definition: PluginTestCase.inc.php:40
Config\getVar
static getVar($section, $key, $default=null)
Definition: Config.inc.php:35
PluginTestCase\executePluginTest
executePluginTest($pluginCategory, $pluginDir, $pluginName, $filterGroups)
Definition: PluginTestCase.inc.php:51
PKPRouter
Basic router class that has functionality common to all routers.
Definition: PKPRouter.inc.php:57
Install
Perform system installation.
Definition: Install.inc.php:28
PluginTestCase\validateXmlConfig
validateXmlConfig($configFiles)
Definition: PluginTestCase.inc.php:107
DatabaseTestCase
Base class for unit tests that require database support. The schema TestName.setUp....
Definition: DatabaseTestCase.inc.php:23
VersionCheck\parseVersionXML
static parseVersionXML($url)
Definition: VersionCheck.inc.php:74