diff options
-rw-r--r-- | src/MailmanLib.php | 11 | ||||
-rw-r--r-- | src/PhpBB3Conf.php | 5 | ||||
-rw-r--r-- | src/PhpBB3Lib.php | 30 | ||||
-rw-r--r-- | test/MailmanLibTest.php | 25 | ||||
-rw-r--r-- | test/PhpBB3LibTest.php | 50 | ||||
-rw-r--r-- | test/empty | 0 |
6 files changed, 121 insertions, 0 deletions
diff --git a/src/MailmanLib.php b/src/MailmanLib.php new file mode 100644 index 0000000..ca3dadf --- /dev/null +++ b/src/MailmanLib.php @@ -0,0 +1,11 @@ +<?php + +function read_raw_message($url) { + $input = file_get_contents($url); + if (!$input) { + trigger_error("No input in $url", E_USER_ERROR); + } + return $input; +} + +?> diff --git a/src/PhpBB3Conf.php b/src/PhpBB3Conf.php new file mode 100644 index 0000000..7f023d9 --- /dev/null +++ b/src/PhpBB3Conf.php @@ -0,0 +1,5 @@ +<?php + +$phpbb_root_path = '/var/www/forum/'; + +?> diff --git a/src/PhpBB3Lib.php b/src/PhpBB3Lib.php new file mode 100644 index 0000000..f9f91d7 --- /dev/null +++ b/src/PhpBB3Lib.php @@ -0,0 +1,30 @@ +<?php + +# phpBB setup +define('IN_PHPBB', true); +require_once(__DIR__ . '/PhpBB3Conf.php'); +$phpEx = substr(strrchr(__FILE__, '.'), 1); +require_once($phpbb_root_path . 'common.' . $phpEx); +#require_once($phpbb_root_path . 'includes/functions_user.' . $phpEx); + + +function get_user_id($from) { + global $db; + + $sql = 'SELECT user_id FROM ' . USERS_TABLE . + ' WHERE user_email = "' . $db->sql_escape($from) . '"'; + + $result = $db->sql_query($sql); +// FIXME: what to do if more than one row is returned? + $row = $db->sql_fetchrow($result); + $db->sql_freeresult($result); + + if (!$row) { + trigger_error("Unknown user email: $from", E_USER_ERROR); + } + + return $row['user_id']; +} + + +?> diff --git a/test/MailmanLibTest.php b/test/MailmanLibTest.php new file mode 100644 index 0000000..eeee160 --- /dev/null +++ b/test/MailmanLibTest.php @@ -0,0 +1,25 @@ +<?php + +require_once('PHPUnit/Framework.php'); +require_once('src/MailmanLib.php'); + +class MailmanLibTest extends PHPUnit_Framework_TestCase { + + /** + * @dataProvider provider_read_raw_message + */ + public function test_read_raw_message($url, $expected, $ex) { + if ($ex) $this->setExpectedException($ex); + $this->assertEquals($expected, read_raw_message($url)); + } + + public function provider_read_raw_message() { + return array( + array(__DIR__ . '/empty', null, 'PHPUnit_Framework_Error'), + array(__DIR__ . '/bougs', null, 'PHPUnit_Framework_Error'), + array(__DIR__ . '/1', file_get_contents(__DIR__ . '/1'), null), + ); + } +} + +?> diff --git a/test/PhpBB3LibTest.php b/test/PhpBB3LibTest.php new file mode 100644 index 0000000..cfad41f --- /dev/null +++ b/test/PhpBB3LibTest.php @@ -0,0 +1,50 @@ +<?php + +require_once('PHPUnit/Framework.php'); + +class PhpBB3LibTest extends PHPUnit_Framework_TestCase { + + /** + * phpBB3 uses many globals; due to the way tests are run, we cannot + * easily get these globals into the right scope so that the methods + * called by our tests can see them. Therefore, we use this function + * to run tests externally and report back on the results. + */ + protected function exec_kludge($run) { + $prog = <<<EOF +try { + require_once("src/PhpBB3Lib.php"); + \$result = serialize($run); +} +catch (Exception \$e) { + \$result = serialize(\$e); +} + +print \$result; +EOF; + + $result = unserialize(exec('php -r \'' . $prog . '\'')); + + if ($result instanceof Exception) { + throw $result; + } + + return $result; + } + + /** + * @dataProvider provider_get_user_id + */ + public function test_get_user_id($from, $expected, $ex) { + if ($ex) $this->setExpectedException($ex); + $run = 'get_user_id("' . $from . '")'; + $this->assertEquals($expected, $this->exec_kludge($run)); + } + + public function provider_get_user_id() { + return array( + array('bogus', null, 'PHPUnit_Framework_Error'), + array('uckelman@nomic.net', 2, null) + ); + } +} diff --git a/test/empty b/test/empty new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/test/empty |