Skip to content
Permalink
Browse files

Fixed remote plugin tests

Mocking the plugin controller doesn't work like before anymore, because
of the singleton mechanim.
  • Loading branch information...
splitbrain committed Jul 21, 2018
1 parent 628d182 commit dc0f84f0f7d996af1547bb32013c76f2f290eeae
Showing with 142 additions and 86 deletions.
  1. +23 −86 _test/tests/inc/remote.test.php
  2. +52 −0 lib/plugins/testing/remote/auto.php
  3. +67 −0 lib/plugins/testing/remote/manual.php
@@ -79,62 +79,13 @@ function publicCall() {return true;}
}
class remote_plugin_testplugin extends RemotePlugin {
function _getMethods() {
return array(
'method1' => array(
'args' => array(),
'return' => 'void'
), 'methodString' => array(
'args' => array(),
'return' => 'string'
), 'method2' => array(
'args' => array('string', 'int'),
'return' => 'array',
'name' => 'method2',
), 'method2ext' => array(
'args' => array('string', 'int', 'bool'),
'return' => 'array',
'name' => 'method2',
), 'publicCall' => array(
'args' => array(),
'return' => 'boolean',
'doc' => 'testing for public access',
'name' => 'publicCall',
'public' => 1
)
);
}
function method1() { return null; }
function methodString() { return 'success'; }
function method2($str, $int, $bool = false) { return array($str, $int, $bool); }
function publicCall() {return true;}
}
class remote_plugin_testplugin2 extends RemotePlugin {
/**
* This is a dummy method
*
* @param string $str some more parameter description
* @param int $int
* @param bool $bool
* @param Object $unknown
* @return array
*/
public function commented($str, $int, $bool, $unknown) { return array($str, $int, $bool); }
private function privateMethod() {return true;}
protected function protectedMethod() {return true;}
public function _underscore() {return true;}
}
class remote_test extends DokuWikiTest {
protected $userinfo;
protected $pluginsEnabled = ['testing'];
/** @var Api */
protected $remote;
@@ -147,20 +98,6 @@ function setUp() {
parent::setUp();
// mock plugin controller to return our test plugins
$pluginManager = $this->createMock('dokuwiki\Extension\PluginController');
$pluginManager->method('getList')->willReturn(array('testplugin', 'testplugin2'));
$pluginManager->method('load')->willReturnCallback(
function($type, $plugin) {
if($plugin == 'testplugin2') {
return new remote_plugin_testplugin2();
} else {
return new remote_plugin_testplugin();
}
}
);
$plugin_controller = $pluginManager;
$conf['remote'] = 1;
$conf['remoteuser'] = '!!not set!!';
$conf['useacl'] = 0;
@@ -180,27 +117,27 @@ function tearDown() {
function test_pluginMethods() {
$methods = $this->remote->getPluginMethods();
$actual = array_keys($methods);
sort($actual);
$expect = array(
'plugin.testplugin.method1',
'plugin.testplugin.method2',
'plugin.testplugin.methodString',
'plugin.testplugin.method2ext',
'plugin.testplugin.publicCall',
'plugin.testing_manual.method1',
'plugin.testing_manual.method2',
'plugin.testing_manual.methodString',
'plugin.testing_manual.method2ext',
'plugin.testing_manual.publicCall',
'plugin.testplugin2.commented'
'plugin.testing_auto.commented'
);
sort($expect);
$this->assertEquals($expect,$actual);
foreach($expect as $e) {
$this->assertContains($e, $actual);
}
}
function test_pluginDescriptors() {
$methods = $this->remote->getPluginMethods();
$this->assertEquals(array('string','int','bool','string'), $methods['plugin.testplugin2.commented']['args']);
$this->assertEquals('array', $methods['plugin.testplugin2.commented']['return']);
$this->assertEquals(0, $methods['plugin.testplugin2.commented']['public']);
$this->assertContains('This is a dummy method', $methods['plugin.testplugin2.commented']['doc']);
$this->assertContains('string $str some more parameter description', $methods['plugin.testplugin2.commented']['doc']);
$this->assertEquals(array('string','int','bool','string'), $methods['plugin.testing_auto.commented']['args']);
$this->assertEquals('array', $methods['plugin.testing_auto.commented']['return']);
$this->assertEquals(0, $methods['plugin.testing_auto.commented']['public']);
$this->assertContains('This is a dummy method', $methods['plugin.testing_auto.commented']['doc']);
$this->assertContains('string $str some more parameter description', $methods['plugin.testing_auto.commented']['doc']);
}
function test_hasAccessSuccess() {
@@ -326,10 +263,10 @@ function test_pluginCallMethods() {
$conf['useacl'] = 1;
$remoteApi = new Api();
$this->assertEquals($remoteApi->call('plugin.testplugin.method1'), null);
$this->assertEquals($remoteApi->call('plugin.testplugin.method2', array('string', 7)), array('string', 7, false));
$this->assertEquals($remoteApi->call('plugin.testplugin.method2ext', array('string', 7, true)), array('string', 7, true));
$this->assertEquals($remoteApi->call('plugin.testplugin.methodString'), 'success');
$this->assertEquals($remoteApi->call('plugin.testing_manual.method1'), null);
$this->assertEquals($remoteApi->call('plugin.testing_manual.method2', array('string', 7)), array('string', 7, false));
$this->assertEquals($remoteApi->call('plugin.testing_manual.method2ext', array('string', 7, true)), array('string', 7, true));
$this->assertEquals($remoteApi->call('plugin.testing_manual.methodString'), 'success');
}
/**
@@ -355,7 +292,7 @@ function test_publicCallPlugin() {
global $conf;
$conf['useacl'] = 1;
$remoteApi = new Api();
$this->assertTrue($remoteApi->call('plugin.testplugin.publicCall'));
$this->assertTrue($remoteApi->call('plugin.testing_manual.publicCall'));
}
/**
@@ -376,7 +313,7 @@ function test_publicCallPluginDeny() {
global $conf;
$conf['useacl'] = 1;
$remoteApi = new Api();
$remoteApi->call('plugin.testplugin.methodString');
$remoteApi->call('plugin.testing_manual.methodString');
}
function test_pluginCallCustomPath() {
@@ -394,6 +331,6 @@ function test_pluginCallCustomPath() {
}
function pluginCallCustomPathRegister(&$event, $param) {
$event->data['custom.path'] = array('testplugin', 'methodString');
$event->data['custom.path'] = array('testing_manual', 'methodString');
}
}
@@ -0,0 +1,52 @@
<?php
use dokuwiki\Extension\RemotePlugin;
/**
* For testing automatically extracted method descriptions
*
* @author Andreas Gohr <andi@splitbrain.org>
*/
class remote_plugin_testing_auto extends RemotePlugin
{
/**
* This is a dummy method
*
* @param string $str some more parameter description
* @param int $int
* @param bool $bool
* @param Object $unknown
* @return array
*/
public function commented($str, $int, $bool, $unknown)
{
return array($str, $int, $bool);
}
/**
* This should not be accessible via API
* @return bool
*/
private function privateMethod()
{
return true;
}
/**
* This should not be accessible via API
* @return bool
*/
protected function protectedMethod()
{
return true;
}
/**
* This should not be accessible via API
* @return bool
*/
public function _underscore()
{
return true;
}
}
@@ -0,0 +1,67 @@
<?php
use dokuwiki\Extension\RemotePlugin;
/**
* For testing manual method descriptions
*
* @author Dominik Eckelmann <deckelmann@gmail.com>
*/
class remote_plugin_testing_manual extends RemotePlugin
{
/** @inheritdoc */
function _getMethods()
{
return array(
'method1' => array(
'args' => array(),
'return' => 'void',
),
'methodString' => array(
'args' => array(),
'return' => 'string',
),
'method2' => array(
'args' => array('string', 'int'),
'return' => 'array',
'name' => 'method2',
),
'method2ext' => array(
'args' => array('string', 'int', 'bool'),
'return' => 'array',
'name' => 'method2',
),
'publicCall' => array(
'args' => array(),
'return' => 'boolean',
'doc' => 'testing for public access',
'name' => 'publicCall',
'public' => 1,
),
);
}
/** @inheritdoc */
function method1()
{
return null;
}
/** @inheritdoc */
function methodString()
{
return 'success';
}
/** @inheritdoc */
function method2($str, $int, $bool = false)
{
return array($str, $int, $bool);
}
/** @inheritdoc */
function publicCall()
{
return true;
}
}

0 comments on commit dc0f84f

Please sign in to comment.
You can’t perform that action at this time.