mirror of
https://github.com/phpbb/phpbb.git
synced 2025-08-11 19:24:01 +02:00
Merge branch 'develop' into ticket/10820-develop
# By Joas Schilling (146) and others # Via Andreas Fischer (50) and others * develop: (356 commits) [ticket/11599] Copy the forums into a static array for later reuse [ticket/11602] Do not call localize_errors() if avatars are disabled [ticket/11601] Add protected method for database sync and call it [ticket/11601] Split post_setup_synchronisation logic from xml parsing [ticket/11550] Specify a valid path so it's clearer that it must be a path [ticket/11550] Move comments to correct function [ticket/11550] We use a different fixture set for extension_acp_test.php [ticket/11550] Fixtures should only be directories not files [ticket/11550] Use new functionality from the test case helpers [ticket/11550] Move functionality for copying/restoring to test case helpers [ticket/11550] Fix copying the fixtures in extension_permission_lang_test.php [ticket/11543] Add more users so #hidden <> #normal [ticket/11590] Close database connections when tearDown() is called [ticket/develop/11543] Use plurals in develop [ticket/11543] Use correct IP addresses and inject time for correct values [ticket/11543] Add unit tests for obtain_users_online_string() [ticket/11543] Add unit tests for obtain_users_online() with empty forum [ticket/11543] Add unit tests for obtain_users_online() [ticket/11543] Add unit tests for obtain_guest_count() [ticket/11481] Move prepended slash from calls into function ...
This commit is contained in:
@@ -7,9 +7,14 @@ Prerequisites
|
||||
PHPUnit
|
||||
-------
|
||||
|
||||
phpBB unit tests use PHPUnit framework. Version 3.5 or better is required
|
||||
to run the tests. PHPUnit prefers to be installed via PEAR; refer to
|
||||
http://www.phpunit.de/ for more information.
|
||||
phpBB unit tests use the PHPUnit framework (see http://www.phpunit.de for more
|
||||
information). Version 3.5 or higher is required to run the tests. PHPUnit can
|
||||
be installed via Composer together with other development dependencies as
|
||||
follows.
|
||||
|
||||
$ cd phpBB
|
||||
$ php ../composer.phar install --dev
|
||||
$ cd ..
|
||||
|
||||
PHP extensions
|
||||
--------------
|
||||
@@ -77,14 +82,16 @@ In order to run tests on some of the databases that we support, it will be
|
||||
necessary to provide a custom DSN string in test_config.php. This is only
|
||||
needed for MSSQL 2000+ (PHP module), MSSQL via ODBC, and Firebird when
|
||||
PDO_Firebird does not work on your system
|
||||
(https://bugs.php.net/bug.php?id=61183). The variable must be named $custom_dsn.
|
||||
(https://bugs.php.net/bug.php?id=61183). The variable must be named `$custom_dsn`.
|
||||
|
||||
Examples:
|
||||
Firebird using http://www.firebirdsql.org/en/odbc-driver/
|
||||
$custom_dsn = "Driver={Firebird/InterBase(r) driver};dbname=$dbhost:$dbname";
|
||||
|
||||
$custom_dsn = "Driver={Firebird/InterBase(r) driver};dbname=$dbhost:$dbname";
|
||||
|
||||
MSSQL
|
||||
$custom_dsn = "Driver={SQL Server Native Client 10.0};Server=$dbhost;Database=$dbname";
|
||||
|
||||
$custom_dsn = "Driver={SQL Server Native Client 10.0};Server=$dbhost;Database=$dbname";
|
||||
|
||||
The other fields in test_config.php should be filled out as you would normally
|
||||
to connect to that database in phpBB.
|
||||
@@ -113,7 +120,7 @@ Running
|
||||
Once the prerequisites are installed, run the tests from the project root
|
||||
directory (above phpBB):
|
||||
|
||||
$ phpunit
|
||||
$ phpBB/vendor/bin/phpunit
|
||||
|
||||
Slow tests
|
||||
--------------
|
||||
@@ -123,7 +130,7 @@ Thus these tests are in the `slow` group, which is excluded by default. You can
|
||||
enable slow tests by copying the phpunit.xml.all file to phpunit.xml. If you
|
||||
only want the slow tests, run:
|
||||
|
||||
$ phpunit --group slow
|
||||
$ phpBB/vendor/bin/phpunit --group slow
|
||||
|
||||
More Information
|
||||
================
|
@@ -55,11 +55,14 @@ class phpbb_dbal_migrator_test extends phpbb_database_test_case
|
||||
'phpbb_',
|
||||
$tools
|
||||
);
|
||||
|
||||
$container = new phpbb_mock_container_builder();
|
||||
$container->set('migrator', $migrator);
|
||||
|
||||
$this->extension_manager = new phpbb_extension_manager(
|
||||
new phpbb_mock_container_builder(),
|
||||
$container,
|
||||
$this->db,
|
||||
$this->config,
|
||||
$this->migrator,
|
||||
new phpbb_filesystem(),
|
||||
'phpbb_ext',
|
||||
dirname(__FILE__) . '/../../phpBB/',
|
||||
|
16
tests/extension/ext/barfoo/acp/a_info.php
Normal file
16
tests/extension/ext/barfoo/acp/a_info.php
Normal file
@@ -0,0 +1,16 @@
|
||||
<?php
|
||||
|
||||
class phpbb_ext_barfoo_acp_a_info
|
||||
{
|
||||
public function module()
|
||||
{
|
||||
return array(
|
||||
'filename' => 'phpbb_ext_barfoo_acp_a_module',
|
||||
'title' => 'Barfoo',
|
||||
'version' => '3.1.0-dev',
|
||||
'modes' => array(
|
||||
'config' => array('title' => 'Config', 'auth' => '', 'cat' => array('ACP_MODS')),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
5
tests/extension/ext/barfoo/acp/a_module.php
Normal file
5
tests/extension/ext/barfoo/acp/a_module.php
Normal file
@@ -0,0 +1,5 @@
|
||||
<?php
|
||||
|
||||
class phpbb_ext_barfoo_acp_a_module
|
||||
{
|
||||
}
|
5
tests/extension/ext/barfoo/ext.php
Normal file
5
tests/extension/ext/barfoo/ext.php
Normal file
@@ -0,0 +1,5 @@
|
||||
<?php
|
||||
|
||||
class phpbb_ext_barfoo_ext extends phpbb_extension_base
|
||||
{
|
||||
}
|
16
tests/extension/ext/foo/acp/a_info.php
Normal file
16
tests/extension/ext/foo/acp/a_info.php
Normal file
@@ -0,0 +1,16 @@
|
||||
<?php
|
||||
|
||||
class phpbb_ext_foo_acp_a_info
|
||||
{
|
||||
public function module()
|
||||
{
|
||||
return array(
|
||||
'filename' => 'phpbb_ext_foo_acp_a_module',
|
||||
'title' => 'Foobar',
|
||||
'version' => '3.1.0-dev',
|
||||
'modes' => array(
|
||||
'config' => array('title' => 'Config', 'auth' => '', 'cat' => array('ACP_MODS')),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
5
tests/extension/ext/foo/acp/a_module.php
Normal file
5
tests/extension/ext/foo/acp/a_module.php
Normal file
@@ -0,0 +1,5 @@
|
||||
<?php
|
||||
|
||||
class phpbb_ext_foo_acp_a_module
|
||||
{
|
||||
}
|
19
tests/extension/ext/foo/acp/fail_info.php
Normal file
19
tests/extension/ext/foo/acp/fail_info.php
Normal file
@@ -0,0 +1,19 @@
|
||||
<?php
|
||||
/*
|
||||
* Due to the mismatch between the class name and the file name, this module
|
||||
* file shouldn't be found by the extension finder
|
||||
*/
|
||||
class phpbb_ext_foo_acp_foo_info
|
||||
{
|
||||
public function module()
|
||||
{
|
||||
return array(
|
||||
'filename' => 'phpbb_ext_foo_acp_fail_module',
|
||||
'title' => 'Foobar',
|
||||
'version' => '3.1.0-dev',
|
||||
'modes' => array(
|
||||
'config' => array('title' => 'Config', 'auth' => '', 'cat' => array('ACP_MODS')),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
8
tests/extension/ext/foo/acp/fail_module.php
Normal file
8
tests/extension/ext/foo/acp/fail_module.php
Normal file
@@ -0,0 +1,8 @@
|
||||
<?php
|
||||
/*
|
||||
* Due to the mismatch between the class name and the file name of the module
|
||||
* info file, this module's info file shouldn't be found
|
||||
*/
|
||||
class phpbb_ext_foo_acp_fail_module
|
||||
{
|
||||
}
|
16
tests/extension/ext/foo/mcp/a_info.php
Normal file
16
tests/extension/ext/foo/mcp/a_info.php
Normal file
@@ -0,0 +1,16 @@
|
||||
<?php
|
||||
|
||||
class phpbb_ext_foo_mcp_a_info
|
||||
{
|
||||
public function module()
|
||||
{
|
||||
return array(
|
||||
'filename' => 'phpbb_ext_foo_mcp_a_module',
|
||||
'title' => 'Foobar',
|
||||
'version' => '3.1.0-dev',
|
||||
'modes' => array(
|
||||
'config' => array('title' => 'Config', 'auth' => '', 'cat' => array('MCP_MAIN')),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
5
tests/extension/ext/foo/mcp/a_module.php
Normal file
5
tests/extension/ext/foo/mcp/a_module.php
Normal file
@@ -0,0 +1,5 @@
|
||||
<?php
|
||||
|
||||
class phpbb_ext_foo_mcp_a_module
|
||||
{
|
||||
}
|
@@ -158,6 +158,23 @@ class phpbb_extension_finder_test extends phpbb_test_case
|
||||
);
|
||||
}
|
||||
|
||||
public function test_find_from_extension()
|
||||
{
|
||||
$files = $this->finder
|
||||
->extension_directory('/type')
|
||||
->find_from_extension('foo', dirname(__FILE__) . '/ext/foo/');
|
||||
$classes = $this->finder->get_classes_from_files($files);
|
||||
|
||||
sort($classes);
|
||||
$this->assertEquals(
|
||||
array(
|
||||
'phpbb_ext_foo_type_alternative',
|
||||
'phpbb_ext_foo_type_dummy_empty',
|
||||
),
|
||||
$classes
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* These do not work because of changes with PHPBB3-11386
|
||||
* They do not seem neccessary to me, so I am commenting them out for now
|
||||
|
28
tests/extension/includes/acp/acp_foobar.php
Normal file
28
tests/extension/includes/acp/acp_foobar.php
Normal file
@@ -0,0 +1,28 @@
|
||||
<?php
|
||||
/**
|
||||
*
|
||||
* @package testing
|
||||
* @copyright (c) 2013 phpBB Group
|
||||
* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
|
||||
*
|
||||
*/
|
||||
|
||||
/**
|
||||
* @ignore
|
||||
*/
|
||||
if (!defined('IN_PHPBB'))
|
||||
{
|
||||
exit;
|
||||
}
|
||||
|
||||
/**
|
||||
* @package acp
|
||||
*/
|
||||
class acp_foobar
|
||||
{
|
||||
var $u_action;
|
||||
|
||||
function main($id, $mode)
|
||||
{
|
||||
}
|
||||
}
|
26
tests/extension/includes/acp/info/acp_foobar.php
Normal file
26
tests/extension/includes/acp/info/acp_foobar.php
Normal file
@@ -0,0 +1,26 @@
|
||||
<?php
|
||||
/**
|
||||
*
|
||||
* @package testing
|
||||
* @copyright (c) 2013 phpBB Group
|
||||
* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
|
||||
*
|
||||
*/
|
||||
|
||||
/**
|
||||
* @package module_install
|
||||
*/
|
||||
class acp_foobar_info
|
||||
{
|
||||
function module()
|
||||
{
|
||||
return array(
|
||||
'filename' => 'acp_foobar',
|
||||
'title' => 'ACP Foobar',
|
||||
'version' => '3.1.0-dev',
|
||||
'modes' => array(
|
||||
'test' => array('title' => 'Test', 'auth' => '', 'cat' => array('ACP_GENERAL')),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
@@ -30,7 +30,7 @@ class phpbb_extension_manager_test extends phpbb_database_test_case
|
||||
|
||||
public function test_available()
|
||||
{
|
||||
$this->assertEquals(array('bar', 'foo', 'vendor/moo'), array_keys($this->extension_manager->all_available()));
|
||||
$this->assertEquals(array('bar', 'barfoo', 'foo', 'vendor/moo'), array_keys($this->extension_manager->all_available()));
|
||||
}
|
||||
|
||||
public function test_enabled()
|
||||
@@ -107,11 +107,13 @@ class phpbb_extension_manager_test extends phpbb_database_test_case
|
||||
$table_prefix,
|
||||
array()
|
||||
);
|
||||
$container = new phpbb_mock_container_builder();
|
||||
$container->set('migrator', $migrator);
|
||||
|
||||
return new phpbb_extension_manager(
|
||||
new phpbb_mock_container_builder(),
|
||||
$container,
|
||||
$db,
|
||||
$config,
|
||||
$migrator,
|
||||
new phpbb_filesystem(),
|
||||
'phpbb_ext',
|
||||
dirname(__FILE__) . '/',
|
||||
|
@@ -7,7 +7,9 @@
|
||||
*
|
||||
*/
|
||||
|
||||
class metadata_manager_test extends phpbb_database_test_case
|
||||
require_once dirname(__FILE__) . '/../../phpBB/includes/db/db_tools.php';
|
||||
|
||||
class phpbb_extension_metadata_manager_test extends phpbb_database_test_case
|
||||
{
|
||||
protected $class_loader;
|
||||
protected $extension_manager;
|
||||
@@ -59,11 +61,13 @@ class metadata_manager_test extends phpbb_database_test_case
|
||||
$this->table_prefix,
|
||||
array()
|
||||
);
|
||||
$container = new phpbb_mock_container_builder();
|
||||
$container->set('migrator', $migrator);
|
||||
|
||||
$this->extension_manager = new phpbb_extension_manager(
|
||||
new phpbb_mock_container_builder(),
|
||||
$container,
|
||||
$this->db,
|
||||
$this->config,
|
||||
$this->migrator,
|
||||
new phpbb_filesystem(),
|
||||
'phpbb_ext',
|
||||
$this->phpbb_root_path,
|
||||
@@ -416,31 +420,16 @@ class metadata_manager_test extends phpbb_database_test_case
|
||||
* Get an instance of the metadata manager
|
||||
*
|
||||
* @param string $ext_name
|
||||
* @return phpbb_extension_metadata_manager_test
|
||||
* @return phpbb_mock_metadata_manager
|
||||
*/
|
||||
private function get_metadata_manager($ext_name)
|
||||
{
|
||||
return new phpbb_extension_metadata_manager_test(
|
||||
return new phpbb_mock_metadata_manager(
|
||||
$ext_name,
|
||||
$this->db,
|
||||
$this->config,
|
||||
$this->extension_manager,
|
||||
$this->phpbb_root_path,
|
||||
$this->phpEx,
|
||||
$this->template,
|
||||
$this->config
|
||||
$this->phpbb_root_path
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
class phpbb_extension_metadata_manager_test extends phpbb_extension_metadata_manager
|
||||
{
|
||||
public function set_metadata($metadata)
|
||||
{
|
||||
$this->metadata = $metadata;
|
||||
}
|
||||
|
||||
public function merge_metadata($metadata)
|
||||
{
|
||||
$this->metadata = array_merge($this->metadata, $metadata);
|
||||
}
|
||||
}
|
192
tests/extension/modules_test.php
Normal file
192
tests/extension/modules_test.php
Normal file
@@ -0,0 +1,192 @@
|
||||
<?php
|
||||
/**
|
||||
*
|
||||
* @package testing
|
||||
* @copyright (c) 2013 phpBB Group
|
||||
* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
|
||||
*
|
||||
*/
|
||||
|
||||
require_once dirname(__FILE__) . '/ext/foo/acp/a_info.php';
|
||||
require_once dirname(__FILE__) . '/ext/foo/mcp/a_info.php';
|
||||
require_once dirname(__FILE__) . '/ext/foo/acp/fail_info.php';
|
||||
require_once dirname(__FILE__) . '/ext/barfoo/acp/a_info.php';
|
||||
require_once dirname(__FILE__) . '/../../phpBB/includes/acp/acp_modules.php';
|
||||
|
||||
class phpbb_extension_modules_test extends phpbb_test_case
|
||||
{
|
||||
protected $extension_manager;
|
||||
protected $finder;
|
||||
|
||||
public function setUp()
|
||||
{
|
||||
global $phpbb_extension_manager;
|
||||
|
||||
$this->extension_manager = new phpbb_mock_extension_manager(
|
||||
dirname(__FILE__) . '/',
|
||||
array(
|
||||
'foo' => array(
|
||||
'ext_name' => 'foo',
|
||||
'ext_active' => '1',
|
||||
'ext_path' => 'ext/foo/',
|
||||
),
|
||||
'bar' => array(
|
||||
'ext_name' => 'bar',
|
||||
'ext_active' => '1',
|
||||
'ext_path' => 'ext/bar/',
|
||||
),
|
||||
));
|
||||
$phpbb_extension_manager = $this->extension_manager;
|
||||
|
||||
$this->acp_modules = new acp_modules();
|
||||
}
|
||||
|
||||
public function test_get_module_infos()
|
||||
{
|
||||
global $phpbb_root_path;
|
||||
|
||||
// Correctly set the root path for this test to this directory, so the classes can be found
|
||||
$phpbb_root_path = dirname(__FILE__) . '/';
|
||||
|
||||
// Find acp module info files
|
||||
$this->acp_modules->module_class = 'acp';
|
||||
$acp_modules = $this->acp_modules->get_module_infos();
|
||||
$this->assertEquals(array(
|
||||
'phpbb_ext_foo_acp_a_module' => array(
|
||||
'filename' => 'phpbb_ext_foo_acp_a_module',
|
||||
'title' => 'Foobar',
|
||||
'version' => '3.1.0-dev',
|
||||
'modes' => array(
|
||||
'config' => array('title' => 'Config', 'auth' => '', 'cat' => array('ACP_MODS')),
|
||||
),
|
||||
),
|
||||
'acp_foobar' => array(
|
||||
'filename' => 'acp_foobar',
|
||||
'title' => 'ACP Foobar',
|
||||
'version' => '3.1.0-dev',
|
||||
'modes' => array(
|
||||
'test' => array('title' => 'Test', 'auth' => '', 'cat' => array('ACP_GENERAL')),
|
||||
),
|
||||
),
|
||||
), $acp_modules);
|
||||
|
||||
// Find mcp module info files
|
||||
$this->acp_modules->module_class = 'mcp';
|
||||
$acp_modules = $this->acp_modules->get_module_infos();
|
||||
$this->assertEquals(array(
|
||||
'phpbb_ext_foo_mcp_a_module' => array(
|
||||
'filename' => 'phpbb_ext_foo_mcp_a_module',
|
||||
'title' => 'Foobar',
|
||||
'version' => '3.1.0-dev',
|
||||
'modes' => array(
|
||||
'config' => array('title' => 'Config', 'auth' => '', 'cat' => array('MCP_MAIN')),
|
||||
),
|
||||
),
|
||||
), $acp_modules);
|
||||
|
||||
// Find a specific module info file (mcp_a_module)
|
||||
$this->acp_modules->module_class = 'mcp';
|
||||
$acp_modules = $this->acp_modules->get_module_infos('mcp_a_module');
|
||||
$this->assertEquals(array(
|
||||
'phpbb_ext_foo_mcp_a_module' => array(
|
||||
'filename' => 'phpbb_ext_foo_mcp_a_module',
|
||||
'title' => 'Foobar',
|
||||
'version' => '3.1.0-dev',
|
||||
'modes' => array(
|
||||
'config' => array('title' => 'Config', 'auth' => '', 'cat' => array('MCP_MAIN')),
|
||||
),
|
||||
),
|
||||
), $acp_modules);
|
||||
|
||||
// Find a specific module info file (mcp_a_module) with passing the module_class
|
||||
$this->acp_modules->module_class = '';
|
||||
$acp_modules = $this->acp_modules->get_module_infos('mcp_a_module', 'mcp');
|
||||
$this->assertEquals(array(
|
||||
'phpbb_ext_foo_mcp_a_module' => array(
|
||||
'filename' => 'phpbb_ext_foo_mcp_a_module',
|
||||
'title' => 'Foobar',
|
||||
'version' => '3.1.0-dev',
|
||||
'modes' => array(
|
||||
'config' => array('title' => 'Config', 'auth' => '', 'cat' => array('MCP_MAIN')),
|
||||
),
|
||||
),
|
||||
), $acp_modules);
|
||||
|
||||
// The mcp module info file we're looking for shouldn't exist
|
||||
$this->acp_modules->module_class = 'mcp';
|
||||
$acp_modules = $this->acp_modules->get_module_infos('mcp_a_fail');
|
||||
$this->assertEquals(array(), $acp_modules);
|
||||
|
||||
// As there are no ucp modules we shouldn't find any
|
||||
$this->acp_modules->module_class = 'ucp';
|
||||
$acp_modules = $this->acp_modules->get_module_infos();
|
||||
$this->assertEquals(array(), $acp_modules);
|
||||
|
||||
// Get module info of specified extension module
|
||||
$this->acp_modules->module_class = 'acp';
|
||||
$acp_modules = $this->acp_modules->get_module_infos('phpbb_ext_foo_acp_a_module');
|
||||
$this->assertEquals(array(
|
||||
'phpbb_ext_foo_acp_a_module' => array (
|
||||
'filename' => 'phpbb_ext_foo_acp_a_module',
|
||||
'title' => 'Foobar',
|
||||
'version' => '3.1.0-dev',
|
||||
'modes' => array (
|
||||
'config' => array ('title' => 'Config', 'auth' => '', 'cat' => array ('ACP_MODS')),
|
||||
),
|
||||
),
|
||||
), $acp_modules);
|
||||
|
||||
// No specific module and module class set to an incorrect name
|
||||
$acp_modules = $this->acp_modules->get_module_infos('', 'wcp', true);
|
||||
$this->assertEquals(array(), $acp_modules);
|
||||
|
||||
// No specific module, no module_class set in the function parameter, and an incorrect module class
|
||||
$this->acp_modules->module_class = 'wcp';
|
||||
$acp_modules = $this->acp_modules->get_module_infos();
|
||||
$this->assertEquals(array(), $acp_modules);
|
||||
|
||||
// No specific module, module class set to false (will default to the above acp)
|
||||
// Setting $use_all_available will cause get_module_infos() to also load not enabled extensions (barfoo)
|
||||
$this->acp_modules->module_class = 'acp';
|
||||
$acp_modules = $this->acp_modules->get_module_infos('', false, true);
|
||||
$this->assertEquals(array(
|
||||
'phpbb_ext_foo_acp_a_module' => array(
|
||||
'filename' => 'phpbb_ext_foo_acp_a_module',
|
||||
'title' => 'Foobar',
|
||||
'version' => '3.1.0-dev',
|
||||
'modes' => array(
|
||||
'config' => array('title' => 'Config', 'auth' => '', 'cat' => array('ACP_MODS')),
|
||||
),
|
||||
),
|
||||
'acp_foobar' => array(
|
||||
'filename' => 'acp_foobar',
|
||||
'title' => 'ACP Foobar',
|
||||
'version' => '3.1.0-dev',
|
||||
'modes' => array(
|
||||
'test' => array('title' => 'Test', 'auth' => '', 'cat' => array('ACP_GENERAL')),
|
||||
),
|
||||
),
|
||||
'phpbb_ext_barfoo_acp_a_module' => array(
|
||||
'filename' => 'phpbb_ext_barfoo_acp_a_module',
|
||||
'title' => 'Barfoo',
|
||||
'version' => '3.1.0-dev',
|
||||
'modes' => array(
|
||||
'config' => array('title' => 'Config', 'auth' => '', 'cat' => array('ACP_MODS')),
|
||||
),
|
||||
)
|
||||
), $acp_modules);
|
||||
|
||||
// Specific module set to disabled extension
|
||||
$acp_modules = $this->acp_modules->get_module_infos('phpbb_ext_barfoo_acp_a_module', 'acp', true);
|
||||
$this->assertEquals(array(
|
||||
'phpbb_ext_barfoo_acp_a_module' => array(
|
||||
'filename' => 'phpbb_ext_barfoo_acp_a_module',
|
||||
'title' => 'Barfoo',
|
||||
'version' => '3.1.0-dev',
|
||||
'modes' => array(
|
||||
'config' => array('title' => 'Config', 'auth' => '', 'cat' => array('ACP_MODS')),
|
||||
),
|
||||
)
|
||||
), $acp_modules);
|
||||
}
|
||||
}
|
120
tests/functional/acp_groups_test.php
Normal file
120
tests/functional/acp_groups_test.php
Normal file
@@ -0,0 +1,120 @@
|
||||
<?php
|
||||
/**
|
||||
*
|
||||
* @package testing
|
||||
* @copyright (c) 2013 phpBB Group
|
||||
* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
|
||||
*
|
||||
*/
|
||||
|
||||
require_once dirname(__FILE__) . '/common_groups_test.php';
|
||||
|
||||
/**
|
||||
* @group functional
|
||||
*/
|
||||
class phpbb_functional_acp_groups_test extends phpbb_functional_common_groups_test
|
||||
{
|
||||
protected $form_data;
|
||||
|
||||
protected function get_url()
|
||||
{
|
||||
return 'adm/index.php?i=groups&mode=manage&action=edit';
|
||||
}
|
||||
|
||||
public function acp_group_test_data()
|
||||
{
|
||||
return array(
|
||||
'both_yes' => array(
|
||||
5,
|
||||
true,
|
||||
true,
|
||||
),
|
||||
'legend_no_teampage' => array(
|
||||
5,
|
||||
true,
|
||||
false,
|
||||
),
|
||||
'no_legend_teampage' => array(
|
||||
5,
|
||||
false,
|
||||
true,
|
||||
),
|
||||
'both_no' => array(
|
||||
5,
|
||||
false,
|
||||
false,
|
||||
),
|
||||
'no_change' => array(
|
||||
5,
|
||||
NULL,
|
||||
NULL,
|
||||
),
|
||||
'back_to_default' => array(
|
||||
5,
|
||||
true,
|
||||
true,
|
||||
),
|
||||
// Remove and add moderators back in order to reset
|
||||
// group order to default one
|
||||
'mods_both_no' => array(
|
||||
4,
|
||||
false,
|
||||
false,
|
||||
),
|
||||
'mods_back_to_default' => array(
|
||||
4,
|
||||
true,
|
||||
true,
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider acp_group_test_data
|
||||
*/
|
||||
public function test_acp_groups_teampage($group_id, $tick_legend, $tick_teampage)
|
||||
{
|
||||
$this->group_manage_login();
|
||||
|
||||
// Manage Administrators group
|
||||
$form = $this->get_group_manage_form($group_id);
|
||||
$this->form_data[0] = $form->getValues();
|
||||
|
||||
if (isset($tick_legend) && isset($tick_teampage))
|
||||
{
|
||||
if ($tick_legend)
|
||||
{
|
||||
$form['group_legend']->tick();
|
||||
}
|
||||
else
|
||||
{
|
||||
$form['group_legend']->untick();
|
||||
}
|
||||
|
||||
if ($tick_teampage)
|
||||
{
|
||||
$form['group_teampage']->tick();
|
||||
}
|
||||
else
|
||||
{
|
||||
$form['group_teampage']->untick();
|
||||
}
|
||||
}
|
||||
$crawler = self::submit($form);
|
||||
$this->assertContains($this->lang('GROUP_UPDATED'), $crawler->text());
|
||||
|
||||
$form = $this->get_group_manage_form($group_id);
|
||||
if (!isset($tick_legend) && !isset($tick_teampage))
|
||||
{
|
||||
$this->form_data[1] = $form->getValues();
|
||||
unset($this->form_data[0]['creation_time'], $this->form_data[0]['form_token'], $this->form_data[1]['creation_time'], $this->form_data[1]['form_token']);
|
||||
$this->assertEquals($this->form_data[0], $this->form_data[1]);
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->form_data = $form->getValues();
|
||||
$this->assertEquals($tick_legend, $this->form_data['group_legend']);
|
||||
$this->assertEquals($tick_teampage, $this->form_data['group_teampage']);
|
||||
}
|
||||
}
|
||||
}
|
@@ -25,25 +25,22 @@ class phpbb_functional_acp_permissions_test extends phpbb_functional_test_case
|
||||
{
|
||||
// Permissions tab
|
||||
// XXX hardcoded id
|
||||
$crawler = $this->request('GET', 'adm/index.php?i=16&sid=' . $this->sid);
|
||||
$this->assert_response_success();
|
||||
$crawler = self::request('GET', 'adm/index.php?i=16&sid=' . $this->sid);
|
||||
// these language strings are html
|
||||
$this->assertContains($this->lang('ACP_PERMISSIONS_EXPLAIN'), $this->client->getResponse()->getContent());
|
||||
$this->assertContains($this->lang('ACP_PERMISSIONS_EXPLAIN'), $this->get_content());
|
||||
}
|
||||
|
||||
public function test_select_user()
|
||||
{
|
||||
// User permissions
|
||||
$crawler = $this->request('GET', 'adm/index.php?i=acp_permissions&icat=16&mode=setting_user_global&sid=' . $this->sid);
|
||||
$this->assert_response_success();
|
||||
$this->assertContains($this->lang('ACP_USERS_PERMISSIONS_EXPLAIN'), $this->client->getResponse()->getContent());
|
||||
$crawler = self::request('GET', 'adm/index.php?i=acp_permissions&icat=16&mode=setting_user_global&sid=' . $this->sid);
|
||||
$this->assertContains($this->lang('ACP_USERS_PERMISSIONS_EXPLAIN'), $this->get_content());
|
||||
|
||||
// Select admin
|
||||
$form = $crawler->selectButton($this->lang('SUBMIT'))->form();
|
||||
$data = array('username[0]' => 'admin');
|
||||
$form->setValues($data);
|
||||
$crawler = $this->client->submit($form);
|
||||
$this->assert_response_success();
|
||||
$crawler = self::submit($form);
|
||||
$this->assertContains($this->lang('ACL_SET'), $crawler->filter('h1')->eq(1)->text());
|
||||
}
|
||||
|
||||
@@ -91,8 +88,7 @@ class phpbb_functional_acp_permissions_test extends phpbb_functional_test_case
|
||||
public function test_change_permission($description, $permission_type, $permission, $mode, $object_name, $object_id)
|
||||
{
|
||||
// Get the form
|
||||
$crawler = $this->request('GET', "adm/index.php?i=acp_permissions&icat=16&mode=$mode&${object_name}[0]=$object_id&type=$permission_type&sid=" . $this->sid);
|
||||
$this->assert_response_success();
|
||||
$crawler = self::request('GET', "adm/index.php?i=acp_permissions&icat=16&mode=$mode&${object_name}[0]=$object_id&type=$permission_type&sid=" . $this->sid);
|
||||
$this->assertContains($this->lang('ACL_SET'), $crawler->filter('h1')->eq(1)->text());
|
||||
|
||||
// XXX globals for phpbb_auth, refactor it later
|
||||
@@ -114,8 +110,7 @@ class phpbb_functional_acp_permissions_test extends phpbb_functional_test_case
|
||||
// set to never
|
||||
$data = array("setting[$object_id][0][$permission]" => '0');
|
||||
$form->setValues($data);
|
||||
$crawler = $this->client->submit($form);
|
||||
$this->assert_response_success();
|
||||
$crawler = self::submit($form);
|
||||
$this->assertContains($this->lang('AUTH_UPDATED'), $crawler->text());
|
||||
|
||||
// check acl again
|
||||
|
@@ -17,8 +17,7 @@ class phpbb_functional_auth_test extends phpbb_functional_test_case
|
||||
$this->login();
|
||||
|
||||
// check for logout link
|
||||
$crawler = $this->request('GET', 'index.php');
|
||||
$this->assert_response_success();
|
||||
$crawler = self::request('GET', 'index.php');
|
||||
$this->assertContains($this->lang('LOGOUT_USER', 'admin'), $crawler->filter('.navbar')->text());
|
||||
}
|
||||
|
||||
@@ -26,8 +25,7 @@ class phpbb_functional_auth_test extends phpbb_functional_test_case
|
||||
{
|
||||
$this->create_user('anothertestuser');
|
||||
$this->login('anothertestuser');
|
||||
$crawler = $this->request('GET', 'index.php');
|
||||
$this->assert_response_success();
|
||||
$crawler = self::request('GET', 'index.php');
|
||||
$this->assertContains('anothertestuser', $crawler->filter('.icon-logout')->text());
|
||||
}
|
||||
|
||||
@@ -40,13 +38,11 @@ class phpbb_functional_auth_test extends phpbb_functional_test_case
|
||||
$this->add_lang('ucp');
|
||||
|
||||
// logout
|
||||
$crawler = $this->request('GET', 'ucp.php?sid=' . $this->sid . '&mode=logout');
|
||||
$this->assert_response_success();
|
||||
$crawler = self::request('GET', 'ucp.php?sid=' . $this->sid . '&mode=logout');
|
||||
$this->assertContains($this->lang('LOGOUT_REDIRECT'), $crawler->filter('#message')->text());
|
||||
|
||||
// look for a register link, which should be visible only when logged out
|
||||
$crawler = $this->request('GET', 'index.php');
|
||||
$this->assert_response_success();
|
||||
$crawler = self::request('GET', 'index.php');
|
||||
$this->assertContains($this->lang('REGISTER'), $crawler->filter('.navbar')->text());
|
||||
}
|
||||
|
||||
@@ -56,8 +52,7 @@ class phpbb_functional_auth_test extends phpbb_functional_test_case
|
||||
$this->admin_login();
|
||||
|
||||
// check that we are logged in
|
||||
$crawler = $this->request('GET', 'adm/index.php?sid=' . $this->sid);
|
||||
$this->assert_response_success();
|
||||
$crawler = self::request('GET', 'adm/index.php?sid=' . $this->sid);
|
||||
$this->assertContains($this->lang('ADMIN_PANEL'), $crawler->filter('h1')->text());
|
||||
}
|
||||
}
|
||||
|
@@ -14,22 +14,19 @@ class phpbb_functional_browse_test extends phpbb_functional_test_case
|
||||
{
|
||||
public function test_index()
|
||||
{
|
||||
$crawler = $this->request('GET', 'index.php');
|
||||
$this->assert_response_success();
|
||||
$crawler = self::request('GET', 'index.php');
|
||||
$this->assertGreaterThan(0, $crawler->filter('.topiclist')->count());
|
||||
}
|
||||
|
||||
public function test_viewforum()
|
||||
{
|
||||
$crawler = $this->request('GET', 'viewforum.php?f=2');
|
||||
$this->assert_response_success();
|
||||
$crawler = self::request('GET', 'viewforum.php?f=2');
|
||||
$this->assertGreaterThan(0, $crawler->filter('.topiclist')->count());
|
||||
}
|
||||
|
||||
public function test_viewtopic()
|
||||
{
|
||||
$crawler = $this->request('GET', 'viewtopic.php?t=1');
|
||||
$this->assert_response_success();
|
||||
$crawler = self::request('GET', 'viewtopic.php?t=1');
|
||||
$this->assertGreaterThan(0, $crawler->filter('.postbody')->count());
|
||||
}
|
||||
}
|
||||
|
63
tests/functional/common_groups_test.php
Normal file
63
tests/functional/common_groups_test.php
Normal file
@@ -0,0 +1,63 @@
|
||||
<?php
|
||||
/**
|
||||
*
|
||||
* @package testing
|
||||
* @copyright (c) 2013 phpBB Group
|
||||
* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
|
||||
*
|
||||
*/
|
||||
|
||||
/**
|
||||
* @group functional
|
||||
*/
|
||||
abstract class phpbb_functional_common_groups_test extends phpbb_functional_test_case
|
||||
{
|
||||
abstract protected function get_url();
|
||||
|
||||
/**
|
||||
* Get group_manage form
|
||||
* @param int $group_id ID of the group that should be managed
|
||||
*/
|
||||
protected function get_group_manage_form($group_id = 5)
|
||||
{
|
||||
// Manage Administrators group
|
||||
$crawler = self::request('GET', $this->get_url() . "&g=$group_id&sid=" . $this->sid);
|
||||
$form = $crawler->selectButton($this->lang('SUBMIT'))->form();
|
||||
return $form;
|
||||
}
|
||||
|
||||
/**
|
||||
* Execute login calls and add_lang() calls for tests
|
||||
*/
|
||||
protected function group_manage_login()
|
||||
{
|
||||
$this->login();
|
||||
$this->admin_login();
|
||||
$this->add_lang(array('ucp', 'acp/groups'));
|
||||
}
|
||||
|
||||
public function groups_manage_test_data()
|
||||
{
|
||||
return array(
|
||||
array('', 'GROUP_UPDATED'),
|
||||
array('aa0000', 'GROUP_UPDATED'),
|
||||
|
||||
array('AAG000','WRONG_DATA_COLOUR'),
|
||||
array('#AA0000', 'WRONG_DATA_COLOUR'),
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider groups_manage_test_data
|
||||
*/
|
||||
public function test_groups_manage($input, $expected)
|
||||
{
|
||||
$this->group_manage_login();
|
||||
|
||||
// Manage Administrators group
|
||||
$form = $this->get_group_manage_form();
|
||||
$form['group_colour']->setValue($input);
|
||||
$crawler = self::submit($form);
|
||||
$this->assertContains($this->lang($expected), $crawler->text());
|
||||
}
|
||||
}
|
@@ -12,34 +12,25 @@
|
||||
*/
|
||||
class phpbb_functional_extension_acp_test extends phpbb_functional_test_case
|
||||
{
|
||||
static private $copied_files = array();
|
||||
static private $helper;
|
||||
|
||||
/**
|
||||
* This should only be called once before the tests are run.
|
||||
* This is used to copy the extensions to the phpBB install
|
||||
*/
|
||||
static protected $fixtures = array(
|
||||
'./',
|
||||
);
|
||||
|
||||
static public function setUpBeforeClass()
|
||||
{
|
||||
global $phpbb_root_path;
|
||||
|
||||
parent::setUpBeforeClass();
|
||||
|
||||
self::$helper = new phpbb_test_case_helpers(self);
|
||||
self::$helper->copy_ext_fixtures(dirname(__FILE__) . '/../extension/ext/', self::$fixtures);
|
||||
}
|
||||
|
||||
self::$copied_files = array();
|
||||
static public function tearDownAfterClass()
|
||||
{
|
||||
parent::tearDownAfterClass();
|
||||
|
||||
if (file_exists($phpbb_root_path . 'ext/'))
|
||||
{
|
||||
// First, move any extensions setup on the board to a temp directory
|
||||
self::$copied_files = self::$helper->copy_dir($phpbb_root_path . 'ext/', $phpbb_root_path . 'store/temp_ext/');
|
||||
|
||||
// Then empty the ext/ directory on the board (for accurate test cases)
|
||||
self::$helper->empty_dir($phpbb_root_path . 'ext/');
|
||||
}
|
||||
|
||||
// Copy our ext/ files from the test case to the board
|
||||
self::$copied_files = array_merge(self::$copied_files, self::$helper->copy_dir(dirname(__FILE__) . '/../extension/ext/', $phpbb_root_path . 'ext/'));
|
||||
self::$helper->restore_original_ext_dir();
|
||||
}
|
||||
|
||||
public function setUp()
|
||||
@@ -84,35 +75,12 @@ class phpbb_functional_extension_acp_test extends phpbb_functional_test_case
|
||||
$this->add_lang('acp/extensions');
|
||||
}
|
||||
|
||||
/**
|
||||
* This should only be called once after the tests are run.
|
||||
* This is used to remove the files copied to the phpBB install
|
||||
*/
|
||||
static public function tearDownAfterClass()
|
||||
{
|
||||
global $phpbb_root_path;
|
||||
|
||||
if (file_exists($phpbb_root_path . 'store/temp_ext/'))
|
||||
{
|
||||
// Copy back the board installed extensions from the temp directory
|
||||
self::$helper->copy_dir($phpbb_root_path . 'store/temp_ext/', $phpbb_root_path . 'ext/');
|
||||
}
|
||||
|
||||
// Remove all of the files we copied around (from board ext -> temp_ext, from test ext -> board ext)
|
||||
self::$helper->remove_files(self::$copied_files);
|
||||
|
||||
if (file_exists($phpbb_root_path . 'store/temp_ext/'))
|
||||
{
|
||||
self::$helper->empty_dir($phpbb_root_path . 'store/temp_ext/');
|
||||
}
|
||||
}
|
||||
|
||||
public function test_list()
|
||||
{
|
||||
$crawler = $this->request('GET', 'adm/index.php?i=acp_extensions&mode=main&sid=' . $this->sid);
|
||||
$crawler = self::request('GET', 'adm/index.php?i=acp_extensions&mode=main&sid=' . $this->sid);
|
||||
|
||||
$this->assertCount(1, $crawler->filter('.ext_enabled'));
|
||||
$this->assertCount(4, $crawler->filter('.ext_disabled'));
|
||||
$this->assertCount(5, $crawler->filter('.ext_disabled'));
|
||||
|
||||
$this->assertContains('phpBB Foo Extension', $crawler->filter('.ext_enabled')->eq(0)->text());
|
||||
$this->assertContainsLang('PURGE', $crawler->filter('.ext_enabled')->eq(0)->text());
|
||||
@@ -131,7 +99,7 @@ class phpbb_functional_extension_acp_test extends phpbb_functional_test_case
|
||||
|
||||
public function test_details()
|
||||
{
|
||||
$crawler = $this->request('GET', 'adm/index.php?i=acp_extensions&mode=main&action=details&ext_name=foo&sid=' . $this->sid);
|
||||
$crawler = self::request('GET', 'adm/index.php?i=acp_extensions&mode=main&action=details&ext_name=foo&sid=' . $this->sid);
|
||||
|
||||
$validation = array(
|
||||
'DISPLAY_NAME' => 'phpBB Foo Extension',
|
||||
@@ -174,46 +142,46 @@ class phpbb_functional_extension_acp_test extends phpbb_functional_test_case
|
||||
public function test_enable_pre()
|
||||
{
|
||||
// Foo is already enabled (redirect to list)
|
||||
$crawler = $this->request('GET', 'adm/index.php?i=acp_extensions&mode=main&action=enable_pre&ext_name=foo&sid=' . $this->sid);
|
||||
$crawler = self::request('GET', 'adm/index.php?i=acp_extensions&mode=main&action=enable_pre&ext_name=foo&sid=' . $this->sid);
|
||||
$this->assertContainsLang('EXTENSION_NAME', $crawler->filter('html')->text());
|
||||
$this->assertContainsLang('EXTENSION_OPTIONS', $crawler->filter('html')->text());
|
||||
$this->assertContainsLang('EXTENSION_ACTIONS', $crawler->filter('html')->text());
|
||||
|
||||
$crawler = $this->request('GET', 'adm/index.php?i=acp_extensions&mode=main&action=enable_pre&ext_name=vendor%2Fmoo&sid=' . $this->sid);
|
||||
$crawler = self::request('GET', 'adm/index.php?i=acp_extensions&mode=main&action=enable_pre&ext_name=vendor%2Fmoo&sid=' . $this->sid);
|
||||
$this->assertContainsLang('ENABLE_CONFIRM', $crawler->filter('html')->text());
|
||||
}
|
||||
|
||||
public function test_disable_pre()
|
||||
{
|
||||
// Moo is not enabled (redirect to list)
|
||||
$crawler = $this->request('GET', 'adm/index.php?i=acp_extensions&mode=main&action=disable_pre&ext_name=vendor%2Fmoo&sid=' . $this->sid);
|
||||
$crawler = self::request('GET', 'adm/index.php?i=acp_extensions&mode=main&action=disable_pre&ext_name=vendor%2Fmoo&sid=' . $this->sid);
|
||||
$this->assertContainsLang('EXTENSION_NAME', $crawler->filter('html')->text());
|
||||
$this->assertContainsLang('EXTENSION_OPTIONS', $crawler->filter('html')->text());
|
||||
$this->assertContainsLang('EXTENSION_ACTIONS', $crawler->filter('html')->text());
|
||||
|
||||
$crawler = $this->request('GET', 'adm/index.php?i=acp_extensions&mode=main&action=disable_pre&ext_name=foo&sid=' . $this->sid);
|
||||
$crawler = self::request('GET', 'adm/index.php?i=acp_extensions&mode=main&action=disable_pre&ext_name=foo&sid=' . $this->sid);
|
||||
$this->assertContainsLang('DISABLE_CONFIRM', $crawler->filter('html')->text());
|
||||
}
|
||||
|
||||
public function test_purge_pre()
|
||||
{
|
||||
// test2 is not available (error)
|
||||
$crawler = $this->request('GET', 'adm/index.php?i=acp_extensions&mode=main&action=purge_pre&ext_name=test2&sid=' . $this->sid);
|
||||
$crawler = self::request('GET', 'adm/index.php?i=acp_extensions&mode=main&action=purge_pre&ext_name=test2&sid=' . $this->sid);
|
||||
$this->assertContains('The required file does not exist', $crawler->filter('html')->text());
|
||||
|
||||
$crawler = $this->request('GET', 'adm/index.php?i=acp_extensions&mode=main&action=purge_pre&ext_name=foo&sid=' . $this->sid);
|
||||
$crawler = self::request('GET', 'adm/index.php?i=acp_extensions&mode=main&action=purge_pre&ext_name=foo&sid=' . $this->sid);
|
||||
$this->assertContainsLang('PURGE_CONFIRM', $crawler->filter('html')->text());
|
||||
}
|
||||
|
||||
public function test_actions()
|
||||
{
|
||||
$crawler = $this->request('GET', 'adm/index.php?i=acp_extensions&mode=main&action=enable&ext_name=vendor%2Fmoo&sid=' . $this->sid);
|
||||
$crawler = self::request('GET', 'adm/index.php?i=acp_extensions&mode=main&action=enable&ext_name=vendor%2Fmoo&sid=' . $this->sid);
|
||||
$this->assertContainsLang('ENABLE_SUCCESS', $crawler->filter('html')->text());
|
||||
|
||||
$crawler = $this->request('GET', 'adm/index.php?i=acp_extensions&mode=main&action=disable&ext_name=vendor%2Fmoo&sid=' . $this->sid);
|
||||
$crawler = self::request('GET', 'adm/index.php?i=acp_extensions&mode=main&action=disable&ext_name=vendor%2Fmoo&sid=' . $this->sid);
|
||||
$this->assertContainsLang('DISABLE_SUCCESS', $crawler->filter('html')->text());
|
||||
|
||||
$crawler = $this->request('GET', 'adm/index.php?i=acp_extensions&mode=main&action=purge&ext_name=vendor%2Fmoo&sid=' . $this->sid);
|
||||
$crawler = self::request('GET', 'adm/index.php?i=acp_extensions&mode=main&action=purge&ext_name=vendor%2Fmoo&sid=' . $this->sid);
|
||||
$this->assertContainsLang('PURGE_SUCCESS', $crawler->filter('html')->text());
|
||||
}
|
||||
}
|
@@ -6,6 +6,7 @@
|
||||
* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
|
||||
*
|
||||
*/
|
||||
require_once dirname(__FILE__) . '/../../phpBB/includes/db/db_tools.php';
|
||||
|
||||
/**
|
||||
* @group functional
|
||||
@@ -14,65 +15,27 @@ class phpbb_functional_extension_controller_test extends phpbb_functional_test_c
|
||||
{
|
||||
protected $phpbb_extension_manager;
|
||||
|
||||
static private $helper;
|
||||
|
||||
static protected $fixtures = array(
|
||||
'foo/bar/config/routing.yml',
|
||||
'foo/bar/config/services.yml',
|
||||
'foo/bar/controller/controller.php',
|
||||
'foo/bar/styles/prosilver/template/foo_bar_body.html',
|
||||
'foo/bar/config/',
|
||||
'foo/bar/controller/',
|
||||
'foo/bar/styles/prosilver/template/',
|
||||
);
|
||||
|
||||
/**
|
||||
* This should only be called once before the tests are run.
|
||||
* This is used to copy the fixtures to the phpBB install
|
||||
*/
|
||||
static public function setUpBeforeClass()
|
||||
{
|
||||
global $phpbb_root_path;
|
||||
parent::setUpBeforeClass();
|
||||
|
||||
$directories = array(
|
||||
$phpbb_root_path . 'ext/foo/bar/',
|
||||
$phpbb_root_path . 'ext/foo/bar/config/',
|
||||
$phpbb_root_path . 'ext/foo/bar/controller/',
|
||||
$phpbb_root_path . 'ext/foo/bar/styles/prosilver/template',
|
||||
);
|
||||
|
||||
foreach ($directories as $dir)
|
||||
{
|
||||
if (!is_dir($dir))
|
||||
{
|
||||
mkdir($dir, 0777, true);
|
||||
}
|
||||
}
|
||||
|
||||
foreach (self::$fixtures as $fixture)
|
||||
{
|
||||
copy(
|
||||
"tests/functional/fixtures/ext/$fixture",
|
||||
"{$phpbb_root_path}ext/$fixture");
|
||||
}
|
||||
self::$helper = new phpbb_test_case_helpers(self);
|
||||
self::$helper->copy_ext_fixtures(dirname(__FILE__) . '/fixtures/ext/', self::$fixtures);
|
||||
}
|
||||
|
||||
/**
|
||||
* This should only be called once after the tests are run.
|
||||
* This is used to remove the fixtures from the phpBB install
|
||||
*/
|
||||
static public function tearDownAfterClass()
|
||||
{
|
||||
global $phpbb_root_path;
|
||||
parent::tearDownAfterClass();
|
||||
|
||||
foreach (self::$fixtures as $fixture)
|
||||
{
|
||||
unlink("{$phpbb_root_path}ext/$fixture");
|
||||
}
|
||||
|
||||
rmdir("{$phpbb_root_path}ext/foo/bar/config");
|
||||
rmdir("{$phpbb_root_path}ext/foo/bar/controller");
|
||||
rmdir("{$phpbb_root_path}ext/foo/bar/styles/prosilver/template");
|
||||
rmdir("{$phpbb_root_path}ext/foo/bar/styles/prosilver");
|
||||
rmdir("{$phpbb_root_path}ext/foo/bar/styles");
|
||||
rmdir("{$phpbb_root_path}ext/foo/bar");
|
||||
rmdir("{$phpbb_root_path}ext/foo");
|
||||
self::$helper->restore_original_ext_dir();
|
||||
}
|
||||
|
||||
public function setUp()
|
||||
@@ -90,8 +53,8 @@ class phpbb_functional_extension_controller_test extends phpbb_functional_test_c
|
||||
public function test_foo_bar()
|
||||
{
|
||||
$this->phpbb_extension_manager->enable('foo/bar');
|
||||
$crawler = $this->request('GET', 'app.php?controller=foo/bar');
|
||||
$this->assert_response_success();
|
||||
$crawler = self::request('GET', 'app.php?controller=foo/bar', array(), false);
|
||||
self::assert_response_status_code();
|
||||
$this->assertContains("foo/bar controller handle() method", $crawler->filter('body')->text());
|
||||
$this->phpbb_extension_manager->purge('foo/bar');
|
||||
}
|
||||
@@ -102,8 +65,7 @@ class phpbb_functional_extension_controller_test extends phpbb_functional_test_c
|
||||
public function test_controller_with_template()
|
||||
{
|
||||
$this->phpbb_extension_manager->enable('foo/bar');
|
||||
$crawler = $this->request('GET', 'app.php?controller=foo/template');
|
||||
$this->assert_response_success();
|
||||
$crawler = self::request('GET', 'app.php?controller=foo/template');
|
||||
$this->assertContains("I am a variable", $crawler->filter('#content')->text());
|
||||
$this->phpbb_extension_manager->purge('foo/bar');
|
||||
}
|
||||
@@ -115,8 +77,8 @@ class phpbb_functional_extension_controller_test extends phpbb_functional_test_c
|
||||
public function test_missing_argument()
|
||||
{
|
||||
$this->phpbb_extension_manager->enable('foo/bar');
|
||||
$crawler = $this->request('GET', 'app.php?controller=foo/baz');
|
||||
$this->assertEquals(500, $this->client->getResponse()->getStatus());
|
||||
$crawler = self::request('GET', 'app.php?controller=foo/baz', array(), false);
|
||||
$this->assert_response_html(500);
|
||||
$this->assertContains('Missing value for argument #1: test in class phpbb_ext_foo_bar_controller:baz', $crawler->filter('body')->text());
|
||||
$this->phpbb_extension_manager->purge('foo/bar');
|
||||
}
|
||||
@@ -127,8 +89,8 @@ class phpbb_functional_extension_controller_test extends phpbb_functional_test_c
|
||||
public function test_exception_should_result_in_500_status_code()
|
||||
{
|
||||
$this->phpbb_extension_manager->enable('foo/bar');
|
||||
$crawler = $this->request('GET', 'app.php?controller=foo/exception');
|
||||
$this->assertEquals(500, $this->client->getResponse()->getStatus());
|
||||
$crawler = self::request('GET', 'app.php?controller=foo/exception', array(), false);
|
||||
$this->assert_response_html(500);
|
||||
$this->assertContains('Exception thrown from foo/exception route', $crawler->filter('body')->text());
|
||||
$this->phpbb_extension_manager->purge('foo/bar');
|
||||
}
|
||||
@@ -144,8 +106,8 @@ class phpbb_functional_extension_controller_test extends phpbb_functional_test_c
|
||||
*/
|
||||
public function test_error_ext_disabled_or_404()
|
||||
{
|
||||
$crawler = $this->request('GET', 'app.php?controller=does/not/exist');
|
||||
$this->assertEquals(404, $this->client->getResponse()->getStatus());
|
||||
$crawler = self::request('GET', 'app.php?controller=does/not/exist', array(), false);
|
||||
$this->assert_response_html(404);
|
||||
$this->assertContains('No route found for "GET /does/not/exist"', $crawler->filter('body')->text());
|
||||
}
|
||||
}
|
||||
|
99
tests/functional/extension_module_test.php
Normal file
99
tests/functional/extension_module_test.php
Normal file
@@ -0,0 +1,99 @@
|
||||
<?php
|
||||
/**
|
||||
*
|
||||
* @package testing
|
||||
* @copyright (c) 2013 phpBB Group
|
||||
* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
|
||||
*
|
||||
*/
|
||||
|
||||
require_once dirname(__FILE__) . '/../../phpBB/includes/db/db_tools.php';
|
||||
require_once dirname(__FILE__) . '/../../phpBB/includes/acp/acp_modules.php';
|
||||
|
||||
/**
|
||||
* @group functional
|
||||
*/
|
||||
class phpbb_functional_extension_module_test extends phpbb_functional_test_case
|
||||
{
|
||||
protected $phpbb_extension_manager;
|
||||
|
||||
static private $helper;
|
||||
|
||||
static protected $fixtures = array(
|
||||
'./',
|
||||
);
|
||||
|
||||
static public function setUpBeforeClass()
|
||||
{
|
||||
parent::setUpBeforeClass();
|
||||
|
||||
self::$helper = new phpbb_test_case_helpers(self);
|
||||
self::$helper->copy_ext_fixtures(dirname(__FILE__) . '/fixtures/ext/', self::$fixtures);
|
||||
}
|
||||
|
||||
static public function tearDownAfterClass()
|
||||
{
|
||||
parent::tearDownAfterClass();
|
||||
|
||||
self::$helper->restore_original_ext_dir();
|
||||
}
|
||||
|
||||
public function setUp()
|
||||
{
|
||||
global $db;
|
||||
|
||||
parent::setUp();
|
||||
|
||||
$this->phpbb_extension_manager = $this->get_extension_manager();
|
||||
$this->phpbb_extension_manager->enable('foo/bar');
|
||||
|
||||
$modules = new acp_modules();
|
||||
$db = $this->get_db();
|
||||
|
||||
$sql = 'SELECT module_id
|
||||
FROM ' . MODULES_TABLE . "
|
||||
WHERE module_langname = 'acp'
|
||||
AND module_class = 'ACP_CAT_DOT_MODS'";
|
||||
$result = $db->sql_query($sql);
|
||||
$module_id = (int) $db->sql_fetchfield('module_id');
|
||||
$db->sql_freeresult($result);
|
||||
|
||||
$parent_data = array(
|
||||
'module_basename' => '',
|
||||
'module_enabled' => 1,
|
||||
'module_display' => 1,
|
||||
'parent_id' => $module_id,
|
||||
'module_class' => 'acp',
|
||||
'module_langname' => 'ACP_FOOBAR_TITLE',
|
||||
'module_mode' => '',
|
||||
'module_auth' => '',
|
||||
);
|
||||
$modules->update_module_data($parent_data, true);
|
||||
|
||||
$module_data = array(
|
||||
'module_basename' => 'phpbb_ext_foo_bar_acp_main_module',
|
||||
'module_enabled' => 1,
|
||||
'module_display' => 1,
|
||||
'parent_id' => $parent_data['module_id'],
|
||||
'module_class' => 'acp',
|
||||
'module_langname' => 'ACP_FOOBAR_TITLE',
|
||||
'module_mode' => 'mode',
|
||||
'module_auth' => '',
|
||||
);
|
||||
$modules->update_module_data($module_data, true);
|
||||
|
||||
$this->purge_cache();
|
||||
}
|
||||
|
||||
/**
|
||||
* Check a controller for extension foo/bar.
|
||||
*/
|
||||
public function test_foo_bar()
|
||||
{
|
||||
$this->login();
|
||||
$this->admin_login();
|
||||
$crawler = self::request('GET', 'adm/index.php?i=phpbb_ext_foo_bar_acp_main_module&mode=mode&sid=' . $this->sid);
|
||||
$this->assertContains("Bertie rulez!", $crawler->filter('#main')->text());
|
||||
$this->phpbb_extension_manager->purge('foo/bar');
|
||||
}
|
||||
}
|
80
tests/functional/extension_permission_lang_test.php
Normal file
80
tests/functional/extension_permission_lang_test.php
Normal file
@@ -0,0 +1,80 @@
|
||||
<?php
|
||||
/**
|
||||
*
|
||||
* @package testing
|
||||
* @copyright (c) 2012 phpBB Group
|
||||
* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
|
||||
*
|
||||
*/
|
||||
|
||||
/**
|
||||
* @group functional
|
||||
*/
|
||||
class phpbb_functional_extension_permission_lang_test extends phpbb_functional_test_case
|
||||
{
|
||||
protected $phpbb_extension_manager;
|
||||
|
||||
static private $helper;
|
||||
|
||||
static protected $fixtures = array(
|
||||
'foo/bar/language/en/',
|
||||
);
|
||||
|
||||
static public function setUpBeforeClass()
|
||||
{
|
||||
parent::setUpBeforeClass();
|
||||
|
||||
self::$helper = new phpbb_test_case_helpers(self);
|
||||
self::$helper->copy_ext_fixtures(dirname(__FILE__) . '/fixtures/ext/', self::$fixtures);
|
||||
}
|
||||
|
||||
static public function tearDownAfterClass()
|
||||
{
|
||||
parent::tearDownAfterClass();
|
||||
|
||||
self::$helper->restore_original_ext_dir();
|
||||
}
|
||||
|
||||
public function setUp()
|
||||
{
|
||||
parent::setUp();
|
||||
|
||||
$this->get_db();
|
||||
|
||||
$acl_ary = array(
|
||||
'auth_option' => 'u_foo',
|
||||
'is_global' => 1,
|
||||
);
|
||||
|
||||
$sql = 'INSERT INTO phpbb_acl_options ' . $this->db->sql_build_array('INSERT', $acl_ary);
|
||||
$this->db->sql_query($sql);
|
||||
|
||||
$this->phpbb_extension_manager = $this->get_extension_manager();
|
||||
|
||||
$this->purge_cache();
|
||||
|
||||
$this->login();
|
||||
$this->admin_login();
|
||||
$this->add_lang('acp/permissions');
|
||||
}
|
||||
|
||||
public function test_auto_include_permission_lang_from_extensions()
|
||||
{
|
||||
$this->phpbb_extension_manager->enable('foo/bar');
|
||||
|
||||
// User permissions
|
||||
$crawler = self::request('GET', 'adm/index.php?i=acp_permissions&icat=16&mode=setting_user_global&sid=' . $this->sid);
|
||||
|
||||
// Select admin
|
||||
$form = $crawler->selectButton($this->lang('SUBMIT'))->form();
|
||||
$data = array('username[0]' => 'admin');
|
||||
$form->setValues($data);
|
||||
$crawler = self::submit($form);
|
||||
|
||||
// language from language/en/acp/permissions_phpbb.php
|
||||
$this->assertContains('Can attach files', $crawler->filter('body')->text());
|
||||
|
||||
// language from ext/foo/bar/language/en/permissions_foo.php
|
||||
$this->assertContains('Can view foo', $crawler->filter('body')->text());
|
||||
}
|
||||
}
|
@@ -32,7 +32,7 @@ class phpbb_functional_fileupload_form_test extends phpbb_functional_test_case
|
||||
'error' => UPLOAD_ERR_OK,
|
||||
);
|
||||
|
||||
$crawler = $this->client->request(
|
||||
$crawler = self::$client->request(
|
||||
'POST',
|
||||
'posting.php?mode=reply&f=2&t=1&sid=' . $this->sid,
|
||||
array('add_file' => $this->lang('ADD_FILE')),
|
||||
@@ -66,9 +66,8 @@ class phpbb_functional_fileupload_form_test extends phpbb_functional_test_case
|
||||
{
|
||||
$this->markTestIncomplete('Test fails intermittently.');
|
||||
$crawler = $this->upload_file('valid.jpg', 'image/jpeg');
|
||||
$this->assert_response_success();
|
||||
// ensure there was no error message rendered
|
||||
$this->assertNotContains('<h2>' . $this->lang('INFORMATION') . '</h2>', $this->client->getResponse()->getContent());
|
||||
$this->assertNotContains('<h2>' . $this->lang('INFORMATION') . '</h2>', $this->get_content());
|
||||
$this->assertContains($this->lang('POSTED_ATTACHMENTS'), $crawler->filter('#postform h3')->eq(1)->text());
|
||||
}
|
||||
}
|
||||
|
@@ -58,7 +58,7 @@ class phpbb_functional_fileupload_remote_test extends phpbb_functional_test_case
|
||||
public function test_successful_upload()
|
||||
{
|
||||
$upload = new fileupload('', array('gif'), 1000);
|
||||
$file = $upload->remote_upload($this->root_url . 'styles/prosilver/theme/images/forum_read.gif');
|
||||
$file = $upload->remote_upload(self::$root_url . 'styles/prosilver/theme/images/forum_read.gif');
|
||||
$this->assertEquals(0, sizeof($file->error));
|
||||
$this->assertTrue(file_exists($file->filename));
|
||||
}
|
||||
@@ -66,7 +66,8 @@ class phpbb_functional_fileupload_remote_test extends phpbb_functional_test_case
|
||||
public function test_too_large()
|
||||
{
|
||||
$upload = new fileupload('', array('gif'), 100);
|
||||
$file = $upload->remote_upload($this->root_url . 'styles/prosilver/theme/images/forum_read.gif');
|
||||
$file = $upload->remote_upload(self::$root_url . 'styles/prosilver/theme/images/forum_read.gif');
|
||||
$this->assertEquals(1, sizeof($file->error));
|
||||
$this->assertEquals('WRONG_FILESIZE', $file->error[0]);
|
||||
}
|
||||
}
|
||||
|
32
tests/functional/fixtures/ext/foo/bar/acp/main_info.php
Normal file
32
tests/functional/fixtures/ext/foo/bar/acp/main_info.php
Normal file
@@ -0,0 +1,32 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
*
|
||||
* @package testing
|
||||
* @copyright (c) 2013 phpBB Group
|
||||
* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
|
||||
*
|
||||
*/
|
||||
|
||||
/**
|
||||
* @ignore
|
||||
*/
|
||||
if (!defined('IN_PHPBB'))
|
||||
{
|
||||
exit;
|
||||
}
|
||||
|
||||
class phpbb_ext_foo_bar_acp_main_info
|
||||
{
|
||||
function module()
|
||||
{
|
||||
return array(
|
||||
'filename' => 'phpbb_ext_foo_bar_acp_main_module',
|
||||
'title' => 'ACP_FOOBAR_TITLE',
|
||||
'version' => '1.0.0',
|
||||
'modes' => array(
|
||||
'mode' => array('title' => 'ACP_FOOBAR_MODE', 'auth' => '', 'cat' => array('ACP_FOOBAR_TITLE')),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
28
tests/functional/fixtures/ext/foo/bar/acp/main_module.php
Normal file
28
tests/functional/fixtures/ext/foo/bar/acp/main_module.php
Normal file
@@ -0,0 +1,28 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
*
|
||||
* @package testing
|
||||
* @copyright (c) 2013 phpBB Group
|
||||
* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
|
||||
*
|
||||
*/
|
||||
|
||||
/**
|
||||
* @ignore
|
||||
*/
|
||||
if (!defined('IN_PHPBB'))
|
||||
{
|
||||
exit;
|
||||
}
|
||||
|
||||
class phpbb_ext_foo_bar_acp_main_module
|
||||
{
|
||||
var $u_action;
|
||||
|
||||
function main($id, $mode)
|
||||
{
|
||||
$this->tpl_name = 'foobar';
|
||||
$this->page_title = 'Bertie';
|
||||
}
|
||||
}
|
@@ -0,0 +1,3 @@
|
||||
<!-- INCLUDE overall_header.html -->
|
||||
Bertie rulez!
|
||||
<!-- INCLUDE overall_footer.html -->
|
23
tests/functional/fixtures/ext/foo/bar/composer.json
Normal file
23
tests/functional/fixtures/ext/foo/bar/composer.json
Normal file
@@ -0,0 +1,23 @@
|
||||
{
|
||||
"name": "foo/bar",
|
||||
"type": "phpbb3-extension",
|
||||
"description": "Testing extensions",
|
||||
"homepage": "",
|
||||
"version": "1.0.0",
|
||||
"time": "2013-03-21 01:01:01",
|
||||
"licence": "GPL-2.0",
|
||||
"authors": [{
|
||||
"name": "Joas Schilling",
|
||||
"username": "nickvergessen",
|
||||
"email": "nickvergessen@phpbb.com",
|
||||
"homepage": "http://www.phpbb.com",
|
||||
"role": "Developer"
|
||||
}],
|
||||
"require": {
|
||||
"php": ">=5.3",
|
||||
"phpbb": ">=3.1.0-dev"
|
||||
},
|
||||
"extra": {
|
||||
"display-name": "phpBB 3.1 Extension Testing"
|
||||
}
|
||||
}
|
@@ -0,0 +1,6 @@
|
||||
<?php
|
||||
|
||||
// Admin Permissions
|
||||
$lang = array_merge($lang, array(
|
||||
'acl_u_foo' => array('lang' => 'Can view foo', 'cat' => 'misc'),
|
||||
));
|
44
tests/functional/forgot_password_test.php
Normal file
44
tests/functional/forgot_password_test.php
Normal file
@@ -0,0 +1,44 @@
|
||||
<?php
|
||||
/**
|
||||
*
|
||||
* @package testing
|
||||
* @copyright (c) 2012 phpBB Group
|
||||
* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
|
||||
*
|
||||
*/
|
||||
|
||||
/**
|
||||
* @group functional
|
||||
*/
|
||||
class phpbb_functional_forgot_password_test extends phpbb_functional_test_case
|
||||
{
|
||||
public function test_forgot_password_enabled()
|
||||
{
|
||||
global $config;
|
||||
$this->add_lang('ucp');
|
||||
$crawler = self::request('GET', 'ucp.php?mode=sendpassword');
|
||||
$this->assertEquals($this->lang('SEND_PASSWORD'), $crawler->filter('h2')->text());
|
||||
}
|
||||
|
||||
public function test_forgot_password_disabled()
|
||||
{
|
||||
$this->login();
|
||||
$this->admin_login();
|
||||
$this->add_lang('ucp');
|
||||
$crawler = self::request('GET', 'adm/index.php?sid=' . $this->sid . '&i=acp_board&mode=security');
|
||||
|
||||
$form = $crawler->selectButton('Submit')->form();
|
||||
$values = $form->getValues();
|
||||
|
||||
$values["config[allow_password_reset]"] = 0;
|
||||
$form->setValues($values);
|
||||
$crawler = self::submit($form);
|
||||
|
||||
$this->logout();
|
||||
|
||||
$crawler = self::request('GET', 'ucp.php?mode=sendpassword');
|
||||
$this->assertContains($this->lang('UCP_PASSWORD_RESET_DISABLED', '', ''), $crawler->text());
|
||||
|
||||
}
|
||||
|
||||
}
|
@@ -17,18 +17,15 @@ class phpbb_functional_memberlist_test extends phpbb_functional_test_case
|
||||
$this->create_user('memberlist-test-user');
|
||||
// logs in as admin
|
||||
$this->login();
|
||||
$crawler = $this->request('GET', 'memberlist.php?sid=' . $this->sid);
|
||||
$this->assert_response_success();
|
||||
$crawler = self::request('GET', 'memberlist.php?sid=' . $this->sid);
|
||||
$this->assertContains('memberlist-test-user', $crawler->text());
|
||||
|
||||
// restrict by first character
|
||||
$crawler = $this->request('GET', 'memberlist.php?first_char=m&sid=' . $this->sid);
|
||||
$this->assert_response_success();
|
||||
$crawler = self::request('GET', 'memberlist.php?first_char=m&sid=' . $this->sid);
|
||||
$this->assertContains('memberlist-test-user', $crawler->text());
|
||||
|
||||
// make sure results for wrong character are not returned
|
||||
$crawler = $this->request('GET', 'memberlist.php?first_char=a&sid=' . $this->sid);
|
||||
$this->assert_response_success();
|
||||
$crawler = self::request('GET', 'memberlist.php?first_char=a&sid=' . $this->sid);
|
||||
$this->assertNotContains('memberlist-test-user', $crawler->text());
|
||||
}
|
||||
|
||||
@@ -36,16 +33,13 @@ class phpbb_functional_memberlist_test extends phpbb_functional_test_case
|
||||
{
|
||||
$this->login();
|
||||
// XXX hardcoded user id
|
||||
$crawler = $this->request('GET', 'memberlist.php?mode=viewprofile&u=2&sid=' . $this->sid);
|
||||
$this->assert_response_success();
|
||||
$crawler = self::request('GET', 'memberlist.php?mode=viewprofile&u=2&sid=' . $this->sid);
|
||||
$this->assertContains('admin', $crawler->filter('h2')->text());
|
||||
}
|
||||
|
||||
protected function get_memberlist_leaders_table_crawler()
|
||||
{
|
||||
$crawler = $this->request('GET', 'memberlist.php?mode=leaders&sid=' . $this->sid);
|
||||
$this->assert_response_success();
|
||||
|
||||
$crawler = self::request('GET', 'memberlist.php?mode=leaders&sid=' . $this->sid);
|
||||
return $crawler->filter('.forumbg-table');
|
||||
}
|
||||
|
||||
@@ -95,5 +89,17 @@ class phpbb_functional_memberlist_test extends phpbb_functional_test_case
|
||||
$crawler = $this->get_memberlist_leaders_table_crawler();
|
||||
$this->assertNotContains('memberlist-test-moderator', $crawler->eq(0)->text());
|
||||
$this->assertContains('memberlist-test-moderator', $crawler->eq(1)->text());
|
||||
|
||||
// Add admin to moderators, should be visible as moderator
|
||||
$this->add_user_group('GLOBAL_MODERATORS', array('admin'), true);
|
||||
$crawler = $this->get_memberlist_leaders_table_crawler();
|
||||
$this->assertNotContains('admin', $crawler->eq(0)->text());
|
||||
$this->assertContains('admin', $crawler->eq(1)->text());
|
||||
|
||||
// Add admin to admins as leader, should be visible as admin, not moderator
|
||||
$this->add_user_group('ADMINISTRATORS', array('admin'), true, true);
|
||||
$crawler = $this->get_memberlist_leaders_table_crawler();
|
||||
$this->assertContains('admin', $crawler->eq(0)->text());
|
||||
$this->assertNotContains('admin', $crawler->eq(1)->text());
|
||||
}
|
||||
}
|
||||
|
85
tests/functional/metadata_manager_test.php
Normal file
85
tests/functional/metadata_manager_test.php
Normal file
@@ -0,0 +1,85 @@
|
||||
<?php
|
||||
/**
|
||||
*
|
||||
* @package testing
|
||||
* @copyright (c) 2013 phpBB Group
|
||||
* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
|
||||
*
|
||||
*/
|
||||
|
||||
require_once dirname(__FILE__) . '/../../phpBB/includes/db/db_tools.php';
|
||||
|
||||
/**
|
||||
* @group functional
|
||||
*/
|
||||
class phpbb_functional_metadata_manager_test extends phpbb_functional_test_case
|
||||
{
|
||||
protected $phpbb_extension_manager;
|
||||
|
||||
static private $helper;
|
||||
|
||||
static protected $fixtures = array(
|
||||
'foo/bar/',
|
||||
);
|
||||
|
||||
static public function setUpBeforeClass()
|
||||
{
|
||||
parent::setUpBeforeClass();
|
||||
|
||||
self::$helper = new phpbb_test_case_helpers(self);
|
||||
self::$helper->copy_ext_fixtures(dirname(__FILE__) . '/fixtures/ext/', self::$fixtures);
|
||||
}
|
||||
|
||||
static public function tearDownAfterClass()
|
||||
{
|
||||
parent::tearDownAfterClass();
|
||||
|
||||
self::$helper->restore_original_ext_dir();
|
||||
}
|
||||
|
||||
public function setUp()
|
||||
{
|
||||
parent::setUp();
|
||||
|
||||
$this->phpbb_extension_manager = $this->get_extension_manager();
|
||||
|
||||
$this->purge_cache();
|
||||
$this->phpbb_extension_manager->enable('foo/bar');
|
||||
|
||||
$this->login();
|
||||
$this->admin_login();
|
||||
$this->add_lang('acp/extensions');
|
||||
}
|
||||
|
||||
public function test_extensions_list()
|
||||
{
|
||||
$crawler = self::request('GET', 'adm/index.php?i=acp_extensions&mode=main&sid=' . $this->sid);
|
||||
$this->assertContains($this->lang('EXTENSIONS_EXPLAIN'), $crawler->filter('#main')->text());
|
||||
$this->assertContains('phpBB 3.1 Extension Testing', $crawler->filter('#main')->text());
|
||||
$this->assertContains('Details', $crawler->filter('#main')->text());
|
||||
}
|
||||
|
||||
public function test_extensions_details()
|
||||
{
|
||||
$crawler = self::request('GET', 'adm/index.php?i=acp_extensions&mode=main&action=details&ext_name=foo%2Fbar&sid=' . $this->sid);
|
||||
|
||||
// Test whether the details are displayed
|
||||
$this->assertContains($this->lang('CLEAN_NAME'), $crawler->filter('#main')->text());
|
||||
$this->assertContains('foo/bar', $crawler->filter('#meta_name')->text());
|
||||
|
||||
$this->assertContains($this->lang('PHP_VERSION'), $crawler->filter('#main')->text());
|
||||
$this->assertContains('>=5.3', $crawler->filter('#require_php')->text());
|
||||
// Details should be html escaped
|
||||
// However, text() only returns the displayed text, so HTML Special Chars are decoded.
|
||||
// So we test this directly on the content of the response.
|
||||
$this->assertContains('<p id="require_php">>=5.3</p>', $this->get_content());
|
||||
}
|
||||
|
||||
public function test_extensions_details_notexists()
|
||||
{
|
||||
$crawler = self::request('GET', 'adm/index.php?i=acp_extensions&mode=main&action=details&ext_name=not%2Fexists&sid=' . $this->sid);
|
||||
|
||||
// Error message because the files do not exist
|
||||
$this->assertContains('The required file does not exist:', $crawler->filter('#main')->text());
|
||||
}
|
||||
}
|
@@ -40,10 +40,9 @@ class phpbb_functional_notification_test extends phpbb_functional_test_case
|
||||
public function test_user_subscriptions($checkbox_name, $expected_status)
|
||||
{
|
||||
$this->login();
|
||||
$crawler = $this->request('GET', 'ucp.php?i=ucp_notifications&mode=notification_options');
|
||||
$this->assert_response_success();
|
||||
$crawler = self::request('GET', 'ucp.php?i=ucp_notifications&mode=notification_options');
|
||||
|
||||
$cplist = $crawler->filter('.cplist');
|
||||
$cplist = $crawler->filter('.table1');
|
||||
if ($expected_status)
|
||||
{
|
||||
$this->assert_checkbox_is_checked($cplist, $checkbox_name);
|
||||
|
@@ -19,18 +19,17 @@ class phpbb_functional_posting_test extends phpbb_functional_test_case
|
||||
// Test creating topic
|
||||
$post = $this->create_topic(2, 'Test Topic 1', 'This is a test topic posted by the testing framework.');
|
||||
|
||||
$crawler = $this->request('GET', "viewtopic.php?t={$post['topic_id']}&sid={$this->sid}");
|
||||
$crawler = self::request('GET', "viewtopic.php?t={$post['topic_id']}&sid={$this->sid}");
|
||||
$this->assertContains('This is a test topic posted by the testing framework.', $crawler->filter('html')->text());
|
||||
|
||||
// Test creating a reply
|
||||
$post2 = $this->create_post(2, $post['topic_id'], 'Re: Test Topic 1', 'This is a test post posted by the testing framework.');
|
||||
|
||||
$crawler = $this->request('GET', "viewtopic.php?t={$post2['topic_id']}&sid={$this->sid}");
|
||||
$crawler = self::request('GET', "viewtopic.php?t={$post2['topic_id']}&sid={$this->sid}");
|
||||
$this->assertContains('This is a test post posted by the testing framework.', $crawler->filter('html')->text());
|
||||
|
||||
// Test quoting a message
|
||||
$crawler = $this->request('GET', "posting.php?mode=quote&f=2&t={$post2['topic_id']}&p={$post2['post_id']}&sid={$this->sid}");
|
||||
$this->assert_response_success();
|
||||
$crawler = self::request('GET', "posting.php?mode=quote&f=2&t={$post2['topic_id']}&p={$post2['post_id']}&sid={$this->sid}");
|
||||
$this->assertContains('This is a test post posted by the testing framework.', $crawler->filter('html')->text());
|
||||
}
|
||||
|
||||
@@ -55,7 +54,7 @@ class phpbb_functional_posting_test extends phpbb_functional_test_case
|
||||
'post' => true,
|
||||
), $additional_form_data);
|
||||
|
||||
return $this->submit_post($posting_url, 'POST_TOPIC', $form_data);
|
||||
return self::submit_post($posting_url, 'POST_TOPIC', $form_data);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -79,7 +78,7 @@ class phpbb_functional_posting_test extends phpbb_functional_test_case
|
||||
'post' => true,
|
||||
), $additional_form_data);
|
||||
|
||||
return $this->submit_post($posting_url, 'POST_REPLY', $form_data);
|
||||
return self::submit_post($posting_url, 'POST_REPLY', $form_data);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -94,8 +93,7 @@ class phpbb_functional_posting_test extends phpbb_functional_test_case
|
||||
{
|
||||
$this->add_lang('posting');
|
||||
|
||||
$crawler = $this->request('GET', $posting_url);
|
||||
$this->assert_response_success();
|
||||
$crawler = self::request('GET', $posting_url);
|
||||
$this->assertContains($this->lang($posting_contains), $crawler->filter('html')->text());
|
||||
|
||||
$hidden_fields = array(
|
||||
@@ -119,8 +117,7 @@ class phpbb_functional_posting_test extends phpbb_functional_test_case
|
||||
// I use a request because the form submission method does not allow you to send data that is not
|
||||
// contained in one of the actual form fields that the browser sees (i.e. it ignores "hidden" inputs)
|
||||
// Instead, I send it as a request with the submit button "post" set to true.
|
||||
$crawler = $this->client->request('POST', $posting_url, $form_data);
|
||||
$this->assert_response_success();
|
||||
$crawler = self::request('POST', $posting_url, $form_data);
|
||||
$this->assertContains($this->lang('POST_STORED'), $crawler->filter('html')->text());
|
||||
|
||||
$url = $crawler->selectLink($this->lang('VIEW_MESSAGE', '', ''))->link()->getUri();
|
||||
|
53
tests/functional/ucp_groups_test.php
Normal file
53
tests/functional/ucp_groups_test.php
Normal file
@@ -0,0 +1,53 @@
|
||||
<?php
|
||||
/**
|
||||
*
|
||||
* @package testing
|
||||
* @copyright (c) 2013 phpBB Group
|
||||
* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
|
||||
*
|
||||
*/
|
||||
|
||||
require_once dirname(__FILE__) . '/common_groups_test.php';
|
||||
|
||||
/**
|
||||
* @group functional
|
||||
*/
|
||||
class phpbb_functional_ucp_groups_test extends phpbb_functional_common_groups_test
|
||||
{
|
||||
protected $db;
|
||||
|
||||
protected function get_url()
|
||||
{
|
||||
return 'ucp.php?i=groups&mode=manage&action=edit';
|
||||
}
|
||||
|
||||
protected function get_teampage_settings()
|
||||
{
|
||||
if (!isset($this->db))
|
||||
{
|
||||
$this->db = $this->get_db();
|
||||
}
|
||||
$sql = 'SELECT g.group_legend AS group_legend, t.teampage_position AS group_teampage
|
||||
FROM ' . GROUPS_TABLE . ' g
|
||||
LEFT JOIN ' . TEAMPAGE_TABLE . ' t
|
||||
ON (t.group_id = g.group_id)
|
||||
WHERE g.group_id = 5';
|
||||
$result = $this->db->sql_query($sql);
|
||||
$group_row = $this->db->sql_fetchrow($result);
|
||||
$this->db->sql_freeresult($result);
|
||||
return $group_row;
|
||||
}
|
||||
|
||||
public function test_ucp_groups_teampage()
|
||||
{
|
||||
$this->group_manage_login();
|
||||
|
||||
// Test if group_legend or group_teampage are modified while
|
||||
// submitting the ucp_group_manage page
|
||||
$form = $this->get_group_manage_form();
|
||||
$teampage_settings = $this->get_teampage_settings();
|
||||
$crawler = self::submit($form);
|
||||
$this->assertContains($this->lang('GROUP_UPDATED'), $crawler->text());
|
||||
$this->assertEquals($teampage_settings, $this->get_teampage_settings());
|
||||
}
|
||||
}
|
21
tests/functions/fixtures/language_select.xml
Normal file
21
tests/functions/fixtures/language_select.xml
Normal file
@@ -0,0 +1,21 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<dataset>
|
||||
<table name="phpbb_lang">
|
||||
<column>lang_id</column>
|
||||
<column>lang_iso</column>
|
||||
<column>lang_local_name</column>
|
||||
<column>lang_english_name</column>
|
||||
<row>
|
||||
<value>1</value>
|
||||
<value>en</value>
|
||||
<value>English</value>
|
||||
<value>English</value>
|
||||
</row>
|
||||
<row>
|
||||
<value>2</value>
|
||||
<value>cs</value>
|
||||
<value>Čeština</value>
|
||||
<value>Czech</value>
|
||||
</row>
|
||||
</table>
|
||||
</dataset>
|
121
tests/functions/fixtures/obtain_online.xml
Normal file
121
tests/functions/fixtures/obtain_online.xml
Normal file
@@ -0,0 +1,121 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<dataset>
|
||||
<table name="phpbb_sessions">
|
||||
<column>session_id</column>
|
||||
<column>session_user_id</column>
|
||||
<column>session_forum_id</column>
|
||||
<column>session_time</column>
|
||||
<column>session_ip</column>
|
||||
<column>session_viewonline</column>
|
||||
</table>
|
||||
<table name="phpbb_users">
|
||||
<column>user_id</column>
|
||||
<column>username_clean</column>
|
||||
<column>username</column>
|
||||
<column>user_allow_viewonline</column>
|
||||
<column>user_permissions</column>
|
||||
<column>user_sig</column>
|
||||
<column>user_occ</column>
|
||||
<column>user_interests</column>
|
||||
<row>
|
||||
<value>1</value>
|
||||
<value>anonymous</value>
|
||||
<value>anonymous</value>
|
||||
<value>1</value>
|
||||
<value></value>
|
||||
<value></value>
|
||||
<value></value>
|
||||
<value></value>
|
||||
</row>
|
||||
<row>
|
||||
<value>2</value>
|
||||
<value>2</value>
|
||||
<value>2</value>
|
||||
<value>1</value>
|
||||
<value></value>
|
||||
<value></value>
|
||||
<value></value>
|
||||
<value></value>
|
||||
</row>
|
||||
<row>
|
||||
<value>3</value>
|
||||
<value>3</value>
|
||||
<value>3</value>
|
||||
<value>1</value>
|
||||
<value></value>
|
||||
<value></value>
|
||||
<value></value>
|
||||
<value></value>
|
||||
</row>
|
||||
<row>
|
||||
<value>4</value>
|
||||
<value>4</value>
|
||||
<value>4</value>
|
||||
<value>1</value>
|
||||
<value></value>
|
||||
<value></value>
|
||||
<value></value>
|
||||
<value></value>
|
||||
</row>
|
||||
<row>
|
||||
<value>5</value>
|
||||
<value>5</value>
|
||||
<value>5</value>
|
||||
<value>1</value>
|
||||
<value></value>
|
||||
<value></value>
|
||||
<value></value>
|
||||
<value></value>
|
||||
</row>
|
||||
<row>
|
||||
<value>6</value>
|
||||
<value>6</value>
|
||||
<value>6</value>
|
||||
<value>0</value>
|
||||
<value></value>
|
||||
<value></value>
|
||||
<value></value>
|
||||
<value></value>
|
||||
</row>
|
||||
<row>
|
||||
<value>7</value>
|
||||
<value>7</value>
|
||||
<value>7</value>
|
||||
<value>0</value>
|
||||
<value></value>
|
||||
<value></value>
|
||||
<value></value>
|
||||
<value></value>
|
||||
</row>
|
||||
<row>
|
||||
<value>8</value>
|
||||
<value>8</value>
|
||||
<value>8</value>
|
||||
<value>0</value>
|
||||
<value></value>
|
||||
<value></value>
|
||||
<value></value>
|
||||
<value></value>
|
||||
</row>
|
||||
<row>
|
||||
<value>9</value>
|
||||
<value>9</value>
|
||||
<value>9</value>
|
||||
<value>0</value>
|
||||
<value></value>
|
||||
<value></value>
|
||||
<value></value>
|
||||
<value></value>
|
||||
</row>
|
||||
<row>
|
||||
<value>10</value>
|
||||
<value>10</value>
|
||||
<value>10</value>
|
||||
<value>0</value>
|
||||
<value></value>
|
||||
<value></value>
|
||||
<value></value>
|
||||
<value></value>
|
||||
</row>
|
||||
</table>
|
||||
</dataset>
|
27
tests/functions/fixtures/style_select.xml
Normal file
27
tests/functions/fixtures/style_select.xml
Normal file
@@ -0,0 +1,27 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<dataset>
|
||||
<table name="phpbb_styles">
|
||||
<column>style_id</column>
|
||||
<column>style_name</column>
|
||||
<column>style_active</column>
|
||||
<column>style_parent_tree</column>
|
||||
<row>
|
||||
<value>1</value>
|
||||
<value>prosilver</value>
|
||||
<value>1</value>
|
||||
<value></value>
|
||||
</row>
|
||||
<row>
|
||||
<value>2</value>
|
||||
<value>subsilver2</value>
|
||||
<value>1</value>
|
||||
<value></value>
|
||||
</row>
|
||||
<row>
|
||||
<value>3</value>
|
||||
<value>zoo</value>
|
||||
<value>0</value>
|
||||
<value></value>
|
||||
</row>
|
||||
</table>
|
||||
</dataset>
|
56
tests/functions/is_absolute_test.php
Normal file
56
tests/functions/is_absolute_test.php
Normal file
@@ -0,0 +1,56 @@
|
||||
<?php
|
||||
/**
|
||||
*
|
||||
* @package testing
|
||||
* @copyright (c) 2013 phpBB Group
|
||||
* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
|
||||
*
|
||||
*/
|
||||
|
||||
require_once dirname(__FILE__) . '/../../phpBB/includes/functions.php';
|
||||
|
||||
class phpbb_functions_is_absolute_test extends phpbb_test_case
|
||||
{
|
||||
static public function is_absolute_data()
|
||||
{
|
||||
return array(
|
||||
// Empty
|
||||
array('', false),
|
||||
|
||||
// Absolute unix style
|
||||
array('/etc/phpbb', true),
|
||||
// Unix does not support \ so that is not an absolute path
|
||||
array('\etc\phpbb', false),
|
||||
|
||||
// Absolute windows style
|
||||
array('c:\windows', true),
|
||||
array('C:\Windows', true),
|
||||
array('c:/windows', true),
|
||||
array('C:/Windows', true),
|
||||
|
||||
// Executable
|
||||
array('etc/phpbb', false),
|
||||
array('explorer.exe', false),
|
||||
|
||||
// Relative subdir
|
||||
array('Windows\System32', false),
|
||||
array('Windows\System32\explorer.exe', false),
|
||||
array('Windows/System32', false),
|
||||
array('Windows/System32/explorer.exe', false),
|
||||
|
||||
// Relative updir
|
||||
array('..\Windows\System32', false),
|
||||
array('..\Windows\System32\explorer.exe', false),
|
||||
array('../Windows/System32', false),
|
||||
array('../Windows/System32/explorer.exe', false),
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider is_absolute_data
|
||||
*/
|
||||
public function test_is_absolute($path, $expected)
|
||||
{
|
||||
$this->assertEquals($expected, phpbb_is_absolute($path));
|
||||
}
|
||||
}
|
39
tests/functions/language_select_test.php
Normal file
39
tests/functions/language_select_test.php
Normal file
@@ -0,0 +1,39 @@
|
||||
<?php
|
||||
/**
|
||||
*
|
||||
* @package testing
|
||||
* @copyright (c) 2013 phpBB Group
|
||||
* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
|
||||
*
|
||||
*/
|
||||
|
||||
require_once dirname(__FILE__) . '/../../phpBB/includes/functions.php';
|
||||
|
||||
class phpbb_functions_language_select_test extends phpbb_database_test_case
|
||||
{
|
||||
public function getDataSet()
|
||||
{
|
||||
return $this->createXMLDataSet(dirname(__FILE__).'/fixtures/language_select.xml');
|
||||
}
|
||||
|
||||
static public function language_select_data()
|
||||
{
|
||||
return array(
|
||||
array('', '<option value="cs">Čeština</option><option value="en">English</option>'),
|
||||
array('en', '<option value="cs">Čeština</option><option value="en" selected="selected">English</option>'),
|
||||
array('cs', '<option value="cs" selected="selected">Čeština</option><option value="en">English</option>'),
|
||||
array('de', '<option value="cs">Čeština</option><option value="en">English</option>'),
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider language_select_data
|
||||
*/
|
||||
public function test_language_select($default, $expected)
|
||||
{
|
||||
global $db;
|
||||
$db = $this->new_dbal();
|
||||
|
||||
$this->assertEquals($expected, language_select($default));
|
||||
}
|
||||
}
|
227
tests/functions/obtain_online_test.php
Normal file
227
tests/functions/obtain_online_test.php
Normal file
@@ -0,0 +1,227 @@
|
||||
<?php
|
||||
/**
|
||||
*
|
||||
* @package testing
|
||||
* @copyright (c) 2013 phpBB Group
|
||||
* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
|
||||
*
|
||||
*/
|
||||
|
||||
require_once dirname(__FILE__) . '/../../phpBB/includes/functions.php';
|
||||
require_once dirname(__FILE__) . '/../../phpBB/includes/functions_content.php';
|
||||
|
||||
class phpbb_functions_obtain_online_test extends phpbb_database_test_case
|
||||
{
|
||||
public function getDataSet()
|
||||
{
|
||||
return $this->createXMLDataSet(dirname(__FILE__).'/fixtures/obtain_online.xml');
|
||||
}
|
||||
|
||||
protected function setUp()
|
||||
{
|
||||
parent::setUp();
|
||||
|
||||
global $config, $db;
|
||||
|
||||
$db = $this->db = $this->new_dbal();
|
||||
$config = array(
|
||||
'load_online_time' => 5,
|
||||
);
|
||||
}
|
||||
|
||||
static public function obtain_guest_count_data()
|
||||
{
|
||||
return array(
|
||||
array(0, 2),
|
||||
array(1, 1),
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider obtain_guest_count_data
|
||||
*/
|
||||
public function test_obtain_guest_count($forum_id, $expected)
|
||||
{
|
||||
$this->db->sql_query('DELETE FROM phpbb_sessions');
|
||||
|
||||
$time = time();
|
||||
$this->create_guest_sessions($time);
|
||||
$this->assertEquals($expected, obtain_guest_count($forum_id));
|
||||
}
|
||||
|
||||
static public function obtain_users_online_data()
|
||||
{
|
||||
return array(
|
||||
array(0, false, array(
|
||||
'online_users' => array(2 => 2, 3 => 3, 6 => 6, 7 => 7, 10 => 10),
|
||||
'hidden_users' => array(6 => 6, 7 => 7, 10 => 10),
|
||||
'total_online' => 5,
|
||||
'visible_online' => 2,
|
||||
'hidden_online' => 3,
|
||||
'guests_online' => 0,
|
||||
)),
|
||||
array(0, true, array(
|
||||
'online_users' => array(2 => 2, 3 => 3, 6 => 6, 7 => 7, 10 => 10),
|
||||
'hidden_users' => array(6 => 6, 7 => 7, 10 => 10),
|
||||
'total_online' => 7,
|
||||
'visible_online' => 2,
|
||||
'hidden_online' => 3,
|
||||
'guests_online' => 2,
|
||||
)),
|
||||
array(1, false, array(
|
||||
'online_users' => array(3 => 3, 7 => 7),
|
||||
'hidden_users' => array(7 => 7),
|
||||
'total_online' => 2,
|
||||
'visible_online' => 1,
|
||||
'hidden_online' => 1,
|
||||
'guests_online' => 0,
|
||||
)),
|
||||
array(1, true, array(
|
||||
'online_users' => array(3 => 3, 7 => 7),
|
||||
'hidden_users' => array(7 => 7),
|
||||
'total_online' => 3,
|
||||
'visible_online' => 1,
|
||||
'hidden_online' => 1,
|
||||
'guests_online' => 1,
|
||||
)),
|
||||
array(2, false, array(
|
||||
'online_users' => array(),
|
||||
'hidden_users' => array(),
|
||||
'total_online' => 0,
|
||||
'visible_online' => 0,
|
||||
'hidden_online' => 0,
|
||||
'guests_online' => 0,
|
||||
)),
|
||||
array(2, true, array(
|
||||
'online_users' => array(),
|
||||
'hidden_users' => array(),
|
||||
'total_online' => 0,
|
||||
'visible_online' => 0,
|
||||
'hidden_online' => 0,
|
||||
'guests_online' => 0,
|
||||
)),
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider obtain_users_online_data
|
||||
*/
|
||||
public function test_obtain_users_online($forum_id, $display_guests, $expected)
|
||||
{
|
||||
$this->db->sql_query('DELETE FROM phpbb_sessions');
|
||||
|
||||
global $config;
|
||||
$config['load_online_guests'] = $display_guests;
|
||||
|
||||
$time = time();
|
||||
$this->create_guest_sessions($time);
|
||||
$this->create_user_sessions($time);
|
||||
$this->assertEquals($expected, obtain_users_online($forum_id));
|
||||
}
|
||||
|
||||
static public function obtain_users_online_string_data()
|
||||
{
|
||||
return array(
|
||||
array(0, false, array(
|
||||
'online_userlist' => 'REGISTERED_USERS 2, 3',
|
||||
'l_online_users' => 'ONLINE_USERS_TOTAL 5 REG_USERS_TOTAL 2 HIDDEN_USERS_TOTAL 3',
|
||||
)),
|
||||
array(0, true, array(
|
||||
'online_userlist' => 'REGISTERED_USERS 2, 3',
|
||||
'l_online_users' => 'ONLINE_USERS_TOTAL_GUESTS 7 REG_USERS_TOTAL 2 HIDDEN_USERS_TOTAL 3 GUEST_USERS_TOTAL 2',
|
||||
)),
|
||||
array(1, false, array(
|
||||
'online_userlist' => 'BROWSING_FORUM 3',
|
||||
'l_online_users' => 'ONLINE_USERS_TOTAL 2 REG_USERS_TOTAL 1 HIDDEN_USERS_TOTAL 1',
|
||||
)),
|
||||
array(1, true, array(
|
||||
'online_userlist' => 'BROWSING_FORUM_GUESTS 1 3',
|
||||
'l_online_users' => 'ONLINE_USERS_TOTAL_GUESTS 3 REG_USERS_TOTAL 1 HIDDEN_USERS_TOTAL 1 GUEST_USERS_TOTAL 1',
|
||||
)),
|
||||
array(2, false, array(
|
||||
'online_userlist' => 'BROWSING_FORUM NO_ONLINE_USERS',
|
||||
'l_online_users' => 'ONLINE_USERS_TOTAL 0 REG_USERS_TOTAL 0 HIDDEN_USERS_TOTAL 0',
|
||||
)),
|
||||
array(2, true, array(
|
||||
'online_userlist' => 'BROWSING_FORUM_GUESTS 0 NO_ONLINE_USERS',
|
||||
'l_online_users' => 'ONLINE_USERS_TOTAL_GUESTS 0 REG_USERS_TOTAL 0 HIDDEN_USERS_TOTAL 0 GUEST_USERS_TOTAL 0',
|
||||
)),
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider obtain_users_online_string_data
|
||||
*/
|
||||
public function test_obtain_users_online_string($forum_id, $display_guests, $expected)
|
||||
{
|
||||
$this->db->sql_query('DELETE FROM phpbb_sessions');
|
||||
|
||||
global $config, $user, $auth, $phpbb_dispatcher;
|
||||
$config['load_online_guests'] = $display_guests;
|
||||
$user = new phpbb_mock_lang();
|
||||
$user->lang = $this->load_language();
|
||||
$auth = $this->getMock('phpbb_auth');
|
||||
$acl_get_map = array(
|
||||
array('u_viewonline', true),
|
||||
array('u_viewprofile', true),
|
||||
);
|
||||
$auth->expects($this->any())
|
||||
->method('acl_get')
|
||||
->with($this->stringContains('_'),
|
||||
$this->anything())
|
||||
->will($this->returnValueMap($acl_get_map));
|
||||
$phpbb_dispatcher = new phpbb_mock_event_dispatcher();
|
||||
|
||||
$time = time();
|
||||
$this->create_guest_sessions($time);
|
||||
$this->create_user_sessions($time);
|
||||
|
||||
$online_users = obtain_users_online($forum_id);
|
||||
$this->assertEquals($expected, obtain_users_online_string($online_users, $forum_id));
|
||||
}
|
||||
|
||||
protected function create_guest_sessions($time)
|
||||
{
|
||||
$this->add_session(1, '0001', '192.168.0.1', 0, true, $time);
|
||||
$this->add_session(1, '0002', '192.168.0.2', 1, true, $time);
|
||||
$this->add_session(1, '0003', '192.168.0.3', 0, true, $time, 10);
|
||||
$this->add_session(1, '0004', '192.168.0.4', 1, true, $time, 10);
|
||||
}
|
||||
|
||||
protected function create_user_sessions($time)
|
||||
{
|
||||
$this->add_session(2, '0005', '192.168.0.5', 0, true, $time);
|
||||
$this->add_session(3, '0006', '192.168.0.6', 1, true, $time);
|
||||
$this->add_session(4, '0007', '192.168.0.7', 0, true, $time, 10);
|
||||
$this->add_session(5, '0008', '192.168.0.8', 1, true, $time, 10);
|
||||
$this->add_session(6, '0005', '192.168.0.9', 0, false, $time);
|
||||
$this->add_session(7, '0006', '192.168.0.10', 1, false, $time);
|
||||
$this->add_session(8, '0007', '192.168.0.11', 0, false, $time, 10);
|
||||
$this->add_session(9, '0008', '192.168.0.12', 1, false, $time, 10);
|
||||
$this->add_session(10, '009', '192.168.0.13', 0, false, $time);
|
||||
}
|
||||
|
||||
protected function add_session($user_id, $session_id, $user_ip, $forum_id, $view_online, $time, $time_delta = 0)
|
||||
{
|
||||
$sql_ary = array(
|
||||
'session_id' => $user_id . '_' . $forum_id . '_session00000000000000000' . $session_id,
|
||||
'session_user_id' => $user_id,
|
||||
'session_ip' => $user_ip,
|
||||
'session_forum_id' => $forum_id,
|
||||
'session_time' => $time - $time_delta * 60,
|
||||
'session_viewonline' => $view_online,
|
||||
);
|
||||
$this->db->sql_query('INSERT INTO phpbb_sessions ' . $this->db->sql_build_array('INSERT', $sql_ary));
|
||||
}
|
||||
|
||||
protected function load_language()
|
||||
{
|
||||
return array(
|
||||
'NO_ONLINE_USERS' => 'NO_ONLINE_USERS',
|
||||
'REGISTERED_USERS' => 'REGISTERED_USERS',
|
||||
'BROWSING_FORUM' => 'BROWSING_FORUM %s',
|
||||
'BROWSING_FORUM_GUEST' => 'BROWSING_FORUM_GUEST %s %d',
|
||||
'BROWSING_FORUM_GUESTS' => 'BROWSING_FORUM_GUESTS %s %d',
|
||||
);
|
||||
}
|
||||
}
|
41
tests/functions/style_select_test.php
Normal file
41
tests/functions/style_select_test.php
Normal file
@@ -0,0 +1,41 @@
|
||||
<?php
|
||||
/**
|
||||
*
|
||||
* @package testing
|
||||
* @copyright (c) 2013 phpBB Group
|
||||
* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
|
||||
*
|
||||
*/
|
||||
|
||||
require_once dirname(__FILE__) . '/../../phpBB/includes/functions.php';
|
||||
|
||||
class phpbb_functions_style_select_test extends phpbb_database_test_case
|
||||
{
|
||||
public function getDataSet()
|
||||
{
|
||||
return $this->createXMLDataSet(dirname(__FILE__).'/fixtures/style_select.xml');
|
||||
}
|
||||
|
||||
static public function style_select_data()
|
||||
{
|
||||
return array(
|
||||
array('', false, '<option value="1">prosilver</option><option value="2">subsilver2</option>'),
|
||||
array('', true, '<option value="1">prosilver</option><option value="2">subsilver2</option><option value="3">zoo</option>'),
|
||||
array('1', false, '<option value="1" selected="selected">prosilver</option><option value="2">subsilver2</option>'),
|
||||
array('1', true, '<option value="1" selected="selected">prosilver</option><option value="2">subsilver2</option><option value="3">zoo</option>'),
|
||||
array('3', false, '<option value="1">prosilver</option><option value="2">subsilver2</option>'),
|
||||
array('3', true, '<option value="1">prosilver</option><option value="2">subsilver2</option><option value="3" selected="selected">zoo</option>'),
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider style_select_data
|
||||
*/
|
||||
public function test_style_select($default, $all, $expected)
|
||||
{
|
||||
global $db;
|
||||
$db = $this->new_dbal();
|
||||
|
||||
$this->assertEquals($expected, style_select($default, $all));
|
||||
}
|
||||
}
|
121
tests/functions/validate_hex_colour_test.php
Normal file
121
tests/functions/validate_hex_colour_test.php
Normal file
@@ -0,0 +1,121 @@
|
||||
<?php
|
||||
/**
|
||||
*
|
||||
* @package testing
|
||||
* @copyright (c) 2013 phpBB Group
|
||||
* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
|
||||
*
|
||||
*/
|
||||
|
||||
require_once dirname(__FILE__) . '/../../phpBB/includes/functions_user.php';
|
||||
|
||||
class phpbb_functions_validate_hex_colour_test extends phpbb_test_case
|
||||
{
|
||||
public function positive_match_data()
|
||||
{
|
||||
return array(
|
||||
array('a00'),
|
||||
array('AFF'),
|
||||
array('AA0000'),
|
||||
array('aa00FF'),
|
||||
array('000'),
|
||||
array('000000'),
|
||||
);
|
||||
}
|
||||
|
||||
public function negative_match_data()
|
||||
{
|
||||
return array(
|
||||
// Invalid prefix
|
||||
array('#aa0'),
|
||||
array('#AA0000'),
|
||||
array('vAA0000'),
|
||||
|
||||
// Invalid suffix
|
||||
array('AA0000v'),
|
||||
|
||||
// Correct length, but out of hex range
|
||||
array('ag0'),
|
||||
array('AAG000'),
|
||||
|
||||
// Too long
|
||||
array('AA00000'),
|
||||
array('AA0000 '),
|
||||
array('AA0000 abf'),
|
||||
array('AA0000 AA0000'),
|
||||
|
||||
// empty()
|
||||
array('0'),
|
||||
);
|
||||
}
|
||||
|
||||
public function optional_only_data()
|
||||
{
|
||||
return array(
|
||||
// The empty colour, i.e. "no colour".
|
||||
array(''),
|
||||
);
|
||||
}
|
||||
|
||||
public function strict_negative_match_data()
|
||||
{
|
||||
return array_merge(
|
||||
$this->negative_match_data(),
|
||||
$this->optional_only_data()
|
||||
);
|
||||
}
|
||||
|
||||
public function nonstrict_positive_match_data()
|
||||
{
|
||||
return array_merge(
|
||||
$this->positive_match_data(),
|
||||
$this->optional_only_data()
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider positive_match_data
|
||||
*/
|
||||
public function test_strict_positive_match($input)
|
||||
{
|
||||
$this->assertFalse(
|
||||
phpbb_validate_hex_colour($input, false),
|
||||
"Failed asserting that $input passes as a valid hex colour."
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider strict_negative_match_data
|
||||
*/
|
||||
public function test_strict_negative_match($input)
|
||||
{
|
||||
$this->assertSame(
|
||||
'WRONG_DATA',
|
||||
phpbb_validate_hex_colour($input, false),
|
||||
"Failed asserting that $input does not pass as a valid hex colour."
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider nonstrict_positive_match_data
|
||||
*/
|
||||
public function test_nonstrict_positive_match($input)
|
||||
{
|
||||
$this->assertFalse(
|
||||
phpbb_validate_hex_colour($input, true),
|
||||
"Failed asserting that $input passes as a valid or optional hex colour."
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider negative_match_data
|
||||
*/
|
||||
public function test_nonstrict_negative_match($input)
|
||||
{
|
||||
$this->assertSame(
|
||||
'WRONG_DATA',
|
||||
phpbb_validate_hex_colour($input, true),
|
||||
"Failed asserting that $input does not pass as a valid or optional hex colour."
|
||||
);
|
||||
}
|
||||
}
|
@@ -49,6 +49,7 @@ class phpbb_functions_acp_build_cfg_template_test extends phpbb_test_case
|
||||
global $user, $phpbb_dispatcher;
|
||||
|
||||
$phpbb_dispatcher = new phpbb_mock_event_dispatcher();
|
||||
$user = new phpbb_mock_user();
|
||||
$user->lang = new phpbb_mock_lang();
|
||||
|
||||
$this->assertEquals($expected, build_cfg_template($tpl_type, $key, $new, $config_key, $vars));
|
||||
@@ -58,20 +59,20 @@ class phpbb_functions_acp_build_cfg_template_test extends phpbb_test_case
|
||||
{
|
||||
return array(
|
||||
array(
|
||||
array('dimension', 20, 255),
|
||||
'key_name',
|
||||
array('dimension', 5, 15),
|
||||
'number_key_name',
|
||||
array('config_key_name_width' => 10, 'config_key_name_height' => 20),
|
||||
'config_key_name',
|
||||
array(),
|
||||
'<input id="key_name" type="text" size="20" maxlength="255" name="config[config_key_name_width]" value="10" /> x <input type="text" size="20" maxlength="255" name="config[config_key_name_height]" value="20" />',
|
||||
'<input id="number_key_name" type="number" size="2" maxlength="2" min="5" max="15" name="config[config_key_name_width]" value="10" /> x <input type="number" size="2" maxlength="2" min="5" max="15" name="config[config_key_name_height]" value="20" />',
|
||||
),
|
||||
array(
|
||||
array('dimension', 0, 255),
|
||||
'key_name',
|
||||
array('dimension', 0, 15),
|
||||
'number_key_name',
|
||||
array('config_key_name_width' => 10, 'config_key_name_height' => 20),
|
||||
'config_key_name',
|
||||
array(),
|
||||
'<input id="key_name" type="text" maxlength="255" name="config[config_key_name_width]" value="10" /> x <input type="text" maxlength="255" name="config[config_key_name_height]" value="20" />',
|
||||
'<input id="number_key_name" type="number" size="2" maxlength="2" min="0" max="15" name="config[config_key_name_width]" value="10" /> x <input type="number" size="2" maxlength="2" min="0" max="15" name="config[config_key_name_height]" value="20" />',
|
||||
),
|
||||
);
|
||||
}
|
||||
@@ -84,6 +85,43 @@ class phpbb_functions_acp_build_cfg_template_test extends phpbb_test_case
|
||||
global $user, $phpbb_dispatcher;
|
||||
|
||||
$phpbb_dispatcher = new phpbb_mock_event_dispatcher();
|
||||
$user = new phpbb_mock_user();
|
||||
$user->lang = new phpbb_mock_lang();
|
||||
|
||||
$this->assertEquals($expected, build_cfg_template($tpl_type, $key, $new, $config_key, $vars));
|
||||
}
|
||||
|
||||
public function build_cfg_template_number_data()
|
||||
{
|
||||
return array(
|
||||
array(
|
||||
array('number', 5, 15),
|
||||
'number_key_name',
|
||||
array('config_key_name' => 10),
|
||||
'config_key_name',
|
||||
array(),
|
||||
'<input id="number_key_name" type="number" maxlength="2" min="5" max="15" name="config[config_key_name]" value="10" />',
|
||||
),
|
||||
array(
|
||||
array('number', -1, 9999),
|
||||
'number_key_name',
|
||||
array('config_key_name' => 10),
|
||||
'config_key_name',
|
||||
array(),
|
||||
'<input id="number_key_name" type="number" maxlength="4" min="-1" max="9999" name="config[config_key_name]" value="10" />',
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider build_cfg_template_number_data
|
||||
*/
|
||||
public function test_build_cfg_template_number($tpl_type, $key, $new, $config_key, $vars, $expected)
|
||||
{
|
||||
global $user, $phpbb_dispatcher;
|
||||
|
||||
$phpbb_dispatcher = new phpbb_mock_event_dispatcher();
|
||||
$user = new phpbb_mock_user();
|
||||
$user->lang = new phpbb_mock_lang();
|
||||
|
||||
$this->assertEquals($expected, build_cfg_template($tpl_type, $key, $new, $config_key, $vars));
|
||||
@@ -111,6 +149,7 @@ class phpbb_functions_acp_build_cfg_template_test extends phpbb_test_case
|
||||
global $user, $phpbb_dispatcher;
|
||||
|
||||
$phpbb_dispatcher = new phpbb_mock_event_dispatcher();
|
||||
$user = new phpbb_mock_user();
|
||||
$user->lang = new phpbb_mock_lang();
|
||||
|
||||
$this->assertEquals($expected, build_cfg_template($tpl_type, $key, $new, $config_key, $vars));
|
||||
@@ -162,6 +201,7 @@ class phpbb_functions_acp_build_cfg_template_test extends phpbb_test_case
|
||||
global $user, $phpbb_dispatcher;
|
||||
|
||||
$phpbb_dispatcher = new phpbb_mock_event_dispatcher();
|
||||
$user = new phpbb_mock_user();
|
||||
$user->lang = new phpbb_mock_lang();
|
||||
|
||||
$this->assertEquals($expected, build_cfg_template($tpl_type, $key, $new, $config_key, $vars));
|
||||
@@ -189,6 +229,7 @@ class phpbb_functions_acp_build_cfg_template_test extends phpbb_test_case
|
||||
global $user, $phpbb_dispatcher;
|
||||
|
||||
$phpbb_dispatcher = new phpbb_mock_event_dispatcher();
|
||||
$user = new phpbb_mock_user();
|
||||
$user->lang = new phpbb_mock_lang();
|
||||
|
||||
$this->assertEquals($expected, build_cfg_template($tpl_type, $key, $new, $config_key, $vars));
|
||||
|
@@ -32,13 +32,18 @@ class phpbb_lock_db_test extends phpbb_database_test_case
|
||||
|
||||
public function test_new_lock()
|
||||
{
|
||||
$this->assertFalse($this->lock->owns_lock());
|
||||
|
||||
$this->assertTrue($this->lock->acquire());
|
||||
$this->assertTrue($this->lock->owns_lock());
|
||||
$this->assertTrue(isset($this->config['test_lock']), 'Lock was created');
|
||||
|
||||
$lock2 = new phpbb_lock_db('test_lock', $this->config, $this->db);
|
||||
$this->assertFalse($lock2->acquire());
|
||||
$this->assertFalse($lock2->owns_lock());
|
||||
|
||||
$this->lock->release();
|
||||
$this->assertFalse($this->lock->owns_lock());
|
||||
$this->assertEquals('0', $this->config['test_lock'], 'Lock was released');
|
||||
}
|
||||
|
||||
@@ -50,31 +55,40 @@ class phpbb_lock_db_test extends phpbb_database_test_case
|
||||
|
||||
public function test_double_lock()
|
||||
{
|
||||
$this->assertFalse($this->lock->owns_lock());
|
||||
|
||||
$this->assertTrue($this->lock->acquire());
|
||||
$this->assertTrue($this->lock->owns_lock());
|
||||
$this->assertTrue(isset($this->config['test_lock']), 'Lock was created');
|
||||
|
||||
$value = $this->config['test_lock'];
|
||||
|
||||
$this->assertFalse($this->lock->acquire());
|
||||
$this->assertTrue($this->lock->owns_lock());
|
||||
$this->assertEquals($value, $this->config['test_lock'], 'Second lock failed');
|
||||
|
||||
$this->lock->release();
|
||||
$this->assertFalse($this->lock->owns_lock());
|
||||
$this->assertEquals('0', $this->config['test_lock'], 'Lock was released');
|
||||
}
|
||||
|
||||
public function test_double_unlock()
|
||||
{
|
||||
$this->assertTrue($this->lock->acquire());
|
||||
$this->assertTrue($this->lock->owns_lock());
|
||||
$this->assertFalse(empty($this->config['test_lock']), 'First lock is acquired');
|
||||
|
||||
$this->lock->release();
|
||||
$this->assertFalse($this->lock->owns_lock());
|
||||
$this->assertEquals('0', $this->config['test_lock'], 'First lock is released');
|
||||
|
||||
$lock2 = new phpbb_lock_db('test_lock', $this->config, $this->db);
|
||||
$this->assertTrue($lock2->acquire());
|
||||
$this->assertTrue($lock2->owns_lock());
|
||||
$this->assertFalse(empty($this->config['test_lock']), 'Second lock is acquired');
|
||||
|
||||
$this->lock->release();
|
||||
$this->assertTrue($lock2->owns_lock());
|
||||
$this->assertFalse(empty($this->config['test_lock']), 'Double release of first lock is ignored');
|
||||
|
||||
$lock2->release();
|
||||
|
@@ -26,15 +26,21 @@ class phpbb_lock_flock_test extends phpbb_test_case
|
||||
$lock = new phpbb_lock_flock($path);
|
||||
$ok = $lock->acquire();
|
||||
$this->assertTrue($ok);
|
||||
$this->assertTrue($lock->owns_lock());
|
||||
$lock->release();
|
||||
$this->assertFalse($lock->owns_lock());
|
||||
|
||||
$ok = $lock->acquire();
|
||||
$this->assertTrue($ok);
|
||||
$this->assertTrue($lock->owns_lock());
|
||||
$lock->release();
|
||||
$this->assertFalse($lock->owns_lock());
|
||||
|
||||
$ok = $lock->acquire();
|
||||
$this->assertTrue($ok);
|
||||
$this->assertTrue($lock->owns_lock());
|
||||
$lock->release();
|
||||
$this->assertFalse($lock->owns_lock());
|
||||
}
|
||||
|
||||
/* This hangs the process.
|
||||
@@ -77,15 +83,18 @@ class phpbb_lock_flock_test extends phpbb_test_case
|
||||
$ok = $lock->acquire();
|
||||
$delta = time() - $start;
|
||||
$this->assertTrue($ok);
|
||||
$this->assertTrue($lock->owns_lock());
|
||||
$this->assertGreaterThan(0.5, $delta, 'First lock acquired too soon');
|
||||
|
||||
$lock->release();
|
||||
$this->assertFalse($lock->owns_lock());
|
||||
|
||||
// acquire again, this should be instantaneous
|
||||
$start = time();
|
||||
$ok = $lock->acquire();
|
||||
$delta = time() - $start;
|
||||
$this->assertTrue($ok);
|
||||
$this->assertTrue($lock->owns_lock());
|
||||
$this->assertLessThan(0.1, $delta, 'Second lock not acquired instantaneously');
|
||||
|
||||
// reap the child
|
||||
@@ -99,8 +108,10 @@ class phpbb_lock_flock_test extends phpbb_test_case
|
||||
$lock = new phpbb_lock_flock($path);
|
||||
$ok = $lock->acquire();
|
||||
$this->assertTrue($ok);
|
||||
$this->assertTrue($lock->owns_lock());
|
||||
sleep(2);
|
||||
$lock->release();
|
||||
$this->assertFalse($lock->owns_lock());
|
||||
|
||||
// and go away silently
|
||||
pcntl_exec('/usr/bin/env', array('true'));
|
||||
|
@@ -30,4 +30,9 @@ class phpbb_mock_lang implements ArrayAccess
|
||||
public function offsetUnset($offset)
|
||||
{
|
||||
}
|
||||
|
||||
public function lang()
|
||||
{
|
||||
return implode(' ', func_get_args());
|
||||
}
|
||||
}
|
||||
|
21
tests/mock/metadata_manager.php
Normal file
21
tests/mock/metadata_manager.php
Normal file
@@ -0,0 +1,21 @@
|
||||
<?php
|
||||
/**
|
||||
*
|
||||
* @package testing
|
||||
* @copyright (c) 2013 phpBB Group
|
||||
* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
|
||||
*
|
||||
*/
|
||||
|
||||
class phpbb_mock_metadata_manager extends phpbb_extension_metadata_manager
|
||||
{
|
||||
public function set_metadata($metadata)
|
||||
{
|
||||
$this->metadata = $metadata;
|
||||
}
|
||||
|
||||
public function merge_metadata($metadata)
|
||||
{
|
||||
$this->metadata = array_merge($this->metadata, $metadata);
|
||||
}
|
||||
}
|
@@ -29,14 +29,14 @@
|
||||
</row>
|
||||
</table>
|
||||
<table name="phpbb_notifications">
|
||||
<column>item_type</column>
|
||||
<column>notification_type_id</column>
|
||||
<column>user_id</column>
|
||||
<column>item_id</column>
|
||||
<column>item_parent_id</column>
|
||||
<column>notification_read</column>
|
||||
<column>notification_data</column>
|
||||
<row>
|
||||
<value>bookmark</value>
|
||||
<value>1</value>
|
||||
<value>5</value>
|
||||
<value>1</value>
|
||||
<value>1</value>
|
||||
@@ -45,9 +45,11 @@
|
||||
</row>
|
||||
</table>
|
||||
<table name="phpbb_notification_types">
|
||||
<column>notification_type</column>
|
||||
<column>notification_type_id</column>
|
||||
<column>notification_type_name</column>
|
||||
<column>notification_type_enabled</column>
|
||||
<row>
|
||||
<value>1</value>
|
||||
<value>bookmark</value>
|
||||
<value>1</value>
|
||||
</row>
|
||||
|
@@ -21,14 +21,14 @@
|
||||
</row>
|
||||
</table>
|
||||
<table name="phpbb_notifications">
|
||||
<column>item_type</column>
|
||||
<column>notification_type_id</column>
|
||||
<column>user_id</column>
|
||||
<column>item_id</column>
|
||||
<column>item_parent_id</column>
|
||||
<column>notification_read</column>
|
||||
<column>notification_data</column>
|
||||
<row>
|
||||
<value>post</value>
|
||||
<value>1</value>
|
||||
<value>5</value>
|
||||
<value>1</value>
|
||||
<value>1</value>
|
||||
@@ -36,7 +36,7 @@
|
||||
<value></value>
|
||||
</row>
|
||||
<row>
|
||||
<value>post</value>
|
||||
<value>1</value>
|
||||
<value>8</value>
|
||||
<value>1</value>
|
||||
<value>1</value>
|
||||
@@ -45,9 +45,11 @@
|
||||
</row>
|
||||
</table>
|
||||
<table name="phpbb_notification_types">
|
||||
<column>notification_type</column>
|
||||
<column>notification_type_id</column>
|
||||
<column>notification_type_name</column>
|
||||
<column>notification_type_enabled</column>
|
||||
<row>
|
||||
<value>1</value>
|
||||
<value>post</value>
|
||||
<value>1</value>
|
||||
</row>
|
||||
|
@@ -1,14 +1,14 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<dataset>
|
||||
<table name="phpbb_notifications">
|
||||
<column>item_type</column>
|
||||
<column>notification_type_id</column>
|
||||
<column>user_id</column>
|
||||
<column>item_id</column>
|
||||
<column>item_parent_id</column>
|
||||
<column>notification_read</column>
|
||||
<column>notification_data</column>
|
||||
<row>
|
||||
<value>post_in_queue</value>
|
||||
<value>1</value>
|
||||
<value>6</value>
|
||||
<value>1</value>
|
||||
<value>1</value>
|
||||
@@ -17,9 +17,11 @@
|
||||
</row>
|
||||
</table>
|
||||
<table name="phpbb_notification_types">
|
||||
<column>notification_type</column>
|
||||
<column>notification_type_id</column>
|
||||
<column>notification_type_name</column>
|
||||
<column>notification_type_enabled</column>
|
||||
<row>
|
||||
<value>1</value>
|
||||
<value>post_in_queue</value>
|
||||
<value>1</value>
|
||||
</row>
|
||||
|
@@ -1,14 +1,14 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<dataset>
|
||||
<table name="phpbb_notifications">
|
||||
<column>item_type</column>
|
||||
<column>notification_type_id</column>
|
||||
<column>user_id</column>
|
||||
<column>item_id</column>
|
||||
<column>item_parent_id</column>
|
||||
<column>notification_read</column>
|
||||
<column>notification_data</column>
|
||||
<row>
|
||||
<value>quote</value>
|
||||
<value>1</value>
|
||||
<value>5</value>
|
||||
<value>1</value>
|
||||
<value>1</value>
|
||||
@@ -17,9 +17,11 @@
|
||||
</row>
|
||||
</table>
|
||||
<table name="phpbb_notification_types">
|
||||
<column>notification_type</column>
|
||||
<column>notification_type_id</column>
|
||||
<column>notification_type_name</column>
|
||||
<column>notification_type_enabled</column>
|
||||
<row>
|
||||
<value>1</value>
|
||||
<value>quote</value>
|
||||
<value>1</value>
|
||||
</row>
|
||||
|
@@ -19,7 +19,7 @@ if (!defined('IN_PHPBB'))
|
||||
* Notifications service class
|
||||
* @package notifications
|
||||
*/
|
||||
class phpbb_mock_notifications_notification_manager extends phpbb_notification_manager
|
||||
class phpbb_notification_manager_helper extends phpbb_notification_manager
|
||||
{
|
||||
public function set_var($name, $value)
|
||||
{
|
||||
@@ -28,12 +28,10 @@ class phpbb_mock_notifications_notification_manager extends phpbb_notification_m
|
||||
|
||||
// Extra dependencies for get_*_class functions
|
||||
protected $auth = null;
|
||||
protected $cache = null;
|
||||
protected $config = null;
|
||||
public function setDependencies($auth, $cache, $config)
|
||||
public function setDependencies($auth, $config)
|
||||
{
|
||||
$this->auth = $auth;
|
||||
$this->cache = $cache;
|
||||
$this->config = $config;
|
||||
}
|
||||
|
||||
@@ -44,7 +42,7 @@ class phpbb_mock_notifications_notification_manager extends phpbb_notification_m
|
||||
{
|
||||
$item_type = 'phpbb_notification_type_' . $item_type;
|
||||
|
||||
$item = new $item_type($this->user_loader, $this->db, $this->cache, $this->user, $this->auth, $this->config, $this->phpbb_root_path, $this->php_ext, $this->notification_types_table, $this->notifications_table, $this->user_notifications_table);
|
||||
$item = new $item_type($this->user_loader, $this->db, $this->cache->get_driver(), $this->user, $this->auth, $this->config, $this->phpbb_root_path, $this->php_ext, $this->notification_types_table, $this->notifications_table, $this->user_notifications_table);
|
||||
|
||||
$item->set_notification_manager($this);
|
||||
|
||||
@@ -60,7 +58,7 @@ class phpbb_mock_notifications_notification_manager extends phpbb_notification_m
|
||||
{
|
||||
$method_name = 'phpbb_notification_method_' . $method_name;
|
||||
|
||||
$method = new $method_name($this->user_loader, $this->db, $this->cache, $this->user, $this->auth, $this->config, $this->phpbb_root_path, $this->php_ext, $this->notification_types_table, $this->notifications_table, $this->user_notifications_table);
|
||||
$method = new $method_name($this->user_loader, $this->db, $this->cache->get_driver(), $this->user, $this->auth, $this->config, $this->phpbb_root_path, $this->php_ext, $this->notification_types_table, $this->notifications_table, $this->user_notifications_table);
|
||||
|
||||
$method->set_notification_manager($this);
|
||||
|
@@ -7,6 +7,8 @@
|
||||
*
|
||||
*/
|
||||
|
||||
require_once dirname(__FILE__) . '/manager_helper.php';
|
||||
|
||||
class phpbb_notification_test extends phpbb_database_test_case
|
||||
{
|
||||
protected $notifications, $db, $container, $user, $config, $auth, $cache;
|
||||
@@ -31,19 +33,26 @@ class phpbb_notification_test extends phpbb_database_test_case
|
||||
'allow_topic_notify' => true,
|
||||
'allow_forum_notify' => true,
|
||||
));
|
||||
$this->user = new phpbb_mock_user();
|
||||
$this->user = new phpbb_user();
|
||||
$this->user_loader = new phpbb_user_loader($this->db, $phpbb_root_path, $phpEx, 'phpbb_users');
|
||||
$this->auth = new phpbb_mock_notifications_auth();
|
||||
$this->cache = new phpbb_mock_cache();
|
||||
$this->cache = new phpbb_cache_service(
|
||||
new phpbb_cache_driver_null(),
|
||||
$this->config,
|
||||
$this->db,
|
||||
$phpbb_root_path,
|
||||
$phpEx
|
||||
);
|
||||
|
||||
$this->container = new phpbb_mock_container_builder();
|
||||
|
||||
$this->notifications = new phpbb_mock_notifications_notification_manager(
|
||||
$this->notifications = new phpbb_notification_manager_helper(
|
||||
array(),
|
||||
array(),
|
||||
$this->container,
|
||||
$this->user_loader,
|
||||
$this->db,
|
||||
$this->cache,
|
||||
$this->user,
|
||||
$phpbb_root_path,
|
||||
$phpEx,
|
||||
@@ -52,7 +61,7 @@ class phpbb_notification_test extends phpbb_database_test_case
|
||||
'phpbb_user_notifications'
|
||||
);
|
||||
|
||||
$this->notifications->setDependencies($this->auth, $this->cache, $this->config);
|
||||
$this->notifications->setDependencies($this->auth, $this->config);
|
||||
|
||||
$types = array();
|
||||
foreach (array(
|
||||
@@ -87,7 +96,36 @@ class phpbb_notification_test extends phpbb_database_test_case
|
||||
{
|
||||
global $phpbb_root_path, $phpEx;
|
||||
|
||||
return new $type($this->user_loader, $this->db, $this->cache, $this->user, $this->auth, $this->config, $phpbb_root_path, $phpEx, 'phpbb_notification_types', 'phpbb_notifications', 'phpbb_user_notifications');
|
||||
return new $type($this->user_loader, $this->db, $this->cache->get_driver(), $this->user, $this->auth, $this->config, $phpbb_root_path, $phpEx, 'phpbb_notification_types', 'phpbb_notifications', 'phpbb_user_notifications');
|
||||
}
|
||||
|
||||
public function test_get_notification_type_id()
|
||||
{
|
||||
// They should be inserted the first time
|
||||
$this->assertEquals(1, $this->notifications->get_notification_type_id('post'));
|
||||
$this->assertEquals(2, $this->notifications->get_notification_type_id('quote'));
|
||||
$this->assertEquals(3, $this->notifications->get_notification_type_id('test'));
|
||||
|
||||
$this->assertEquals(array(
|
||||
'test' => 3,
|
||||
'quote' => 2,
|
||||
'post' => 1,
|
||||
),
|
||||
$this->notifications->get_notification_type_ids(array(
|
||||
'test',
|
||||
'quote',
|
||||
'post',
|
||||
)
|
||||
));
|
||||
$this->assertEquals(2, $this->notifications->get_notification_type_id('quote'));
|
||||
|
||||
try
|
||||
{
|
||||
$this->assertEquals(3, $this->notifications->get_notification_type_id('fail'));
|
||||
|
||||
$this->fail('Non-existent type should throw an exception');
|
||||
}
|
||||
catch (Exception $e) {}
|
||||
}
|
||||
|
||||
public function test_get_subscription_types()
|
||||
@@ -121,6 +159,20 @@ class phpbb_notification_test extends phpbb_database_test_case
|
||||
|
||||
public function test_notifications()
|
||||
{
|
||||
$this->db->sql_query('DELETE FROM phpbb_notification_types');
|
||||
|
||||
$types = array('quote', 'bookmark', 'post', 'test');
|
||||
foreach ($types as $id => $type)
|
||||
{
|
||||
$this->db->sql_query('INSERT INTO phpbb_notification_types ' .
|
||||
$this->db->sql_build_array('INSERT', array(
|
||||
'notification_type_id' => ($id + 1),
|
||||
'notification_type_name' => $type,
|
||||
'notification_type_enabled' => 1,
|
||||
))
|
||||
);
|
||||
}
|
||||
|
||||
// Used to test post notifications later
|
||||
$this->db->sql_query('INSERT INTO ' . TOPICS_WATCH_TABLE . ' ' . $this->db->sql_build_array('INSERT', array(
|
||||
'topic_id' => 2,
|
||||
@@ -195,7 +247,7 @@ class phpbb_notification_test extends phpbb_database_test_case
|
||||
|
||||
$expected = array(
|
||||
1 => array(
|
||||
'item_type' => 'test',
|
||||
'notification_type_id' => 4,
|
||||
'item_id' => 1,
|
||||
'item_parent_id' => 1,
|
||||
'user_id' => 0,
|
||||
@@ -204,7 +256,7 @@ class phpbb_notification_test extends phpbb_database_test_case
|
||||
'notification_data' => array(),
|
||||
),
|
||||
2 => array(
|
||||
'item_type' => 'test',
|
||||
'notification_type_id' => 4,
|
||||
'item_id' => 2,
|
||||
'item_parent_id' => 2,
|
||||
'user_id' => 0,
|
||||
@@ -213,7 +265,7 @@ class phpbb_notification_test extends phpbb_database_test_case
|
||||
'notification_data' => array(),
|
||||
),
|
||||
3 => array(
|
||||
'item_type' => 'test',
|
||||
'notification_type_id' => 4,
|
||||
'item_id' => 3,
|
||||
'item_parent_id' => 2,
|
||||
'user_id' => 0,
|
||||
@@ -222,7 +274,7 @@ class phpbb_notification_test extends phpbb_database_test_case
|
||||
'notification_data' => array(),
|
||||
),
|
||||
4 => array(
|
||||
'item_type' => 'post',
|
||||
'notification_type_id' => 3,
|
||||
'item_id' => 4,
|
||||
'item_parent_id' => 2,
|
||||
'user_id' => 0,
|
||||
@@ -238,7 +290,7 @@ class phpbb_notification_test extends phpbb_database_test_case
|
||||
),
|
||||
),
|
||||
5 => array(
|
||||
'item_type' => 'bookmark',
|
||||
'notification_type_id' => 2,
|
||||
'item_id' => 5,
|
||||
'item_parent_id' => 2,
|
||||
'user_id' => 0,
|
||||
@@ -301,7 +353,7 @@ class phpbb_notification_test extends phpbb_database_test_case
|
||||
|
||||
$expected = array(
|
||||
1 => array(
|
||||
'item_type' => 'test',
|
||||
'notification_type_id' => 4,
|
||||
'item_id' => 1,
|
||||
'item_parent_id' => 2,
|
||||
'user_id' => 0,
|
||||
@@ -310,7 +362,7 @@ class phpbb_notification_test extends phpbb_database_test_case
|
||||
'notification_data' => array(),
|
||||
),
|
||||
2 => array(
|
||||
'item_type' => 'test',
|
||||
'notification_type_id' => 4,
|
||||
'item_id' => 2,
|
||||
'item_parent_id' => 2,
|
||||
'user_id' => 0,
|
||||
@@ -319,7 +371,7 @@ class phpbb_notification_test extends phpbb_database_test_case
|
||||
'notification_data' => array(),
|
||||
),
|
||||
3 => array(
|
||||
'item_type' => 'test',
|
||||
'notification_type_id' => 4,
|
||||
'item_id' => 3,
|
||||
'item_parent_id' => 2,
|
||||
'user_id' => 0,
|
||||
@@ -328,7 +380,7 @@ class phpbb_notification_test extends phpbb_database_test_case
|
||||
'notification_data' => array(),
|
||||
),
|
||||
4 => array(
|
||||
'item_type' => 'post',
|
||||
'notification_type_id' => 3,
|
||||
'item_id' => 4,
|
||||
'item_parent_id' => 2,
|
||||
'user_id' => 0,
|
||||
@@ -344,7 +396,7 @@ class phpbb_notification_test extends phpbb_database_test_case
|
||||
),
|
||||
),
|
||||
5 => array(
|
||||
'item_type' => 'bookmark',
|
||||
'notification_type_id' => 2,
|
||||
'item_id' => 5,
|
||||
'item_parent_id' => 2,
|
||||
'user_id' => 0,
|
||||
|
@@ -52,9 +52,6 @@ class phpbb_notification_submit_post_base extends phpbb_database_test_case
|
||||
$this->db = $this->new_dbal();
|
||||
$db = $this->db;
|
||||
|
||||
// Cache
|
||||
$cache = new phpbb_mock_cache();
|
||||
|
||||
// Auth
|
||||
$auth = $this->getMock('phpbb_auth');
|
||||
$auth->expects($this->any())
|
||||
@@ -72,6 +69,14 @@ class phpbb_notification_submit_post_base extends phpbb_database_test_case
|
||||
set_config(null, null, null, $config);
|
||||
set_config_count(null, null, null, $config);
|
||||
|
||||
$cache = new phpbb_cache_service(
|
||||
new phpbb_cache_driver_null(),
|
||||
$config,
|
||||
$db,
|
||||
$phpbb_root_path,
|
||||
$phpEx
|
||||
);
|
||||
|
||||
// Event dispatcher
|
||||
$phpbb_dispatcher = new phpbb_mock_event_dispatcher();
|
||||
|
||||
@@ -94,23 +99,28 @@ class phpbb_notification_submit_post_base extends phpbb_database_test_case
|
||||
|
||||
$user_loader = new phpbb_user_loader($db, $phpbb_root_path, $phpEx, USERS_TABLE);
|
||||
|
||||
// Notification Manager
|
||||
$phpbb_notifications = new phpbb_notification_manager(array(), array(),
|
||||
$phpbb_container, $user_loader, $db, $user,
|
||||
$phpbb_root_path, $phpEx,
|
||||
NOTIFICATION_TYPES_TABLE, NOTIFICATIONS_TABLE, USER_NOTIFICATIONS_TABLE);
|
||||
$phpbb_container->set('notification_manager', $phpbb_notifications);
|
||||
|
||||
// Notification Types
|
||||
$notification_types = array('quote', 'bookmark', 'post', 'post_in_queue');
|
||||
$notification_types = array('quote', 'bookmark', 'post', 'post_in_queue', 'topic', 'approve_topic', 'approve_post');
|
||||
$notification_types_array = array();
|
||||
foreach ($notification_types as $type)
|
||||
{
|
||||
$class_name = 'phpbb_notification_type_' . $type;
|
||||
$phpbb_container->set('notification.type.' . $type, new $class_name(
|
||||
$user_loader, $db, $cache, $user, $auth, $config,
|
||||
$class = new $class_name(
|
||||
$user_loader, $db, $cache->get_driver(), $user, $auth, $config,
|
||||
$phpbb_root_path, $phpEx,
|
||||
NOTIFICATION_TYPES_TABLE, NOTIFICATIONS_TABLE, USER_NOTIFICATIONS_TABLE));
|
||||
NOTIFICATION_TYPES_TABLE, NOTIFICATIONS_TABLE, USER_NOTIFICATIONS_TABLE);
|
||||
|
||||
$phpbb_container->set('notification.type.' . $type, $class);
|
||||
|
||||
$notification_types_array['notification.type.' . $type] = $class;
|
||||
}
|
||||
|
||||
// Notification Manager
|
||||
$phpbb_notifications = new phpbb_notification_manager($notification_types_array, array(),
|
||||
$phpbb_container, $user_loader, $db, $cache, $user,
|
||||
$phpbb_root_path, $phpEx,
|
||||
NOTIFICATION_TYPES_TABLE, NOTIFICATIONS_TABLE, USER_NOTIFICATIONS_TABLE);
|
||||
$phpbb_container->set('notification_manager', $phpbb_notifications);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -119,8 +129,9 @@ class phpbb_notification_submit_post_base extends phpbb_database_test_case
|
||||
public function test_submit_post($additional_post_data, $expected_before, $expected_after)
|
||||
{
|
||||
$sql = 'SELECT user_id, item_id, item_parent_id
|
||||
FROM ' . NOTIFICATIONS_TABLE . "
|
||||
WHERE item_type = '" . $this->item_type . "'
|
||||
FROM ' . NOTIFICATIONS_TABLE . ' n, ' . NOTIFICATION_TYPES_TABLE . " nt
|
||||
WHERE nt.notification_type_name = '" . $this->item_type . "'
|
||||
AND n.notification_type_id = nt.notification_type_id
|
||||
ORDER BY user_id, item_id ASC";
|
||||
$result = $this->db->sql_query($sql);
|
||||
$this->assertEquals($expected_before, $this->db->sql_fetchrowset($result));
|
||||
@@ -131,8 +142,9 @@ class phpbb_notification_submit_post_base extends phpbb_database_test_case
|
||||
submit_post('reply', '', 'poster-name', POST_NORMAL, $poll_data, $post_data, false, false);
|
||||
|
||||
$sql = 'SELECT user_id, item_id, item_parent_id
|
||||
FROM ' . NOTIFICATIONS_TABLE . "
|
||||
WHERE item_type = '" . $this->item_type . "'
|
||||
FROM ' . NOTIFICATIONS_TABLE . ' n, ' . NOTIFICATION_TYPES_TABLE . " nt
|
||||
WHERE nt.notification_type_name = '" . $this->item_type . "'
|
||||
AND n.notification_type_id = nt.notification_type_id
|
||||
ORDER BY user_id ASC, item_id ASC";
|
||||
$result = $this->db->sql_query($sql);
|
||||
$this->assertEquals($expected_after, $this->db->sql_fetchrowset($result));
|
||||
|
@@ -86,6 +86,104 @@ abstract class phpbb_search_common_test_case extends phpbb_search_test_case
|
||||
array('-fooo', '-baar'),
|
||||
array(),
|
||||
),
|
||||
array(
|
||||
'fooo -fooo',
|
||||
'all',
|
||||
true,
|
||||
array('fooo', '-fooo'),
|
||||
array(),
|
||||
),
|
||||
array(
|
||||
'fooo fooo-',
|
||||
'all',
|
||||
true,
|
||||
array('fooo', 'fooo'),
|
||||
array(),
|
||||
),
|
||||
array(
|
||||
'-fooo fooo',
|
||||
'all',
|
||||
true,
|
||||
array('-fooo', 'fooo'),
|
||||
array(),
|
||||
),
|
||||
array(
|
||||
'fooo- fooo',
|
||||
'all',
|
||||
true,
|
||||
array('fooo', 'fooo'),
|
||||
array(),
|
||||
),
|
||||
array(
|
||||
'fooo-baar fooo',
|
||||
'all',
|
||||
true,
|
||||
array('fooo', 'baar', 'fooo'),
|
||||
array(),
|
||||
),
|
||||
array(
|
||||
'fooo-baar -fooo',
|
||||
'all',
|
||||
true,
|
||||
array('fooo', 'baar', '-fooo'),
|
||||
array(),
|
||||
),
|
||||
array(
|
||||
'fooo-baar fooo-',
|
||||
'all',
|
||||
true,
|
||||
array('fooo', 'baar', 'fooo'),
|
||||
array(),
|
||||
),
|
||||
array(
|
||||
'fooo-baar baar',
|
||||
'all',
|
||||
true,
|
||||
array('fooo', 'baar', 'baar'),
|
||||
array(),
|
||||
),
|
||||
array(
|
||||
'fooo-baar -baar',
|
||||
'all',
|
||||
true,
|
||||
array('fooo', 'baar', '-baar'),
|
||||
array(),
|
||||
),
|
||||
array(
|
||||
'fooo-baar baar-',
|
||||
'all',
|
||||
true,
|
||||
array('fooo', 'baar', 'baar'),
|
||||
array(),
|
||||
),
|
||||
array(
|
||||
'fooo-baar fooo-baar',
|
||||
'all',
|
||||
true,
|
||||
array('fooo', 'baar', 'fooo', 'baar'),
|
||||
array(),
|
||||
),
|
||||
array(
|
||||
'fooo-baar -fooo-baar',
|
||||
'all',
|
||||
true,
|
||||
array('fooo', 'baar', '-fooo', 'baar'),
|
||||
array(),
|
||||
),
|
||||
array(
|
||||
'fooo-baar fooo-baar-',
|
||||
'all',
|
||||
true,
|
||||
array('fooo', 'baar', 'fooo', 'baar'),
|
||||
array(),
|
||||
),
|
||||
array(
|
||||
'fooo-baar-baaz',
|
||||
'all',
|
||||
true,
|
||||
array('fooo', 'baar', 'baaz'),
|
||||
array(),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
|
@@ -0,0 +1,6 @@
|
||||
|{VARIABLE}|
|
||||
{VARIABLE}|{VARIABLE}|
|
||||
|
||||
|{VARIABLE}
|
||||
|
||||
<div class="{VARIABLE}">test</div>
|
@@ -0,0 +1 @@
|
||||
<!-- EVENT event_variable_spacing -->
|
@@ -16,9 +16,10 @@ class phpbb_template_template_events_test extends phpbb_template_template_test_c
|
||||
return array(
|
||||
/*
|
||||
array(
|
||||
'', // file
|
||||
'', // Description
|
||||
'', // dataset
|
||||
array(), // style names
|
||||
'', // file
|
||||
array(), // vars
|
||||
array(), // block vars
|
||||
array(), // destroy
|
||||
|
87
tests/template/template_spacing_test.php
Normal file
87
tests/template/template_spacing_test.php
Normal file
@@ -0,0 +1,87 @@
|
||||
<?php
|
||||
/**
|
||||
*
|
||||
* @package testing
|
||||
* @copyright (c) 2013 phpBB Group
|
||||
* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
|
||||
*
|
||||
*/
|
||||
|
||||
require_once dirname(__FILE__) . '/template_test_case.php';
|
||||
|
||||
class phpbb_template_template_spacing_test extends phpbb_template_template_test_case
|
||||
{
|
||||
public function template_data()
|
||||
{
|
||||
return array(
|
||||
/*
|
||||
array(
|
||||
'', // Description
|
||||
'', // dataset
|
||||
array(), // style names
|
||||
'', // file
|
||||
array(), // vars
|
||||
array(), // block vars
|
||||
array(), // destroy
|
||||
'', // expected result
|
||||
),
|
||||
*/
|
||||
array(
|
||||
'Spacing in templates',
|
||||
'ext_trivial',
|
||||
array(),
|
||||
'variable_spacing.html',
|
||||
array(
|
||||
'VARIABLE' => '{}',
|
||||
),
|
||||
array(),
|
||||
array(),
|
||||
'|{}|
|
||||
{}|{}|
|
||||
|{}
|
||||
<div class="{}">test</div>',
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider template_data
|
||||
*/
|
||||
public function test_template($desc, $dataset, $style_names, $file, array $vars, array $block_vars, array $destroy, $expected)
|
||||
{
|
||||
// Run test
|
||||
$cache_file = $this->template->cachepath . str_replace('/', '.', $file) . '.php';
|
||||
$this->run_template($file, $vars, $block_vars, $destroy, $expected, $cache_file);
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider template_data
|
||||
*/
|
||||
public function test_event($desc, $dataset, $style_names, $file, array $vars, array $block_vars, array $destroy, $expected)
|
||||
{
|
||||
// Reset the engine state
|
||||
$this->setup_engine_for_events($dataset, $style_names);
|
||||
|
||||
// Run test
|
||||
$cache_file = $this->template->cachepath . str_replace('/', '.', $file) . '.php';
|
||||
$this->run_template($file, $vars, $block_vars, $destroy, $expected, $cache_file);
|
||||
}
|
||||
|
||||
protected function setup_engine_for_events($dataset, $style_names, array $new_config = array())
|
||||
{
|
||||
global $phpbb_root_path, $phpEx, $user;
|
||||
|
||||
$defaults = $this->config_defaults();
|
||||
$config = new phpbb_config(array_merge($defaults, $new_config));
|
||||
|
||||
$this->template_path = dirname(__FILE__) . "/datasets/$dataset/styles/silver/template";
|
||||
$this->style_resource_locator = new phpbb_style_resource_locator();
|
||||
$this->extension_manager = new phpbb_mock_filesystem_extension_manager(
|
||||
dirname(__FILE__) . "/datasets/$dataset/"
|
||||
);
|
||||
$this->template = new phpbb_template($phpbb_root_path, $phpEx, $config, $user, $this->style_resource_locator, new phpbb_template_context, $this->extension_manager);
|
||||
$this->style_provider = new phpbb_style_path_provider();
|
||||
$this->style = new phpbb_style($phpbb_root_path, $phpEx, $config, $user, $this->style_resource_locator, $this->style_provider, $this->template);
|
||||
$this->style->set_custom_style('silver', array($this->template_path), $style_names, '');
|
||||
}
|
||||
}
|
@@ -132,6 +132,20 @@ class phpbb_template_template_test extends phpbb_template_template_test_case
|
||||
array(),
|
||||
"xyz\nabc\nabc\nbar\nbar\nabc",
|
||||
),
|
||||
array(
|
||||
'define_advanced.html',
|
||||
array(),
|
||||
array('loop' => array(array(), array(), array(), array(), array(), array(), array()), 'test' => array(array()), 'test.deep' => array(array()), 'test.deep.defines' => array(array())),
|
||||
array(),
|
||||
"abc\nzxc\ncde\nbcd",
|
||||
),
|
||||
array(
|
||||
'define_unclosed.html',
|
||||
array(),
|
||||
array(),
|
||||
array(),
|
||||
"test",
|
||||
),
|
||||
array(
|
||||
'expressions.html',
|
||||
array(),
|
||||
|
@@ -7,5 +7,3 @@
|
||||
{$VALUE}
|
||||
<!-- UNDEFINE $VALUE -->
|
||||
{$VALUE}
|
||||
<!-- DEFINE $VALUE -->
|
||||
|
||||
|
12
tests/template/templates/define_advanced.html
Normal file
12
tests/template/templates/define_advanced.html
Normal file
@@ -0,0 +1,12 @@
|
||||
<!-- DEFINE $VALUE -->
|
||||
abc
|
||||
<!-- ENDDEFINE -->
|
||||
{$VALUE}
|
||||
<!-- DEFINE $VALUE1 -->
|
||||
bcd
|
||||
<!-- ENDDEFINE -->
|
||||
<!-- DEFINE $VALUE2 -->
|
||||
cde
|
||||
<!-- ENDDEFINE -->
|
||||
<!-- INCLUDE define_include2.html -->
|
||||
{$INCLUDED_VALUE3}
|
11
tests/template/templates/define_include2.html
Normal file
11
tests/template/templates/define_include2.html
Normal file
@@ -0,0 +1,11 @@
|
||||
<!-- DEFINE $INCLUDED_VALUE1 -->
|
||||
zxc
|
||||
<!-- ENDDEFINE -->
|
||||
<!-- DEFINE $INCLUDED_VALUE2 -->
|
||||
qwe
|
||||
<!-- ENDDEFINE -->
|
||||
{$INCLUDED_VALUE1}
|
||||
<!-- DEFINE $INCLUDED_VALUE3 -->
|
||||
{$VALUE2}
|
||||
{$VALUE1}
|
||||
<!-- ENDDEFINE -->
|
2
tests/template/templates/define_unclosed.html
Normal file
2
tests/template/templates/define_unclosed.html
Normal file
@@ -0,0 +1,2 @@
|
||||
<!-- DEFINE $VALUE -->
|
||||
test
|
6
tests/template/templates/variable_spacing.html
Normal file
6
tests/template/templates/variable_spacing.html
Normal file
@@ -0,0 +1,6 @@
|
||||
|{VARIABLE}|
|
||||
{VARIABLE}|{VARIABLE}|
|
||||
|
||||
|{VARIABLE}
|
||||
|
||||
<div class="{VARIABLE}">test</div>
|
@@ -11,6 +11,8 @@ abstract class phpbb_database_test_case extends PHPUnit_Extensions_Database_Test
|
||||
{
|
||||
static private $already_connected;
|
||||
|
||||
private $db_connections;
|
||||
|
||||
protected $test_case_helpers;
|
||||
|
||||
protected $fixture_xml_data;
|
||||
@@ -28,6 +30,22 @@ abstract class phpbb_database_test_case extends PHPUnit_Extensions_Database_Test
|
||||
|
||||
'phpbb_database_test_case' => array('already_connected'),
|
||||
);
|
||||
|
||||
$this->db_connections = array();
|
||||
}
|
||||
|
||||
protected function tearDown()
|
||||
{
|
||||
parent::tearDown();
|
||||
|
||||
// Close all database connections from this test
|
||||
if (!empty($this->db_connections))
|
||||
{
|
||||
foreach ($this->db_connections as $db)
|
||||
{
|
||||
$db->sql_close();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
protected function setUp()
|
||||
@@ -44,6 +62,21 @@ abstract class phpbb_database_test_case extends PHPUnit_Extensions_Database_Test
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Performs synchronisations for a given table/column set on the database
|
||||
*
|
||||
* @param array $table_column_map Information about the tables/columns to synchronise
|
||||
*
|
||||
* @return null
|
||||
*/
|
||||
protected function database_synchronisation($table_column_map)
|
||||
{
|
||||
$config = $this->get_database_config();
|
||||
$manager = $this->create_connection_manager($config);
|
||||
$manager->connect();
|
||||
$manager->database_synchronisation($table_column_map);
|
||||
}
|
||||
|
||||
public function createXMLDataSet($path)
|
||||
{
|
||||
$db_config = $this->get_database_config();
|
||||
@@ -121,6 +154,8 @@ abstract class phpbb_database_test_case extends PHPUnit_Extensions_Database_Test
|
||||
$db = new $config['dbms']();
|
||||
$db->sql_connect($config['dbhost'], $config['dbuser'], $config['dbpasswd'], $config['dbname'], $config['dbport']);
|
||||
|
||||
$this->db_connections[] = $db;
|
||||
|
||||
return $db;
|
||||
}
|
||||
|
||||
|
@@ -142,6 +142,28 @@ class phpbb_database_test_connection_manager
|
||||
}
|
||||
|
||||
$this->pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
|
||||
|
||||
switch ($this->config['dbms'])
|
||||
{
|
||||
case 'phpbb_db_driver_mysql':
|
||||
case 'phpbb_db_driver_mysqli':
|
||||
$this->pdo->exec('SET NAMES utf8');
|
||||
|
||||
/*
|
||||
* The phpBB MySQL drivers set the STRICT_ALL_TABLES and
|
||||
* STRICT_TRANS_TABLES flags/modes, so as a minimum requirement
|
||||
* we want to make sure those are set for the PDO side of the
|
||||
* test suite.
|
||||
*
|
||||
* The TRADITIONAL flag implies STRICT_ALL_TABLES and
|
||||
* STRICT_TRANS_TABLES as well as other useful strictness flags
|
||||
* the phpBB MySQL driver does not set.
|
||||
*/
|
||||
$this->pdo->exec("SET SESSION sql_mode='TRADITIONAL'");
|
||||
break;
|
||||
|
||||
default:
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -457,12 +479,33 @@ class phpbb_database_test_connection_manager
|
||||
* @return null
|
||||
*/
|
||||
public function post_setup_synchronisation($xml_data_set)
|
||||
{
|
||||
$table_names = $xml_data_set->getTableNames();
|
||||
|
||||
$tables = array();
|
||||
foreach ($table_names as $table)
|
||||
{
|
||||
$tables[$table] = $xml_data_set->getTableMetaData($table)->getColumns();
|
||||
}
|
||||
|
||||
$this->database_synchronisation($tables);
|
||||
}
|
||||
|
||||
/**
|
||||
* Performs synchronisations on the database after a fixture has been loaded
|
||||
*
|
||||
* @param array $table_column_map Array of tables/columns to synchronise
|
||||
* array(table1 => array(column1, column2))
|
||||
*
|
||||
* @return null
|
||||
*/
|
||||
public function database_synchronisation($table_column_map)
|
||||
{
|
||||
$this->ensure_connected(__METHOD__);
|
||||
$queries = array();
|
||||
|
||||
// Get escaped versions of the table names used in the fixture
|
||||
$table_names = array_map(array($this->pdo, 'PDO::quote'), $xml_data_set->getTableNames());
|
||||
// Get escaped versions of the table names to synchronise
|
||||
$table_names = array_map(array($this->pdo, 'PDO::quote'), array_keys($table_column_map));
|
||||
|
||||
switch ($this->config['dbms'])
|
||||
{
|
||||
@@ -519,7 +562,7 @@ class phpbb_database_test_connection_manager
|
||||
while ($row = $result->fetch(PDO::FETCH_ASSOC))
|
||||
{
|
||||
// Get the columns used in the fixture for this table
|
||||
$column_names = $xml_data_set->getTableMetaData($row['table_name'])->getColumns();
|
||||
$column_names = $table_column_map[$row['table_name']];
|
||||
|
||||
// Skip sequences that weren't specified in the fixture
|
||||
if (!in_array($row['column_name'], $column_names))
|
||||
|
@@ -12,8 +12,9 @@ require_once __DIR__ . '/../../phpBB/includes/functions_install.php';
|
||||
|
||||
class phpbb_functional_test_case extends phpbb_test_case
|
||||
{
|
||||
protected $client;
|
||||
protected $root_url;
|
||||
static protected $client;
|
||||
static protected $cookieJar;
|
||||
static protected $root_url;
|
||||
|
||||
protected $cache = null;
|
||||
protected $db = null;
|
||||
@@ -39,6 +40,7 @@ class phpbb_functional_test_case extends phpbb_test_case
|
||||
parent::setUpBeforeClass();
|
||||
|
||||
self::$config = phpbb_test_case_helpers::get_test_config();
|
||||
self::$root_url = self::$config['phpbb_functional_url'];
|
||||
|
||||
// Important: this is used both for installation and by
|
||||
// test cases for querying the tables.
|
||||
@@ -64,12 +66,12 @@ class phpbb_functional_test_case extends phpbb_test_case
|
||||
|
||||
$this->bootstrap();
|
||||
|
||||
$this->cookieJar = new CookieJar;
|
||||
$this->client = new Goutte\Client(array(), null, $this->cookieJar);
|
||||
self::$cookieJar = new CookieJar;
|
||||
self::$client = new Goutte\Client(array(), null, self::$cookieJar);
|
||||
// Reset the curl handle because it is 0 at this point and not a valid
|
||||
// resource
|
||||
$this->client->getClient()->getCurlMulti()->reset(true);
|
||||
$this->root_url = self::$config['phpbb_functional_url'];
|
||||
self::$client->getClient()->getCurlMulti()->reset(true);
|
||||
|
||||
// Clear the language array so that things
|
||||
// that were added in other tests are gone
|
||||
$this->lang = array();
|
||||
@@ -77,9 +79,55 @@ class phpbb_functional_test_case extends phpbb_test_case
|
||||
$this->purge_cache();
|
||||
}
|
||||
|
||||
public function request($method, $path)
|
||||
/**
|
||||
* Perform a request to page
|
||||
*
|
||||
* @param string $method HTTP Method
|
||||
* @param string $path Page path, relative from phpBB root path
|
||||
* @param array $form_data An array of form field values
|
||||
* @param bool $assert_response_html Should we perform standard assertions for a normal html page
|
||||
* @return Symfony\Component\DomCrawler\Crawler
|
||||
*/
|
||||
static public function request($method, $path, $form_data = array(), $assert_response_html = true)
|
||||
{
|
||||
return $this->client->request($method, $this->root_url . $path);
|
||||
$crawler = self::$client->request($method, self::$root_url . $path, $form_data);
|
||||
|
||||
if ($assert_response_html)
|
||||
{
|
||||
self::assert_response_html();
|
||||
}
|
||||
|
||||
return $crawler;
|
||||
}
|
||||
|
||||
/**
|
||||
* Submits a form
|
||||
*
|
||||
* @param Symfony\Component\DomCrawler\Form $form A Form instance
|
||||
* @param array $values An array of form field values
|
||||
* @param bool $assert_response_html Should we perform standard assertions for a normal html page
|
||||
* @return Symfony\Component\DomCrawler\Crawler
|
||||
*/
|
||||
static public function submit(Symfony\Component\DomCrawler\Form $form, array $values = array(), $assert_response_html = true)
|
||||
{
|
||||
$crawler = self::$client->submit($form, $values);
|
||||
|
||||
if ($assert_response_html)
|
||||
{
|
||||
self::assert_response_html();
|
||||
}
|
||||
|
||||
return $crawler;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get Client Content
|
||||
*
|
||||
* @return string HTML page
|
||||
*/
|
||||
static public function get_content()
|
||||
{
|
||||
return self::$client->getResponse()->getContent();
|
||||
}
|
||||
|
||||
// bootstrap, called after board is set up
|
||||
@@ -148,11 +196,13 @@ class phpbb_functional_test_case extends phpbb_test_case
|
||||
self::$config['table_prefix'],
|
||||
array()
|
||||
);
|
||||
$container = new phpbb_mock_container_builder();
|
||||
$container->set('migrator', $migrator);
|
||||
|
||||
$extension_manager = new phpbb_extension_manager(
|
||||
new phpbb_mock_container_builder(),
|
||||
$container,
|
||||
$db,
|
||||
$config,
|
||||
$migrator,
|
||||
new phpbb_filesystem(),
|
||||
self::$config['table_prefix'] . 'ext',
|
||||
dirname(__FILE__) . '/',
|
||||
@@ -181,26 +231,73 @@ class phpbb_functional_test_case extends phpbb_test_case
|
||||
}
|
||||
}
|
||||
|
||||
// begin data
|
||||
$data = array();
|
||||
self::$cookieJar = new CookieJar;
|
||||
self::$client = new Goutte\Client(array(), null, self::$cookieJar);
|
||||
// Set client manually so we can increase the cURL timeout
|
||||
self::$client->setClient(new Guzzle\Http\Client('', array(
|
||||
Guzzle\Http\Client::DISABLE_REDIRECTS => true,
|
||||
'curl.options' => array(
|
||||
CURLOPT_TIMEOUT => 120,
|
||||
),
|
||||
)));
|
||||
|
||||
$data = array_merge($data, self::$config);
|
||||
|
||||
$data = array_merge($data, array(
|
||||
'default_lang' => 'en',
|
||||
'admin_name' => 'admin',
|
||||
'admin_pass1' => 'admin',
|
||||
'admin_pass2' => 'admin',
|
||||
'board_email' => 'nobody@example.com',
|
||||
));
|
||||
// Reset the curl handle because it is 0 at this point and not a valid
|
||||
// resource
|
||||
self::$client->getClient()->getCurlMulti()->reset(true);
|
||||
|
||||
$parseURL = parse_url(self::$config['phpbb_functional_url']);
|
||||
|
||||
$data = array_merge($data, array(
|
||||
$crawler = self::request('GET', 'install/index.php?mode=install');
|
||||
self::assertContains('Welcome to Installation', $crawler->filter('#main')->text());
|
||||
$form = $crawler->selectButton('submit')->form();
|
||||
|
||||
$crawler = self::submit($form);
|
||||
self::assertContains('Installation compatibility', $crawler->filter('#main')->text());
|
||||
$form = $crawler->selectButton('submit')->form();
|
||||
|
||||
$crawler = self::submit($form);
|
||||
self::assertContains('Database configuration', $crawler->filter('#main')->text());
|
||||
$form = $crawler->selectButton('submit')->form(array(
|
||||
// Installer uses 3.0-style dbms name
|
||||
'dbms' => str_replace('phpbb_db_driver_', '', self::$config['dbms']),
|
||||
'dbhost' => self::$config['dbhost'],
|
||||
'dbport' => self::$config['dbport'],
|
||||
'dbname' => self::$config['dbname'],
|
||||
'dbuser' => self::$config['dbuser'],
|
||||
'dbpasswd' => self::$config['dbpasswd'],
|
||||
'table_prefix' => self::$config['table_prefix'],
|
||||
));
|
||||
|
||||
$crawler = self::submit($form);
|
||||
self::assertContains('Successful connection', $crawler->filter('#main')->text());
|
||||
$form = $crawler->selectButton('submit')->form();
|
||||
|
||||
$crawler = self::submit($form);
|
||||
self::assertContains('Administrator configuration', $crawler->filter('#main')->text());
|
||||
$form = $crawler->selectButton('submit')->form(array(
|
||||
'default_lang' => 'en',
|
||||
'admin_name' => 'admin',
|
||||
'admin_pass1' => 'adminadmin',
|
||||
'admin_pass2' => 'adminadmin',
|
||||
'board_email' => 'nobody@example.com',
|
||||
));
|
||||
|
||||
$crawler = self::submit($form);
|
||||
self::assertContains('Tests passed', $crawler->filter('#main')->text());
|
||||
$form = $crawler->selectButton('submit')->form();
|
||||
|
||||
$crawler = self::submit($form);
|
||||
self::assertContains('The configuration file has been written.', $crawler->filter('#main')->text());
|
||||
file_put_contents($phpbb_root_path . "config.$phpEx", phpbb_create_config_file_data(self::$config, self::$config['dbms'], true, true));
|
||||
$form = $crawler->selectButton('submit')->form();
|
||||
|
||||
$crawler = self::submit($form);
|
||||
self::assertContains('The settings on this page are only necessary to set if you know that you require something different from the default.', $crawler->filter('#main')->text());
|
||||
$form = $crawler->selectButton('submit')->form(array(
|
||||
'email_enable' => true,
|
||||
'smtp_delivery' => true,
|
||||
'smtp_host' => 'nxdomain.phpbb.com',
|
||||
'smtp_auth' => '',
|
||||
'smtp_auth' => 'PLAIN',
|
||||
'smtp_user' => 'nxuser',
|
||||
'smtp_pass' => 'nxpass',
|
||||
'cookie_secure' => false,
|
||||
@@ -210,50 +307,17 @@ class phpbb_functional_test_case extends phpbb_test_case
|
||||
'server_port' => isset($parseURL['port']) ? (int) $parseURL['port'] : 80,
|
||||
'script_path' => $parseURL['path'],
|
||||
));
|
||||
// end data
|
||||
|
||||
$content = self::do_request('install');
|
||||
self::assertNotSame(false, $content);
|
||||
self::assertContains('Welcome to Installation', $content);
|
||||
$crawler = self::submit($form);
|
||||
self::assertContains('The database tables used by phpBB', $crawler->filter('#main')->text());
|
||||
self::assertContains('have been created and populated with some initial data.', $crawler->filter('#main')->text());
|
||||
$form = $crawler->selectButton('submit')->form();
|
||||
|
||||
// Installer uses 3.0-style dbms name
|
||||
$data['dbms'] = str_replace('phpbb_db_driver_', '', $data['dbms']);
|
||||
$content = self::do_request('create_table', $data);
|
||||
self::assertNotSame(false, $content);
|
||||
self::assertContains('The database tables used by phpBB', $content);
|
||||
// 3.0 or 3.1
|
||||
self::assertContains('have been created and populated with some initial data.', $content);
|
||||
|
||||
$content = self::do_request('config_file', $data);
|
||||
self::assertNotSame(false, $content);
|
||||
self::assertContains('Configuration file', $content);
|
||||
file_put_contents($phpbb_root_path . "config.$phpEx", phpbb_create_config_file_data($data, self::$config['dbms'], true, true));
|
||||
|
||||
$content = self::do_request('final', $data);
|
||||
self::assertNotSame(false, $content);
|
||||
self::assertContains('You have successfully installed', $content);
|
||||
$crawler = self::submit($form);
|
||||
self::assertContains('You have successfully installed', $crawler->text());
|
||||
copy($phpbb_root_path . "config.$phpEx", $phpbb_root_path . "config_test.$phpEx");
|
||||
}
|
||||
|
||||
static private function do_request($sub, $post_data = null)
|
||||
{
|
||||
$context = null;
|
||||
|
||||
if ($post_data)
|
||||
{
|
||||
$context = stream_context_create(array(
|
||||
'http' => array(
|
||||
'method' => 'POST',
|
||||
'header' => 'Content-Type: application/x-www-form-urlencoded',
|
||||
'content' => http_build_query($post_data),
|
||||
'ignore_errors' => true,
|
||||
),
|
||||
));
|
||||
}
|
||||
|
||||
return file_get_contents(self::$config['phpbb_functional_url'] . 'install/index.php?mode=install&sub=' . $sub, false, $context);
|
||||
}
|
||||
|
||||
static private function recreate_database($config)
|
||||
{
|
||||
$db_conn_mgr = new phpbb_database_test_connection_manager($config);
|
||||
@@ -312,7 +376,7 @@ class phpbb_functional_test_case extends phpbb_test_case
|
||||
'user_lang' => 'en',
|
||||
'user_timezone' => 0,
|
||||
'user_dateformat' => '',
|
||||
'user_password' => phpbb_hash($username),
|
||||
'user_password' => phpbb_hash($username . $username),
|
||||
);
|
||||
return user_add($user_row);
|
||||
}
|
||||
@@ -359,7 +423,7 @@ class phpbb_functional_test_case extends phpbb_test_case
|
||||
return group_user_del($group_id, false, $usernames, $group_name);
|
||||
}
|
||||
|
||||
protected function add_user_group($group_name, $usernames)
|
||||
protected function add_user_group($group_name, $usernames, $default = false, $leader = false)
|
||||
{
|
||||
global $db, $cache, $auth, $config, $phpbb_dispatcher, $phpbb_log, $phpbb_container, $phpbb_root_path, $phpEx;
|
||||
|
||||
@@ -398,22 +462,21 @@ class phpbb_functional_test_case extends phpbb_test_case
|
||||
$group_id = (int) $db->sql_fetchfield('group_id');
|
||||
$db->sql_freeresult($result);
|
||||
|
||||
return group_user_add($group_id, false, $usernames, $group_name);
|
||||
return group_user_add($group_id, false, $usernames, $group_name, $default, $leader);
|
||||
}
|
||||
|
||||
protected function login($username = 'admin')
|
||||
{
|
||||
$this->add_lang('ucp');
|
||||
|
||||
$crawler = $this->request('GET', 'ucp.php');
|
||||
$crawler = self::request('GET', 'ucp.php');
|
||||
$this->assertContains($this->lang('LOGIN_EXPLAIN_UCP'), $crawler->filter('html')->text());
|
||||
|
||||
$form = $crawler->selectButton($this->lang('LOGIN'))->form();
|
||||
$crawler = $this->client->submit($form, array('username' => $username, 'password' => $username));
|
||||
$this->assert_response_success();
|
||||
$crawler = self::submit($form, array('username' => $username, 'password' => $username . $username));
|
||||
$this->assertContains($this->lang('LOGIN_REDIRECT'), $crawler->filter('html')->text());
|
||||
|
||||
$cookies = $this->cookieJar->all();
|
||||
$cookies = self::$cookieJar->all();
|
||||
|
||||
// The session id is stored in a cookie that ends with _sid - we assume there is only one such cookie
|
||||
foreach ($cookies as $cookie);
|
||||
@@ -425,6 +488,16 @@ class phpbb_functional_test_case extends phpbb_test_case
|
||||
}
|
||||
}
|
||||
|
||||
protected function logout()
|
||||
{
|
||||
$this->add_lang('ucp');
|
||||
|
||||
$crawler = self::request('GET', 'ucp.php?sid=' . $this->sid . '&mode=logout');
|
||||
$this->assertContains($this->lang('LOGOUT_REDIRECT'), $crawler->filter('#message')->text());
|
||||
unset($this->sid);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Login to the ACP
|
||||
* You must run login() before calling this.
|
||||
@@ -440,7 +513,7 @@ class phpbb_functional_test_case extends phpbb_test_case
|
||||
return;
|
||||
}
|
||||
|
||||
$crawler = $this->request('GET', 'adm/index.php?sid=' . $this->sid);
|
||||
$crawler = self::request('GET', 'adm/index.php?sid=' . $this->sid);
|
||||
$this->assertContains($this->lang('LOGIN_ADMIN_CONFIRM'), $crawler->filter('html')->text());
|
||||
|
||||
$form = $crawler->selectButton($this->lang('LOGIN'))->form();
|
||||
@@ -449,11 +522,10 @@ class phpbb_functional_test_case extends phpbb_test_case
|
||||
{
|
||||
if (strpos($field, 'password_') === 0)
|
||||
{
|
||||
$crawler = $this->client->submit($form, array('username' => $username, $field => $username));
|
||||
$this->assert_response_success();
|
||||
$crawler = self::submit($form, array('username' => $username, $field => $username . $username));
|
||||
$this->assertContains($this->lang('LOGIN_ADMIN_SUCCESS'), $crawler->filter('html')->text());
|
||||
|
||||
$cookies = $this->cookieJar->all();
|
||||
$cookies = self::$cookieJar->all();
|
||||
|
||||
// The session id is stored in a cookie that ends with _sid - we assume there is only one such cookie
|
||||
foreach ($cookies as $cookie);
|
||||
@@ -518,22 +590,38 @@ class phpbb_functional_test_case extends phpbb_test_case
|
||||
$this->assertContains(html_entity_decode($this->lang($needle), ENT_QUOTES), $haystack, $message);
|
||||
}
|
||||
|
||||
/*
|
||||
* Perform some basic assertions for the page
|
||||
*
|
||||
* Checks for debug/error output before the actual page content and the status code
|
||||
*
|
||||
* @param mixed $status_code Expected status code, false to disable check
|
||||
* @return null
|
||||
*/
|
||||
static public function assert_response_html($status_code = 200)
|
||||
{
|
||||
if ($status_code !== false)
|
||||
{
|
||||
self::assert_response_status_code($status_code);
|
||||
}
|
||||
|
||||
// Any output before the doc type means there was an error
|
||||
$content = self::$client->getResponse()->getContent();
|
||||
self::assertStringStartsWith('<!DOCTYPE', trim($content), 'Output found before DOCTYPE specification.');
|
||||
}
|
||||
|
||||
/**
|
||||
* Heuristic function to check that the response is success.
|
||||
*
|
||||
* When php decides to die with a fatal error, it still sends 200 OK
|
||||
* status code. This assertion tries to catch that.
|
||||
*
|
||||
* @param int $status_code Expected status code
|
||||
* @return null
|
||||
*/
|
||||
public function assert_response_success()
|
||||
static public function assert_response_status_code($status_code = 200)
|
||||
{
|
||||
$this->assertEquals(200, $this->client->getResponse()->getStatus());
|
||||
$content = $this->client->getResponse()->getContent();
|
||||
$this->assertNotContains('Fatal error:', $content);
|
||||
$this->assertNotContains('Notice:', $content);
|
||||
$this->assertNotContains('Warning:', $content);
|
||||
$this->assertNotContains('[phpBB Debug]', $content);
|
||||
self::assertEquals($status_code, self::$client->getResponse()->getStatus());
|
||||
}
|
||||
|
||||
public function assert_filter($crawler, $expr, $msg = null)
|
||||
|
@@ -18,6 +18,58 @@ class phpbb_test_case_helpers
|
||||
$this->test_case = $test_case;
|
||||
}
|
||||
|
||||
private $copied_files = array();
|
||||
|
||||
/**
|
||||
* This should only be called once before the tests are run.
|
||||
* This is used to copy the fixtures to the phpBB install
|
||||
*/
|
||||
public function copy_ext_fixtures($fixtures_dir, $fixtures)
|
||||
{
|
||||
global $phpbb_root_path;
|
||||
|
||||
$this->copied_files = array();
|
||||
|
||||
if (file_exists($phpbb_root_path . 'ext/'))
|
||||
{
|
||||
// First, move any extensions setup on the board to a temp directory
|
||||
$this->copied_files = $this->copy_dir($phpbb_root_path . 'ext/', $phpbb_root_path . 'store/temp_ext/');
|
||||
|
||||
// Then empty the ext/ directory on the board (for accurate test cases)
|
||||
$this->empty_dir($phpbb_root_path . 'ext/');
|
||||
}
|
||||
|
||||
// Copy our ext/ files from the test case to the board
|
||||
foreach ($fixtures as $fixture)
|
||||
{
|
||||
$this->copied_files = array_merge($this->copied_files, $this->copy_dir($fixtures_dir . $fixture, $phpbb_root_path . 'ext/' . $fixture));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* This should only be called once after the tests are run.
|
||||
* This is used to remove the fixtures from the phpBB install
|
||||
*/
|
||||
public function restore_original_ext_dir()
|
||||
{
|
||||
global $phpbb_root_path;
|
||||
|
||||
// Copy back the board installed extensions from the temp directory
|
||||
if (file_exists($phpbb_root_path . 'store/temp_ext/'))
|
||||
{
|
||||
$this->copy_dir($phpbb_root_path . 'store/temp_ext/', $phpbb_root_path . 'ext/');
|
||||
}
|
||||
|
||||
// Remove all of the files we copied around (from board ext -> temp_ext, from test ext -> board ext)
|
||||
$this->remove_files($this->copied_files);
|
||||
$this->copied_files = array();
|
||||
|
||||
if (file_exists($phpbb_root_path . 'store/temp_ext/'))
|
||||
{
|
||||
$this->empty_dir($phpbb_root_path . 'store/temp_ext/');
|
||||
}
|
||||
}
|
||||
|
||||
public function setExpectedTriggerError($errno, $message = '')
|
||||
{
|
||||
$exceptionName = '';
|
||||
|
13
tests/tree/fixtures/phpbb_forums.xml
Normal file
13
tests/tree/fixtures/phpbb_forums.xml
Normal file
@@ -0,0 +1,13 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<dataset>
|
||||
<table name="phpbb_forums">
|
||||
<column>forum_id</column>
|
||||
<column>parent_id</column>
|
||||
<column>left_id</column>
|
||||
<column>right_id</column>
|
||||
<column>forum_parents</column>
|
||||
<column>forum_name</column>
|
||||
<column>forum_desc</column>
|
||||
<column>forum_rules</column>
|
||||
</table>
|
||||
</dataset>
|
115
tests/tree/nestedset_forum_base.php
Normal file
115
tests/tree/nestedset_forum_base.php
Normal file
@@ -0,0 +1,115 @@
|
||||
<?php
|
||||
/**
|
||||
*
|
||||
* @package tree
|
||||
* @copyright (c) 2013 phpBB Group
|
||||
* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
|
||||
*
|
||||
*/
|
||||
|
||||
class phpbb_tests_tree_nestedset_forum_base extends phpbb_database_test_case
|
||||
{
|
||||
public function getDataSet()
|
||||
{
|
||||
return $this->createXMLDataSet(dirname(__FILE__) . '/fixtures/phpbb_forums.xml');
|
||||
}
|
||||
|
||||
protected $forum_data = array(
|
||||
// \__/
|
||||
1 => array('forum_id' => 1, 'parent_id' => 0, 'user_id' => 0, 'left_id' => 1, 'right_id' => 6, 'forum_parents' => 'a:0:{}'),
|
||||
2 => array('forum_id' => 2, 'parent_id' => 1, 'user_id' => 0, 'left_id' => 2, 'right_id' => 3, 'forum_parents' => 'a:0:{}'),
|
||||
3 => array('forum_id' => 3, 'parent_id' => 1, 'user_id' => 0, 'left_id' => 4, 'right_id' => 5, 'forum_parents' => 'a:0:{}'),
|
||||
|
||||
// \ /
|
||||
// \/
|
||||
4 => array('forum_id' => 4, 'parent_id' => 0, 'user_id' => 0, 'left_id' => 7, 'right_id' => 12, 'forum_parents' => 'a:0:{}'),
|
||||
5 => array('forum_id' => 5, 'parent_id' => 4, 'user_id' => 0, 'left_id' => 8, 'right_id' => 11, 'forum_parents' => 'a:0:{}'),
|
||||
6 => array('forum_id' => 6, 'parent_id' => 5, 'user_id' => 0, 'left_id' => 9, 'right_id' => 10, 'forum_parents' => 'a:0:{}'),
|
||||
|
||||
// \_ _/
|
||||
// \/
|
||||
7 => array('forum_id' => 7, 'parent_id' => 0, 'user_id' => 0, 'left_id' => 13, 'right_id' => 22, 'forum_parents' => 'a:0:{}'),
|
||||
8 => array('forum_id' => 8, 'parent_id' => 7, 'user_id' => 0, 'left_id' => 14, 'right_id' => 15, 'forum_parents' => 'a:0:{}'),
|
||||
9 => array('forum_id' => 9, 'parent_id' => 7, 'user_id' => 0, 'left_id' => 16, 'right_id' => 19, 'forum_parents' => 'a:0:{}'),
|
||||
10 => array('forum_id' => 10, 'parent_id' => 9, 'user_id' => 0, 'left_id' => 17, 'right_id' => 18, 'forum_parents' => 'a:0:{}'),
|
||||
11 => array('forum_id' => 11, 'parent_id' => 7, 'user_id' => 0, 'left_id' => 20, 'right_id' => 21, 'forum_parents' => 'a:0:{}'),
|
||||
|
||||
// Non-existent forums
|
||||
0 => array('forum_id' => 0, 'parent_id' => 0, 'user_id' => 0, 'left_id' => 0, 'right_id' => 0, 'forum_parents' => 'a:0:{}'),
|
||||
200 => array('forum_id' => 200, 'parent_id' => 0, 'user_id' => 0, 'left_id' => 0, 'right_id' => 0, 'forum_parents' => 'a:0:{}'),
|
||||
);
|
||||
|
||||
protected $set,
|
||||
$config,
|
||||
$lock,
|
||||
$db;
|
||||
|
||||
public function setUp()
|
||||
{
|
||||
parent::setUp();
|
||||
|
||||
$this->db = $this->new_dbal();
|
||||
|
||||
global $config;
|
||||
|
||||
$config = $this->config = new phpbb_config(array('nestedset_forum_lock' => 0));
|
||||
set_config(null, null, null, $this->config);
|
||||
|
||||
$this->lock = new phpbb_lock_db('nestedset_forum_lock', $this->config, $this->db);
|
||||
$this->set = new phpbb_tree_nestedset_forum($this->db, $this->lock, 'phpbb_forums');
|
||||
|
||||
$this->set_up_forums();
|
||||
}
|
||||
|
||||
protected function set_up_forums()
|
||||
{
|
||||
static $forums;
|
||||
|
||||
if (empty($forums))
|
||||
{
|
||||
$this->create_forum('Parent with two flat children');
|
||||
$this->create_forum('Flat child #1', 1);
|
||||
$this->create_forum('Flat child #2', 1);
|
||||
|
||||
$this->create_forum('Parent with two nested children');
|
||||
$this->create_forum('Nested child #1', 4);
|
||||
$this->create_forum('Nested child #2', 5);
|
||||
|
||||
$this->create_forum('Parent with flat and nested children');
|
||||
$this->create_forum('Mixed child #1', 7);
|
||||
$this->create_forum('Mixed child #2', 7);
|
||||
$this->create_forum('Nested child #1 of Mixed child #2', 9);
|
||||
$this->create_forum('Mixed child #3', 7);
|
||||
|
||||
// Updating forum_parents column here so it's not empty
|
||||
// This is required, so we can see whether the methods
|
||||
// correctly clear the values.
|
||||
$sql = "UPDATE phpbb_forums
|
||||
SET forum_parents = 'a:0:{}'";
|
||||
$this->db->sql_query($sql);
|
||||
|
||||
// Copy the forums into a static array, so we can reuse the list later
|
||||
$sql = 'SELECT *
|
||||
FROM phpbb_forums';
|
||||
$result = $this->db->sql_query($sql);
|
||||
$forums = $this->db->sql_fetchrowset($result);
|
||||
$this->db->sql_freeresult($result);
|
||||
}
|
||||
else
|
||||
{
|
||||
$buffer = new phpbb_db_sql_insert_buffer($this->db, 'phpbb_forums');
|
||||
$buffer->insert_all($forums);
|
||||
$buffer->flush();
|
||||
|
||||
$this->database_synchronisation(array(
|
||||
'phpbb_forums' => array('forum_id'),
|
||||
));
|
||||
}
|
||||
}
|
||||
|
||||
protected function create_forum($name, $parent_id = 0)
|
||||
{
|
||||
$forum = $this->set->insert(array('forum_name' => $name, 'forum_desc' => '', 'forum_rules' => ''));
|
||||
$this->set->change_parent($forum['forum_id'], $parent_id);
|
||||
}
|
||||
}
|
119
tests/tree/nestedset_forum_get_data_test.php
Normal file
119
tests/tree/nestedset_forum_get_data_test.php
Normal file
@@ -0,0 +1,119 @@
|
||||
<?php
|
||||
/**
|
||||
*
|
||||
* @package tree
|
||||
* @copyright (c) 2013 phpBB Group
|
||||
* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
|
||||
*
|
||||
*/
|
||||
|
||||
require_once dirname(__FILE__) . '/nestedset_forum_base.php';
|
||||
|
||||
class phpbb_tests_tree_nestedset_forum_get_data_test extends phpbb_tests_tree_nestedset_forum_base
|
||||
{
|
||||
public function get_path_and_subtree_data_data()
|
||||
{
|
||||
return array(
|
||||
array(1, true, true, array(1, 2, 3)),
|
||||
array(1, true, false, array(2, 3)),
|
||||
array(1, false, true, array(3, 2, 1)),
|
||||
array(1, false, false, array(3, 2)),
|
||||
|
||||
array(2, true, true, array(1, 2)),
|
||||
array(2, true, false, array(1)),
|
||||
array(2, false, true, array(2, 1)),
|
||||
array(2, false, false, array(1)),
|
||||
|
||||
array(5, true, true, array(4, 5, 6)),
|
||||
array(5, true, false, array(4, 6)),
|
||||
array(5, false, true, array(6, 5, 4)),
|
||||
array(5, false, false, array(6, 4)),
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider get_path_and_subtree_data_data
|
||||
*/
|
||||
public function test_get_path_and_subtree_data($forum_id, $order_asc, $include_item, $expected)
|
||||
{
|
||||
$this->assertEquals($expected, array_keys($this->set->get_path_and_subtree_data($forum_id, $order_asc, $include_item)));
|
||||
}
|
||||
|
||||
public function get_path_data_data()
|
||||
{
|
||||
return array(
|
||||
array(1, true, true, array(1)),
|
||||
array(1, true, false, array()),
|
||||
array(1, false, true, array(1)),
|
||||
array(1, false, false, array()),
|
||||
|
||||
array(2, true, true, array(1, 2)),
|
||||
array(2, true, false, array(1)),
|
||||
array(2, false, true, array(2, 1)),
|
||||
array(2, false, false, array(1)),
|
||||
|
||||
array(5, true, true, array(4, 5)),
|
||||
array(5, true, false, array(4)),
|
||||
array(5, false, true, array(5, 4)),
|
||||
array(5, false, false, array(4)),
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider get_path_data_data
|
||||
*/
|
||||
public function test_get_path_data($forum_id, $order_asc, $include_item, $expected)
|
||||
{
|
||||
$this->assertEquals($expected, array_keys($this->set->get_path_data($forum_id, $order_asc, $include_item)));
|
||||
}
|
||||
|
||||
public function get_subtree_data_data()
|
||||
{
|
||||
return array(
|
||||
array(1, true, true, array(1, 2, 3)),
|
||||
array(1, true, false, array(2, 3)),
|
||||
array(1, false, true, array(3, 2, 1)),
|
||||
array(1, false, false, array(3, 2)),
|
||||
|
||||
array(2, true, true, array(2)),
|
||||
array(2, true, false, array()),
|
||||
array(2, false, true, array(2)),
|
||||
array(2, false, false, array()),
|
||||
|
||||
array(5, true, true, array(5, 6)),
|
||||
array(5, true, false, array(6)),
|
||||
array(5, false, true, array(6, 5)),
|
||||
array(5, false, false, array(6)),
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider get_subtree_data_data
|
||||
*/
|
||||
public function test_get_subtree_data($forum_id, $order_asc, $include_item, $expected)
|
||||
{
|
||||
$this->assertEquals($expected, array_keys($this->set->get_subtree_data($forum_id, $order_asc, $include_item)));
|
||||
}
|
||||
|
||||
public function get_path_basic_data_data()
|
||||
{
|
||||
return array(
|
||||
array(1, '', array()),
|
||||
array(1, serialize(array()), array()),
|
||||
array(2, '', array(1)),
|
||||
array(2, serialize(array(1 => array())), array(1)),
|
||||
array(10, '', array(7, 9)),
|
||||
array(10, serialize(array(7 => array(), 9 => array())), array(7, 9)),
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider get_path_basic_data_data
|
||||
*/
|
||||
public function test_get_path_basic_data($forum_id, $forum_parents, $expected)
|
||||
{
|
||||
$forum_data = $this->forum_data[$forum_id];
|
||||
$forum_data['forum_parents'] = $forum_parents;
|
||||
$this->assertEquals($expected, array_keys($this->set->get_path_basic_data($forum_data)));
|
||||
}
|
||||
}
|
120
tests/tree/nestedset_forum_insert_delete_test.php
Normal file
120
tests/tree/nestedset_forum_insert_delete_test.php
Normal file
@@ -0,0 +1,120 @@
|
||||
<?php
|
||||
/**
|
||||
*
|
||||
* @package tree
|
||||
* @copyright (c) 2013 phpBB Group
|
||||
* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
|
||||
*
|
||||
*/
|
||||
|
||||
require_once dirname(__FILE__) . '/nestedset_forum_base.php';
|
||||
|
||||
class phpbb_tests_tree_nestedset_forum_add_remove_test extends phpbb_tests_tree_nestedset_forum_base
|
||||
{
|
||||
public function delete_data()
|
||||
{
|
||||
return array(
|
||||
array(1, array(1, 2, 3), array(
|
||||
array('forum_id' => 4, 'parent_id' => 0, 'left_id' => 1, 'right_id' => 6),
|
||||
array('forum_id' => 5, 'parent_id' => 4, 'left_id' => 2, 'right_id' => 5),
|
||||
array('forum_id' => 6, 'parent_id' => 5, 'left_id' => 3, 'right_id' => 4),
|
||||
array('forum_id' => 7, 'parent_id' => 0, 'left_id' => 7, 'right_id' => 16),
|
||||
array('forum_id' => 8, 'parent_id' => 7, 'left_id' => 8, 'right_id' => 9),
|
||||
array('forum_id' => 9, 'parent_id' => 7, 'left_id' => 10, 'right_id' => 13),
|
||||
array('forum_id' => 10, 'parent_id' => 9, 'left_id' => 11, 'right_id' => 12),
|
||||
array('forum_id' => 11, 'parent_id' => 7, 'left_id' => 14, 'right_id' => 15),
|
||||
)),
|
||||
array(2, array(2), array(
|
||||
array('forum_id' => 1, 'parent_id' => 0, 'left_id' => 1, 'right_id' => 4),
|
||||
array('forum_id' => 3, 'parent_id' => 1, 'left_id' => 2, 'right_id' => 3),
|
||||
array('forum_id' => 4, 'parent_id' => 0, 'left_id' => 5, 'right_id' => 10),
|
||||
array('forum_id' => 5, 'parent_id' => 4, 'left_id' => 6, 'right_id' => 9),
|
||||
array('forum_id' => 6, 'parent_id' => 5, 'left_id' => 7, 'right_id' => 8),
|
||||
array('forum_id' => 7, 'parent_id' => 0, 'left_id' => 11, 'right_id' => 20),
|
||||
array('forum_id' => 8, 'parent_id' => 7, 'left_id' => 12, 'right_id' => 13),
|
||||
array('forum_id' => 9, 'parent_id' => 7, 'left_id' => 14, 'right_id' => 17),
|
||||
array('forum_id' => 10, 'parent_id' => 9, 'left_id' => 15, 'right_id' => 16),
|
||||
array('forum_id' => 11, 'parent_id' => 7, 'left_id' => 18, 'right_id' => 19),
|
||||
)),
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider delete_data
|
||||
*/
|
||||
public function test_delete($forum_id, $expected_deleted, $expected)
|
||||
{
|
||||
$this->assertEquals($expected_deleted, $this->set->delete($forum_id));
|
||||
|
||||
$result = $this->db->sql_query("SELECT forum_id, parent_id, left_id, right_id
|
||||
FROM phpbb_forums
|
||||
ORDER BY left_id, forum_id ASC");
|
||||
$this->assertEquals($expected, $this->db->sql_fetchrowset($result));
|
||||
}
|
||||
|
||||
public function delete_throws_data()
|
||||
{
|
||||
return array(
|
||||
array('Not an item', 0),
|
||||
array('Item does not exist', 200),
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider delete_throws_data
|
||||
*
|
||||
* @expectedException OutOfBoundsException
|
||||
* @expectedExceptionMessage FORUM_NESTEDSET_INVALID_ITEM
|
||||
*/
|
||||
public function test_delete_throws($explain, $forum_id)
|
||||
{
|
||||
$this->set->delete($forum_id);
|
||||
}
|
||||
|
||||
public function insert_data()
|
||||
{
|
||||
return array(
|
||||
array(array(
|
||||
'forum_desc' => '',
|
||||
'forum_rules' => '',
|
||||
'forum_id' => 12,
|
||||
'parent_id' => 0,
|
||||
'left_id' => 23,
|
||||
'right_id' => 24,
|
||||
'forum_parents' => '',
|
||||
), array(
|
||||
array('forum_id' => 1, 'parent_id' => 0, 'left_id' => 1, 'right_id' => 6),
|
||||
array('forum_id' => 2, 'parent_id' => 1, 'left_id' => 2, 'right_id' => 3),
|
||||
array('forum_id' => 3, 'parent_id' => 1, 'left_id' => 4, 'right_id' => 5),
|
||||
|
||||
array('forum_id' => 4, 'parent_id' => 0, 'left_id' => 7, 'right_id' => 12),
|
||||
array('forum_id' => 5, 'parent_id' => 4, 'left_id' => 8, 'right_id' => 11),
|
||||
array('forum_id' => 6, 'parent_id' => 5, 'left_id' => 9, 'right_id' => 10),
|
||||
|
||||
array('forum_id' => 7, 'parent_id' => 0, 'left_id' => 13, 'right_id' => 22),
|
||||
array('forum_id' => 8, 'parent_id' => 7, 'left_id' => 14, 'right_id' => 15),
|
||||
array('forum_id' => 9, 'parent_id' => 7, 'left_id' => 16, 'right_id' => 19),
|
||||
array('forum_id' => 10, 'parent_id' => 9, 'left_id' => 17, 'right_id' => 18),
|
||||
array('forum_id' => 11, 'parent_id' => 7, 'left_id' => 20, 'right_id' => 21),
|
||||
|
||||
array('forum_id' => 12, 'parent_id' => 0, 'left_id' => 23, 'right_id' => 24),
|
||||
)),
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider insert_data
|
||||
*/
|
||||
public function test_insert($expected_data, $expected)
|
||||
{
|
||||
$this->assertEquals($expected_data, $this->set->insert(array(
|
||||
'forum_desc' => '',
|
||||
'forum_rules' => '',
|
||||
)));
|
||||
|
||||
$result = $this->db->sql_query('SELECT forum_id, parent_id, left_id, right_id
|
||||
FROM phpbb_forums
|
||||
ORDER BY left_id, forum_id ASC');
|
||||
$this->assertEquals($expected, $this->db->sql_fetchrowset($result));
|
||||
}
|
||||
}
|
569
tests/tree/nestedset_forum_move_test.php
Normal file
569
tests/tree/nestedset_forum_move_test.php
Normal file
@@ -0,0 +1,569 @@
|
||||
<?php
|
||||
/**
|
||||
*
|
||||
* @package tree
|
||||
* @copyright (c) 2013 phpBB Group
|
||||
* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
|
||||
*
|
||||
*/
|
||||
|
||||
require_once dirname(__FILE__) . '/nestedset_forum_base.php';
|
||||
|
||||
class phpbb_tests_tree_nestedset_forum_move_test extends phpbb_tests_tree_nestedset_forum_base
|
||||
{
|
||||
public function move_data()
|
||||
{
|
||||
return array(
|
||||
array('Move first item up',
|
||||
1, 1, false, array(
|
||||
array('forum_id' => 1, 'parent_id' => 0, 'left_id' => 1, 'right_id' => 6),
|
||||
array('forum_id' => 2, 'parent_id' => 1, 'left_id' => 2, 'right_id' => 3),
|
||||
array('forum_id' => 3, 'parent_id' => 1, 'left_id' => 4, 'right_id' => 5),
|
||||
array('forum_id' => 4, 'parent_id' => 0, 'left_id' => 7, 'right_id' => 12),
|
||||
array('forum_id' => 5, 'parent_id' => 4, 'left_id' => 8, 'right_id' => 11),
|
||||
array('forum_id' => 6, 'parent_id' => 5, 'left_id' => 9, 'right_id' => 10),
|
||||
array('forum_id' => 7, 'parent_id' => 0, 'left_id' => 13, 'right_id' => 22),
|
||||
array('forum_id' => 8, 'parent_id' => 7, 'left_id' => 14, 'right_id' => 15),
|
||||
array('forum_id' => 9, 'parent_id' => 7, 'left_id' => 16, 'right_id' => 19),
|
||||
array('forum_id' => 10, 'parent_id' => 9, 'left_id' => 17, 'right_id' => 18),
|
||||
array('forum_id' => 11, 'parent_id' => 7, 'left_id' => 20, 'right_id' => 21),
|
||||
)),
|
||||
array('Move last item down',
|
||||
7, -1, false, array(
|
||||
array('forum_id' => 1, 'parent_id' => 0, 'left_id' => 1, 'right_id' => 6),
|
||||
array('forum_id' => 2, 'parent_id' => 1, 'left_id' => 2, 'right_id' => 3),
|
||||
array('forum_id' => 3, 'parent_id' => 1, 'left_id' => 4, 'right_id' => 5),
|
||||
array('forum_id' => 4, 'parent_id' => 0, 'left_id' => 7, 'right_id' => 12),
|
||||
array('forum_id' => 5, 'parent_id' => 4, 'left_id' => 8, 'right_id' => 11),
|
||||
array('forum_id' => 6, 'parent_id' => 5, 'left_id' => 9, 'right_id' => 10),
|
||||
array('forum_id' => 7, 'parent_id' => 0, 'left_id' => 13, 'right_id' => 22),
|
||||
array('forum_id' => 8, 'parent_id' => 7, 'left_id' => 14, 'right_id' => 15),
|
||||
array('forum_id' => 9, 'parent_id' => 7, 'left_id' => 16, 'right_id' => 19),
|
||||
array('forum_id' => 10, 'parent_id' => 9, 'left_id' => 17, 'right_id' => 18),
|
||||
array('forum_id' => 11, 'parent_id' => 7, 'left_id' => 20, 'right_id' => 21),
|
||||
)),
|
||||
array('Move first item down',
|
||||
1, -1, true, array(
|
||||
array('forum_id' => 4, 'parent_id' => 0, 'left_id' => 1, 'right_id' => 6),
|
||||
array('forum_id' => 5, 'parent_id' => 4, 'left_id' => 2, 'right_id' => 5),
|
||||
array('forum_id' => 6, 'parent_id' => 5, 'left_id' => 3, 'right_id' => 4),
|
||||
array('forum_id' => 1, 'parent_id' => 0, 'left_id' => 7, 'right_id' => 12),
|
||||
array('forum_id' => 2, 'parent_id' => 1, 'left_id' => 8, 'right_id' => 9),
|
||||
array('forum_id' => 3, 'parent_id' => 1, 'left_id' => 10, 'right_id' => 11),
|
||||
array('forum_id' => 7, 'parent_id' => 0, 'left_id' => 13, 'right_id' => 22),
|
||||
array('forum_id' => 8, 'parent_id' => 7, 'left_id' => 14, 'right_id' => 15),
|
||||
array('forum_id' => 9, 'parent_id' => 7, 'left_id' => 16, 'right_id' => 19),
|
||||
array('forum_id' => 10, 'parent_id' => 9, 'left_id' => 17, 'right_id' => 18),
|
||||
array('forum_id' => 11, 'parent_id' => 7, 'left_id' => 20, 'right_id' => 21),
|
||||
)),
|
||||
array('Move second item up',
|
||||
4, 1, true, array(
|
||||
array('forum_id' => 4, 'parent_id' => 0, 'left_id' => 1, 'right_id' => 6),
|
||||
array('forum_id' => 5, 'parent_id' => 4, 'left_id' => 2, 'right_id' => 5),
|
||||
array('forum_id' => 6, 'parent_id' => 5, 'left_id' => 3, 'right_id' => 4),
|
||||
array('forum_id' => 1, 'parent_id' => 0, 'left_id' => 7, 'right_id' => 12),
|
||||
array('forum_id' => 2, 'parent_id' => 1, 'left_id' => 8, 'right_id' => 9),
|
||||
array('forum_id' => 3, 'parent_id' => 1, 'left_id' => 10, 'right_id' => 11),
|
||||
array('forum_id' => 7, 'parent_id' => 0, 'left_id' => 13, 'right_id' => 22),
|
||||
array('forum_id' => 8, 'parent_id' => 7, 'left_id' => 14, 'right_id' => 15),
|
||||
array('forum_id' => 9, 'parent_id' => 7, 'left_id' => 16, 'right_id' => 19),
|
||||
array('forum_id' => 10, 'parent_id' => 9, 'left_id' => 17, 'right_id' => 18),
|
||||
array('forum_id' => 11, 'parent_id' => 7, 'left_id' => 20, 'right_id' => 21),
|
||||
)),
|
||||
array('Move last item up',
|
||||
7, 1, true, array(
|
||||
array('forum_id' => 1, 'parent_id' => 0, 'left_id' => 1, 'right_id' => 6),
|
||||
array('forum_id' => 2, 'parent_id' => 1, 'left_id' => 2, 'right_id' => 3),
|
||||
array('forum_id' => 3, 'parent_id' => 1, 'left_id' => 4, 'right_id' => 5),
|
||||
array('forum_id' => 7, 'parent_id' => 0, 'left_id' => 7, 'right_id' => 16),
|
||||
array('forum_id' => 8, 'parent_id' => 7, 'left_id' => 8, 'right_id' => 9),
|
||||
array('forum_id' => 9, 'parent_id' => 7, 'left_id' => 10, 'right_id' => 13),
|
||||
array('forum_id' => 10, 'parent_id' => 9, 'left_id' => 11, 'right_id' => 12),
|
||||
array('forum_id' => 11, 'parent_id' => 7, 'left_id' => 14, 'right_id' => 15),
|
||||
array('forum_id' => 4, 'parent_id' => 0, 'left_id' => 17, 'right_id' => 22),
|
||||
array('forum_id' => 5, 'parent_id' => 4, 'left_id' => 18, 'right_id' => 21),
|
||||
array('forum_id' => 6, 'parent_id' => 5, 'left_id' => 19, 'right_id' => 20),
|
||||
)),
|
||||
array('Move last item up by 2',
|
||||
7, 2, true, array(
|
||||
array('forum_id' => 7, 'parent_id' => 0, 'left_id' => 1, 'right_id' => 10),
|
||||
array('forum_id' => 8, 'parent_id' => 7, 'left_id' => 2, 'right_id' => 3),
|
||||
array('forum_id' => 9, 'parent_id' => 7, 'left_id' => 4, 'right_id' => 7),
|
||||
array('forum_id' => 10, 'parent_id' => 9, 'left_id' => 5, 'right_id' => 6),
|
||||
array('forum_id' => 11, 'parent_id' => 7, 'left_id' => 8, 'right_id' => 9),
|
||||
array('forum_id' => 1, 'parent_id' => 0, 'left_id' => 11, 'right_id' => 16),
|
||||
array('forum_id' => 2, 'parent_id' => 1, 'left_id' => 12, 'right_id' => 13),
|
||||
array('forum_id' => 3, 'parent_id' => 1, 'left_id' => 14, 'right_id' => 15),
|
||||
array('forum_id' => 4, 'parent_id' => 0, 'left_id' => 17, 'right_id' => 22),
|
||||
array('forum_id' => 5, 'parent_id' => 4, 'left_id' => 18, 'right_id' => 21),
|
||||
array('forum_id' => 6, 'parent_id' => 5, 'left_id' => 19, 'right_id' => 20),
|
||||
)),
|
||||
array('Move last item up by 100',
|
||||
7, 100, true, array(
|
||||
array('forum_id' => 7, 'parent_id' => 0, 'left_id' => 1, 'right_id' => 10),
|
||||
array('forum_id' => 8, 'parent_id' => 7, 'left_id' => 2, 'right_id' => 3),
|
||||
array('forum_id' => 9, 'parent_id' => 7, 'left_id' => 4, 'right_id' => 7),
|
||||
array('forum_id' => 10, 'parent_id' => 9, 'left_id' => 5, 'right_id' => 6),
|
||||
array('forum_id' => 11, 'parent_id' => 7, 'left_id' => 8, 'right_id' => 9),
|
||||
array('forum_id' => 1, 'parent_id' => 0, 'left_id' => 11, 'right_id' => 16),
|
||||
array('forum_id' => 2, 'parent_id' => 1, 'left_id' => 12, 'right_id' => 13),
|
||||
array('forum_id' => 3, 'parent_id' => 1, 'left_id' => 14, 'right_id' => 15),
|
||||
array('forum_id' => 4, 'parent_id' => 0, 'left_id' => 17, 'right_id' => 22),
|
||||
array('forum_id' => 5, 'parent_id' => 4, 'left_id' => 18, 'right_id' => 21),
|
||||
array('forum_id' => 6, 'parent_id' => 5, 'left_id' => 19, 'right_id' => 20),
|
||||
)),
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider move_data
|
||||
*/
|
||||
public function test_move($explain, $forum_id, $delta, $expected_moved, $expected)
|
||||
{
|
||||
$this->assertEquals($expected_moved, $this->set->move($forum_id, $delta));
|
||||
|
||||
$result = $this->db->sql_query("SELECT forum_id, parent_id, left_id, right_id
|
||||
FROM phpbb_forums
|
||||
ORDER BY left_id, forum_id ASC");
|
||||
$this->assertEquals($expected, $this->db->sql_fetchrowset($result));
|
||||
}
|
||||
|
||||
public function move_down_data()
|
||||
{
|
||||
return array(
|
||||
array('Move last item down',
|
||||
7, false, array(
|
||||
array('forum_id' => 1, 'parent_id' => 0, 'left_id' => 1, 'right_id' => 6),
|
||||
array('forum_id' => 2, 'parent_id' => 1, 'left_id' => 2, 'right_id' => 3),
|
||||
array('forum_id' => 3, 'parent_id' => 1, 'left_id' => 4, 'right_id' => 5),
|
||||
array('forum_id' => 4, 'parent_id' => 0, 'left_id' => 7, 'right_id' => 12),
|
||||
array('forum_id' => 5, 'parent_id' => 4, 'left_id' => 8, 'right_id' => 11),
|
||||
array('forum_id' => 6, 'parent_id' => 5, 'left_id' => 9, 'right_id' => 10),
|
||||
array('forum_id' => 7, 'parent_id' => 0, 'left_id' => 13, 'right_id' => 22),
|
||||
array('forum_id' => 8, 'parent_id' => 7, 'left_id' => 14, 'right_id' => 15),
|
||||
array('forum_id' => 9, 'parent_id' => 7, 'left_id' => 16, 'right_id' => 19),
|
||||
array('forum_id' => 10, 'parent_id' => 9, 'left_id' => 17, 'right_id' => 18),
|
||||
array('forum_id' => 11, 'parent_id' => 7, 'left_id' => 20, 'right_id' => 21),
|
||||
)),
|
||||
array('Move first item down',
|
||||
1, true, array(
|
||||
array('forum_id' => 4, 'parent_id' => 0, 'left_id' => 1, 'right_id' => 6),
|
||||
array('forum_id' => 5, 'parent_id' => 4, 'left_id' => 2, 'right_id' => 5),
|
||||
array('forum_id' => 6, 'parent_id' => 5, 'left_id' => 3, 'right_id' => 4),
|
||||
array('forum_id' => 1, 'parent_id' => 0, 'left_id' => 7, 'right_id' => 12),
|
||||
array('forum_id' => 2, 'parent_id' => 1, 'left_id' => 8, 'right_id' => 9),
|
||||
array('forum_id' => 3, 'parent_id' => 1, 'left_id' => 10, 'right_id' => 11),
|
||||
array('forum_id' => 7, 'parent_id' => 0, 'left_id' => 13, 'right_id' => 22),
|
||||
array('forum_id' => 8, 'parent_id' => 7, 'left_id' => 14, 'right_id' => 15),
|
||||
array('forum_id' => 9, 'parent_id' => 7, 'left_id' => 16, 'right_id' => 19),
|
||||
array('forum_id' => 10, 'parent_id' => 9, 'left_id' => 17, 'right_id' => 18),
|
||||
array('forum_id' => 11, 'parent_id' => 7, 'left_id' => 20, 'right_id' => 21),
|
||||
)),
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider move_down_data
|
||||
*/
|
||||
public function test_move_down($explain, $forum_id, $expected_moved, $expected)
|
||||
{
|
||||
$this->assertEquals($expected_moved, $this->set->move_down($forum_id));
|
||||
|
||||
$result = $this->db->sql_query("SELECT forum_id, parent_id, left_id, right_id
|
||||
FROM phpbb_forums
|
||||
ORDER BY left_id, forum_id ASC");
|
||||
$this->assertEquals($expected, $this->db->sql_fetchrowset($result));
|
||||
}
|
||||
|
||||
public function move_up_data()
|
||||
{
|
||||
return array(
|
||||
array('Move first item up',
|
||||
1, false, array(
|
||||
array('forum_id' => 1, 'parent_id' => 0, 'left_id' => 1, 'right_id' => 6),
|
||||
array('forum_id' => 2, 'parent_id' => 1, 'left_id' => 2, 'right_id' => 3),
|
||||
array('forum_id' => 3, 'parent_id' => 1, 'left_id' => 4, 'right_id' => 5),
|
||||
array('forum_id' => 4, 'parent_id' => 0, 'left_id' => 7, 'right_id' => 12),
|
||||
array('forum_id' => 5, 'parent_id' => 4, 'left_id' => 8, 'right_id' => 11),
|
||||
array('forum_id' => 6, 'parent_id' => 5, 'left_id' => 9, 'right_id' => 10),
|
||||
array('forum_id' => 7, 'parent_id' => 0, 'left_id' => 13, 'right_id' => 22),
|
||||
array('forum_id' => 8, 'parent_id' => 7, 'left_id' => 14, 'right_id' => 15),
|
||||
array('forum_id' => 9, 'parent_id' => 7, 'left_id' => 16, 'right_id' => 19),
|
||||
array('forum_id' => 10, 'parent_id' => 9, 'left_id' => 17, 'right_id' => 18),
|
||||
array('forum_id' => 11, 'parent_id' => 7, 'left_id' => 20, 'right_id' => 21),
|
||||
)),
|
||||
array('Move second item up',
|
||||
4, true, array(
|
||||
array('forum_id' => 4, 'parent_id' => 0, 'left_id' => 1, 'right_id' => 6),
|
||||
array('forum_id' => 5, 'parent_id' => 4, 'left_id' => 2, 'right_id' => 5),
|
||||
array('forum_id' => 6, 'parent_id' => 5, 'left_id' => 3, 'right_id' => 4),
|
||||
array('forum_id' => 1, 'parent_id' => 0, 'left_id' => 7, 'right_id' => 12),
|
||||
array('forum_id' => 2, 'parent_id' => 1, 'left_id' => 8, 'right_id' => 9),
|
||||
array('forum_id' => 3, 'parent_id' => 1, 'left_id' => 10, 'right_id' => 11),
|
||||
array('forum_id' => 7, 'parent_id' => 0, 'left_id' => 13, 'right_id' => 22),
|
||||
array('forum_id' => 8, 'parent_id' => 7, 'left_id' => 14, 'right_id' => 15),
|
||||
array('forum_id' => 9, 'parent_id' => 7, 'left_id' => 16, 'right_id' => 19),
|
||||
array('forum_id' => 10, 'parent_id' => 9, 'left_id' => 17, 'right_id' => 18),
|
||||
array('forum_id' => 11, 'parent_id' => 7, 'left_id' => 20, 'right_id' => 21),
|
||||
)),
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider move_up_data
|
||||
*/
|
||||
public function test_move_up($explain, $forum_id, $expected_moved, $expected)
|
||||
{
|
||||
$this->assertEquals($expected_moved, $this->set->move_up($forum_id));
|
||||
|
||||
$result = $this->db->sql_query("SELECT forum_id, parent_id, left_id, right_id
|
||||
FROM phpbb_forums
|
||||
ORDER BY left_id, forum_id ASC");
|
||||
$this->assertEquals($expected, $this->db->sql_fetchrowset($result));
|
||||
}
|
||||
|
||||
public function move_children_data()
|
||||
{
|
||||
return array(
|
||||
array('Item has no children',
|
||||
2, 1, false, array(
|
||||
array('forum_id' => 1, 'parent_id' => 0, 'left_id' => 1, 'right_id' => 6, 'forum_parents' => 'a:0:{}'),
|
||||
array('forum_id' => 2, 'parent_id' => 1, 'left_id' => 2, 'right_id' => 3, 'forum_parents' => 'a:0:{}'),
|
||||
array('forum_id' => 3, 'parent_id' => 1, 'left_id' => 4, 'right_id' => 5, 'forum_parents' => 'a:0:{}'),
|
||||
|
||||
array('forum_id' => 4, 'parent_id' => 0, 'left_id' => 7, 'right_id' => 12, 'forum_parents' => 'a:0:{}'),
|
||||
array('forum_id' => 5, 'parent_id' => 4, 'left_id' => 8, 'right_id' => 11, 'forum_parents' => 'a:0:{}'),
|
||||
array('forum_id' => 6, 'parent_id' => 5, 'left_id' => 9, 'right_id' => 10, 'forum_parents' => 'a:0:{}'),
|
||||
|
||||
array('forum_id' => 7, 'parent_id' => 0, 'left_id' => 13, 'right_id' => 22, 'forum_parents' => 'a:0:{}'),
|
||||
array('forum_id' => 8, 'parent_id' => 7, 'left_id' => 14, 'right_id' => 15, 'forum_parents' => 'a:0:{}'),
|
||||
array('forum_id' => 9, 'parent_id' => 7, 'left_id' => 16, 'right_id' => 19, 'forum_parents' => 'a:0:{}'),
|
||||
array('forum_id' => 10, 'parent_id' => 9, 'left_id' => 17, 'right_id' => 18, 'forum_parents' => 'a:0:{}'),
|
||||
array('forum_id' => 11, 'parent_id' => 7, 'left_id' => 20, 'right_id' => 21, 'forum_parents' => 'a:0:{}'),
|
||||
)),
|
||||
array('Move to same parent',
|
||||
4, 4, false, array(
|
||||
array('forum_id' => 1, 'parent_id' => 0, 'left_id' => 1, 'right_id' => 6, 'forum_parents' => 'a:0:{}'),
|
||||
array('forum_id' => 2, 'parent_id' => 1, 'left_id' => 2, 'right_id' => 3, 'forum_parents' => 'a:0:{}'),
|
||||
array('forum_id' => 3, 'parent_id' => 1, 'left_id' => 4, 'right_id' => 5, 'forum_parents' => 'a:0:{}'),
|
||||
|
||||
array('forum_id' => 4, 'parent_id' => 0, 'left_id' => 7, 'right_id' => 12, 'forum_parents' => 'a:0:{}'),
|
||||
array('forum_id' => 5, 'parent_id' => 4, 'left_id' => 8, 'right_id' => 11, 'forum_parents' => 'a:0:{}'),
|
||||
array('forum_id' => 6, 'parent_id' => 5, 'left_id' => 9, 'right_id' => 10, 'forum_parents' => 'a:0:{}'),
|
||||
|
||||
array('forum_id' => 7, 'parent_id' => 0, 'left_id' => 13, 'right_id' => 22, 'forum_parents' => 'a:0:{}'),
|
||||
array('forum_id' => 8, 'parent_id' => 7, 'left_id' => 14, 'right_id' => 15, 'forum_parents' => 'a:0:{}'),
|
||||
array('forum_id' => 9, 'parent_id' => 7, 'left_id' => 16, 'right_id' => 19, 'forum_parents' => 'a:0:{}'),
|
||||
array('forum_id' => 10, 'parent_id' => 9, 'left_id' => 17, 'right_id' => 18, 'forum_parents' => 'a:0:{}'),
|
||||
array('forum_id' => 11, 'parent_id' => 7, 'left_id' => 20, 'right_id' => 21, 'forum_parents' => 'a:0:{}'),
|
||||
)),
|
||||
array('Move single child up',
|
||||
5, 1, true, array(
|
||||
array('forum_id' => 1, 'parent_id' => 0, 'left_id' => 1, 'right_id' => 8, 'forum_parents' => 'a:0:{}'),
|
||||
array('forum_id' => 2, 'parent_id' => 1, 'left_id' => 2, 'right_id' => 3, 'forum_parents' => 'a:0:{}'),
|
||||
array('forum_id' => 3, 'parent_id' => 1, 'left_id' => 4, 'right_id' => 5, 'forum_parents' => 'a:0:{}'),
|
||||
array('forum_id' => 6, 'parent_id' => 1, 'left_id' => 6, 'right_id' => 7, 'forum_parents' => ''),
|
||||
|
||||
array('forum_id' => 4, 'parent_id' => 0, 'left_id' => 9, 'right_id' => 12, 'forum_parents' => 'a:0:{}'),
|
||||
array('forum_id' => 5, 'parent_id' => 4, 'left_id' => 10, 'right_id' => 11, 'forum_parents' => 'a:0:{}'),
|
||||
|
||||
array('forum_id' => 7, 'parent_id' => 0, 'left_id' => 13, 'right_id' => 22, 'forum_parents' => 'a:0:{}'),
|
||||
array('forum_id' => 8, 'parent_id' => 7, 'left_id' => 14, 'right_id' => 15, 'forum_parents' => 'a:0:{}'),
|
||||
array('forum_id' => 9, 'parent_id' => 7, 'left_id' => 16, 'right_id' => 19, 'forum_parents' => 'a:0:{}'),
|
||||
array('forum_id' => 10, 'parent_id' => 9, 'left_id' => 17, 'right_id' => 18, 'forum_parents' => 'a:0:{}'),
|
||||
array('forum_id' => 11, 'parent_id' => 7, 'left_id' => 20, 'right_id' => 21, 'forum_parents' => 'a:0:{}'),
|
||||
)),
|
||||
array('Move nested children up',
|
||||
4, 1, true, array(
|
||||
array('forum_id' => 1, 'parent_id' => 0, 'left_id' => 1, 'right_id' => 10, 'forum_parents' => 'a:0:{}'),
|
||||
array('forum_id' => 2, 'parent_id' => 1, 'left_id' => 2, 'right_id' => 3, 'forum_parents' => 'a:0:{}'),
|
||||
array('forum_id' => 3, 'parent_id' => 1, 'left_id' => 4, 'right_id' => 5, 'forum_parents' => 'a:0:{}'),
|
||||
array('forum_id' => 5, 'parent_id' => 1, 'left_id' => 6, 'right_id' => 9, 'forum_parents' => ''),
|
||||
array('forum_id' => 6, 'parent_id' => 5, 'left_id' => 7, 'right_id' => 8, 'forum_parents' => ''),
|
||||
|
||||
array('forum_id' => 4, 'parent_id' => 0, 'left_id' => 11, 'right_id' => 12, 'forum_parents' => 'a:0:{}'),
|
||||
|
||||
array('forum_id' => 7, 'parent_id' => 0, 'left_id' => 13, 'right_id' => 22, 'forum_parents' => 'a:0:{}'),
|
||||
array('forum_id' => 8, 'parent_id' => 7, 'left_id' => 14, 'right_id' => 15, 'forum_parents' => 'a:0:{}'),
|
||||
array('forum_id' => 9, 'parent_id' => 7, 'left_id' => 16, 'right_id' => 19, 'forum_parents' => 'a:0:{}'),
|
||||
array('forum_id' => 10, 'parent_id' => 9, 'left_id' => 17, 'right_id' => 18, 'forum_parents' => 'a:0:{}'),
|
||||
array('forum_id' => 11, 'parent_id' => 7, 'left_id' => 20, 'right_id' => 21, 'forum_parents' => 'a:0:{}'),
|
||||
)),
|
||||
array('Move single child down',
|
||||
5, 7, true, array(
|
||||
array('forum_id' => 1, 'parent_id' => 0, 'left_id' => 1, 'right_id' => 6, 'forum_parents' => 'a:0:{}'),
|
||||
array('forum_id' => 2, 'parent_id' => 1, 'left_id' => 2, 'right_id' => 3, 'forum_parents' => 'a:0:{}'),
|
||||
array('forum_id' => 3, 'parent_id' => 1, 'left_id' => 4, 'right_id' => 5, 'forum_parents' => 'a:0:{}'),
|
||||
|
||||
array('forum_id' => 4, 'parent_id' => 0, 'left_id' => 7, 'right_id' => 10, 'forum_parents' => 'a:0:{}'),
|
||||
array('forum_id' => 5, 'parent_id' => 4, 'left_id' => 8, 'right_id' => 9, 'forum_parents' => 'a:0:{}'),
|
||||
|
||||
array('forum_id' => 7, 'parent_id' => 0, 'left_id' => 11, 'right_id' => 22, 'forum_parents' => 'a:0:{}'),
|
||||
array('forum_id' => 8, 'parent_id' => 7, 'left_id' => 12, 'right_id' => 13, 'forum_parents' => 'a:0:{}'),
|
||||
array('forum_id' => 9, 'parent_id' => 7, 'left_id' => 14, 'right_id' => 17, 'forum_parents' => 'a:0:{}'),
|
||||
array('forum_id' => 10, 'parent_id' => 9, 'left_id' => 15, 'right_id' => 16, 'forum_parents' => 'a:0:{}'),
|
||||
array('forum_id' => 11, 'parent_id' => 7, 'left_id' => 18, 'right_id' => 19, 'forum_parents' => 'a:0:{}'),
|
||||
array('forum_id' => 6, 'parent_id' => 7, 'left_id' => 20, 'right_id' => 21, 'forum_parents' => ''),
|
||||
|
||||
)),
|
||||
array('Move nested children down',
|
||||
4, 7, true, array(
|
||||
array('forum_id' => 1, 'parent_id' => 0, 'left_id' => 1, 'right_id' => 6, 'forum_parents' => 'a:0:{}'),
|
||||
array('forum_id' => 2, 'parent_id' => 1, 'left_id' => 2, 'right_id' => 3, 'forum_parents' => 'a:0:{}'),
|
||||
array('forum_id' => 3, 'parent_id' => 1, 'left_id' => 4, 'right_id' => 5, 'forum_parents' => 'a:0:{}'),
|
||||
|
||||
array('forum_id' => 4, 'parent_id' => 0, 'left_id' => 7, 'right_id' => 8, 'forum_parents' => 'a:0:{}'),
|
||||
|
||||
array('forum_id' => 7, 'parent_id' => 0, 'left_id' => 9, 'right_id' => 22, 'forum_parents' => 'a:0:{}'),
|
||||
array('forum_id' => 8, 'parent_id' => 7, 'left_id' => 10, 'right_id' => 11, 'forum_parents' => 'a:0:{}'),
|
||||
array('forum_id' => 9, 'parent_id' => 7, 'left_id' => 12, 'right_id' => 15, 'forum_parents' => 'a:0:{}'),
|
||||
array('forum_id' => 10, 'parent_id' => 9, 'left_id' => 13, 'right_id' => 14, 'forum_parents' => 'a:0:{}'),
|
||||
array('forum_id' => 11, 'parent_id' => 7, 'left_id' => 16, 'right_id' => 17, 'forum_parents' => 'a:0:{}'),
|
||||
array('forum_id' => 5, 'parent_id' => 7, 'left_id' => 18, 'right_id' => 21, 'forum_parents' => ''),
|
||||
array('forum_id' => 6, 'parent_id' => 5, 'left_id' => 19, 'right_id' => 20, 'forum_parents' => ''),
|
||||
)),
|
||||
array('Move single child to parent 0',
|
||||
5, 0, true, array(
|
||||
array('forum_id' => 1, 'parent_id' => 0, 'left_id' => 1, 'right_id' => 6, 'forum_parents' => 'a:0:{}'),
|
||||
array('forum_id' => 2, 'parent_id' => 1, 'left_id' => 2, 'right_id' => 3, 'forum_parents' => 'a:0:{}'),
|
||||
array('forum_id' => 3, 'parent_id' => 1, 'left_id' => 4, 'right_id' => 5, 'forum_parents' => 'a:0:{}'),
|
||||
|
||||
array('forum_id' => 4, 'parent_id' => 0, 'left_id' => 7, 'right_id' => 10, 'forum_parents' => 'a:0:{}'),
|
||||
array('forum_id' => 5, 'parent_id' => 4, 'left_id' => 8, 'right_id' => 9, 'forum_parents' => 'a:0:{}'),
|
||||
|
||||
array('forum_id' => 7, 'parent_id' => 0, 'left_id' => 11, 'right_id' => 20, 'forum_parents' => 'a:0:{}'),
|
||||
array('forum_id' => 8, 'parent_id' => 7, 'left_id' => 12, 'right_id' => 13, 'forum_parents' => 'a:0:{}'),
|
||||
array('forum_id' => 9, 'parent_id' => 7, 'left_id' => 14, 'right_id' => 17, 'forum_parents' => 'a:0:{}'),
|
||||
array('forum_id' => 10, 'parent_id' => 9, 'left_id' => 15, 'right_id' => 16, 'forum_parents' => 'a:0:{}'),
|
||||
array('forum_id' => 11, 'parent_id' => 7, 'left_id' => 18, 'right_id' => 19, 'forum_parents' => 'a:0:{}'),
|
||||
|
||||
array('forum_id' => 6, 'parent_id' => 0, 'left_id' => 21, 'right_id' => 22, 'forum_parents' => ''),
|
||||
)),
|
||||
array('Move nested children to parent 0',
|
||||
4, 0, true, array(
|
||||
array('forum_id' => 1, 'parent_id' => 0, 'left_id' => 1, 'right_id' => 6, 'forum_parents' => 'a:0:{}'),
|
||||
array('forum_id' => 2, 'parent_id' => 1, 'left_id' => 2, 'right_id' => 3, 'forum_parents' => 'a:0:{}'),
|
||||
array('forum_id' => 3, 'parent_id' => 1, 'left_id' => 4, 'right_id' => 5, 'forum_parents' => 'a:0:{}'),
|
||||
|
||||
array('forum_id' => 4, 'parent_id' => 0, 'left_id' => 7, 'right_id' => 8, 'forum_parents' => 'a:0:{}'),
|
||||
|
||||
array('forum_id' => 7, 'parent_id' => 0, 'left_id' => 9, 'right_id' => 18, 'forum_parents' => 'a:0:{}'),
|
||||
array('forum_id' => 8, 'parent_id' => 7, 'left_id' => 10, 'right_id' => 11, 'forum_parents' => 'a:0:{}'),
|
||||
array('forum_id' => 9, 'parent_id' => 7, 'left_id' => 12, 'right_id' => 15, 'forum_parents' => 'a:0:{}'),
|
||||
array('forum_id' => 10, 'parent_id' => 9, 'left_id' => 13, 'right_id' => 14, 'forum_parents' => 'a:0:{}'),
|
||||
array('forum_id' => 11, 'parent_id' => 7, 'left_id' => 16, 'right_id' => 17, 'forum_parents' => 'a:0:{}'),
|
||||
|
||||
array('forum_id' => 5, 'parent_id' => 0, 'left_id' => 19, 'right_id' => 22, 'forum_parents' => ''),
|
||||
array('forum_id' => 6, 'parent_id' => 5, 'left_id' => 20, 'right_id' => 21, 'forum_parents' => ''),
|
||||
)),
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider move_children_data
|
||||
*/
|
||||
public function test_move_children($explain, $forum_id, $target_id, $expected_moved, $expected)
|
||||
{
|
||||
$this->assertEquals($expected_moved, $this->set->move_children($forum_id, $target_id));
|
||||
|
||||
$result = $this->db->sql_query("SELECT forum_id, parent_id, left_id, right_id, forum_parents
|
||||
FROM phpbb_forums
|
||||
ORDER BY left_id, forum_id ASC");
|
||||
$this->assertEquals($expected, $this->db->sql_fetchrowset($result));
|
||||
}
|
||||
|
||||
public function move_children_throws_item_data()
|
||||
{
|
||||
return array(
|
||||
array('Item 0 does not exist', 0, 5),
|
||||
array('Item does not exist', 200, 5),
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider move_children_throws_item_data
|
||||
*
|
||||
* @expectedException OutOfBoundsException
|
||||
* @expectedExceptionMessage FORUM_NESTEDSET_INVALID_ITEM
|
||||
*/
|
||||
public function test_move_children_throws_item($explain, $forum_id, $target_id)
|
||||
{
|
||||
$this->set->move_children($forum_id, $target_id);
|
||||
}
|
||||
|
||||
public function move_children_throws_parent_data()
|
||||
{
|
||||
return array(
|
||||
array('New parent is child', 4, 5),
|
||||
array('New parent is child 2', 7, 9),
|
||||
array('New parent does not exist', 1, 200),
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider move_children_throws_parent_data
|
||||
*
|
||||
* @expectedException OutOfBoundsException
|
||||
* @expectedExceptionMessage FORUM_NESTEDSET_INVALID_PARENT
|
||||
*/
|
||||
public function test_move_children_throws_parent($explain, $forum_id, $target_id)
|
||||
{
|
||||
$this->set->move_children($forum_id, $target_id);
|
||||
}
|
||||
|
||||
public function change_parent_data()
|
||||
{
|
||||
return array(
|
||||
array('Move single child up',
|
||||
6, 1, true, array(
|
||||
array('forum_id' => 1, 'parent_id' => 0, 'left_id' => 1, 'right_id' => 8, 'forum_parents' => 'a:0:{}'),
|
||||
array('forum_id' => 2, 'parent_id' => 1, 'left_id' => 2, 'right_id' => 3, 'forum_parents' => 'a:0:{}'),
|
||||
array('forum_id' => 3, 'parent_id' => 1, 'left_id' => 4, 'right_id' => 5, 'forum_parents' => 'a:0:{}'),
|
||||
array('forum_id' => 6, 'parent_id' => 1, 'left_id' => 6, 'right_id' => 7, 'forum_parents' => ''),
|
||||
|
||||
array('forum_id' => 4, 'parent_id' => 0, 'left_id' => 9, 'right_id' => 12, 'forum_parents' => 'a:0:{}'),
|
||||
array('forum_id' => 5, 'parent_id' => 4, 'left_id' => 10, 'right_id' => 11, 'forum_parents' => 'a:0:{}'),
|
||||
|
||||
array('forum_id' => 7, 'parent_id' => 0, 'left_id' => 13, 'right_id' => 22, 'forum_parents' => 'a:0:{}'),
|
||||
array('forum_id' => 8, 'parent_id' => 7, 'left_id' => 14, 'right_id' => 15, 'forum_parents' => 'a:0:{}'),
|
||||
array('forum_id' => 9, 'parent_id' => 7, 'left_id' => 16, 'right_id' => 19, 'forum_parents' => 'a:0:{}'),
|
||||
array('forum_id' => 10, 'parent_id' => 9, 'left_id' => 17, 'right_id' => 18, 'forum_parents' => 'a:0:{}'),
|
||||
array('forum_id' => 11, 'parent_id' => 7, 'left_id' => 20, 'right_id' => 21, 'forum_parents' => 'a:0:{}'),
|
||||
)),
|
||||
array('Move nested children up',
|
||||
5, 1, true, array(
|
||||
array('forum_id' => 1, 'parent_id' => 0, 'left_id' => 1, 'right_id' => 10, 'forum_parents' => 'a:0:{}'),
|
||||
array('forum_id' => 2, 'parent_id' => 1, 'left_id' => 2, 'right_id' => 3, 'forum_parents' => 'a:0:{}'),
|
||||
array('forum_id' => 3, 'parent_id' => 1, 'left_id' => 4, 'right_id' => 5, 'forum_parents' => 'a:0:{}'),
|
||||
array('forum_id' => 5, 'parent_id' => 1, 'left_id' => 6, 'right_id' => 9, 'forum_parents' => ''),
|
||||
array('forum_id' => 6, 'parent_id' => 5, 'left_id' => 7, 'right_id' => 8, 'forum_parents' => ''),
|
||||
|
||||
array('forum_id' => 4, 'parent_id' => 0, 'left_id' => 11, 'right_id' => 12, 'forum_parents' => 'a:0:{}'),
|
||||
|
||||
array('forum_id' => 7, 'parent_id' => 0, 'left_id' => 13, 'right_id' => 22, 'forum_parents' => 'a:0:{}'),
|
||||
array('forum_id' => 8, 'parent_id' => 7, 'left_id' => 14, 'right_id' => 15, 'forum_parents' => 'a:0:{}'),
|
||||
array('forum_id' => 9, 'parent_id' => 7, 'left_id' => 16, 'right_id' => 19, 'forum_parents' => 'a:0:{}'),
|
||||
array('forum_id' => 10, 'parent_id' => 9, 'left_id' => 17, 'right_id' => 18, 'forum_parents' => 'a:0:{}'),
|
||||
array('forum_id' => 11, 'parent_id' => 7, 'left_id' => 20, 'right_id' => 21, 'forum_parents' => 'a:0:{}'),
|
||||
)),
|
||||
array('Move single child down',
|
||||
6, 7, true, array(
|
||||
array('forum_id' => 1, 'parent_id' => 0, 'left_id' => 1, 'right_id' => 6, 'forum_parents' => 'a:0:{}'),
|
||||
array('forum_id' => 2, 'parent_id' => 1, 'left_id' => 2, 'right_id' => 3, 'forum_parents' => 'a:0:{}'),
|
||||
array('forum_id' => 3, 'parent_id' => 1, 'left_id' => 4, 'right_id' => 5, 'forum_parents' => 'a:0:{}'),
|
||||
|
||||
array('forum_id' => 4, 'parent_id' => 0, 'left_id' => 7, 'right_id' => 10, 'forum_parents' => 'a:0:{}'),
|
||||
array('forum_id' => 5, 'parent_id' => 4, 'left_id' => 8, 'right_id' => 9, 'forum_parents' => 'a:0:{}'),
|
||||
|
||||
array('forum_id' => 7, 'parent_id' => 0, 'left_id' => 11, 'right_id' => 22, 'forum_parents' => 'a:0:{}'),
|
||||
array('forum_id' => 8, 'parent_id' => 7, 'left_id' => 12, 'right_id' => 13, 'forum_parents' => 'a:0:{}'),
|
||||
array('forum_id' => 9, 'parent_id' => 7, 'left_id' => 14, 'right_id' => 17, 'forum_parents' => 'a:0:{}'),
|
||||
array('forum_id' => 10, 'parent_id' => 9, 'left_id' => 15, 'right_id' => 16, 'forum_parents' => 'a:0:{}'),
|
||||
array('forum_id' => 11, 'parent_id' => 7, 'left_id' => 18, 'right_id' => 19, 'forum_parents' => 'a:0:{}'),
|
||||
array('forum_id' => 6, 'parent_id' => 7, 'left_id' => 20, 'right_id' => 21, 'forum_parents' => ''),
|
||||
)),
|
||||
array('Move nested children down',
|
||||
5, 7, true, array(
|
||||
array('forum_id' => 1, 'parent_id' => 0, 'left_id' => 1, 'right_id' => 6, 'forum_parents' => 'a:0:{}'),
|
||||
array('forum_id' => 2, 'parent_id' => 1, 'left_id' => 2, 'right_id' => 3, 'forum_parents' => 'a:0:{}'),
|
||||
array('forum_id' => 3, 'parent_id' => 1, 'left_id' => 4, 'right_id' => 5, 'forum_parents' => 'a:0:{}'),
|
||||
|
||||
array('forum_id' => 4, 'parent_id' => 0, 'left_id' => 7, 'right_id' => 8, 'forum_parents' => 'a:0:{}'),
|
||||
|
||||
array('forum_id' => 7, 'parent_id' => 0, 'left_id' => 9, 'right_id' => 22, 'forum_parents' => 'a:0:{}'),
|
||||
array('forum_id' => 8, 'parent_id' => 7, 'left_id' => 10, 'right_id' => 11, 'forum_parents' => 'a:0:{}'),
|
||||
array('forum_id' => 9, 'parent_id' => 7, 'left_id' => 12, 'right_id' => 15, 'forum_parents' => 'a:0:{}'),
|
||||
array('forum_id' => 10, 'parent_id' => 9, 'left_id' => 13, 'right_id' => 14, 'forum_parents' => 'a:0:{}'),
|
||||
array('forum_id' => 11, 'parent_id' => 7, 'left_id' => 16, 'right_id' => 17, 'forum_parents' => 'a:0:{}'),
|
||||
array('forum_id' => 5, 'parent_id' => 7, 'left_id' => 18, 'right_id' => 21, 'forum_parents' => ''),
|
||||
array('forum_id' => 6, 'parent_id' => 5, 'left_id' => 19, 'right_id' => 20, 'forum_parents' => ''),
|
||||
)),
|
||||
array('Move single child to parent 0',
|
||||
6, 0, true, array(
|
||||
array('forum_id' => 1, 'parent_id' => 0, 'left_id' => 1, 'right_id' => 6, 'forum_parents' => 'a:0:{}'),
|
||||
array('forum_id' => 2, 'parent_id' => 1, 'left_id' => 2, 'right_id' => 3, 'forum_parents' => 'a:0:{}'),
|
||||
array('forum_id' => 3, 'parent_id' => 1, 'left_id' => 4, 'right_id' => 5, 'forum_parents' => 'a:0:{}'),
|
||||
|
||||
array('forum_id' => 4, 'parent_id' => 0, 'left_id' => 7, 'right_id' => 10, 'forum_parents' => 'a:0:{}'),
|
||||
array('forum_id' => 5, 'parent_id' => 4, 'left_id' => 8, 'right_id' => 9, 'forum_parents' => 'a:0:{}'),
|
||||
|
||||
array('forum_id' => 7, 'parent_id' => 0, 'left_id' => 11, 'right_id' => 20, 'forum_parents' => 'a:0:{}'),
|
||||
array('forum_id' => 8, 'parent_id' => 7, 'left_id' => 12, 'right_id' => 13, 'forum_parents' => 'a:0:{}'),
|
||||
array('forum_id' => 9, 'parent_id' => 7, 'left_id' => 14, 'right_id' => 17, 'forum_parents' => 'a:0:{}'),
|
||||
array('forum_id' => 10, 'parent_id' => 9, 'left_id' => 15, 'right_id' => 16, 'forum_parents' => 'a:0:{}'),
|
||||
array('forum_id' => 11, 'parent_id' => 7, 'left_id' => 18, 'right_id' => 19, 'forum_parents' => 'a:0:{}'),
|
||||
|
||||
array('forum_id' => 6, 'parent_id' => 0, 'left_id' => 21, 'right_id' => 22, 'forum_parents' => ''),
|
||||
)),
|
||||
array('Move nested children to parent 0',
|
||||
5, 0, true, array(
|
||||
array('forum_id' => 1, 'parent_id' => 0, 'left_id' => 1, 'right_id' => 6, 'forum_parents' => 'a:0:{}'),
|
||||
array('forum_id' => 2, 'parent_id' => 1, 'left_id' => 2, 'right_id' => 3, 'forum_parents' => 'a:0:{}'),
|
||||
array('forum_id' => 3, 'parent_id' => 1, 'left_id' => 4, 'right_id' => 5, 'forum_parents' => 'a:0:{}'),
|
||||
|
||||
array('forum_id' => 4, 'parent_id' => 0, 'left_id' => 7, 'right_id' => 8, 'forum_parents' => 'a:0:{}'),
|
||||
|
||||
array('forum_id' => 7, 'parent_id' => 0, 'left_id' => 9, 'right_id' => 18, 'forum_parents' => 'a:0:{}'),
|
||||
array('forum_id' => 8, 'parent_id' => 7, 'left_id' => 10, 'right_id' => 11, 'forum_parents' => 'a:0:{}'),
|
||||
array('forum_id' => 9, 'parent_id' => 7, 'left_id' => 12, 'right_id' => 15, 'forum_parents' => 'a:0:{}'),
|
||||
array('forum_id' => 10, 'parent_id' => 9, 'left_id' => 13, 'right_id' => 14, 'forum_parents' => 'a:0:{}'),
|
||||
array('forum_id' => 11, 'parent_id' => 7, 'left_id' => 16, 'right_id' => 17, 'forum_parents' => 'a:0:{}'),
|
||||
|
||||
array('forum_id' => 5, 'parent_id' => 0, 'left_id' => 19, 'right_id' => 22, 'forum_parents' => ''),
|
||||
array('forum_id' => 6, 'parent_id' => 5, 'left_id' => 20, 'right_id' => 21, 'forum_parents' => ''),
|
||||
)),
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider change_parent_data
|
||||
*/
|
||||
public function test_change_parent($explain, $forum_id, $target_id, $expected_moved, $expected)
|
||||
{
|
||||
$this->assertEquals($expected_moved, $this->set->change_parent($forum_id, $target_id));
|
||||
|
||||
$result = $this->db->sql_query("SELECT forum_id, parent_id, left_id, right_id, forum_parents
|
||||
FROM phpbb_forums
|
||||
ORDER BY left_id, forum_id ASC");
|
||||
$this->assertEquals($expected, $this->db->sql_fetchrowset($result));
|
||||
}
|
||||
|
||||
public function change_parent_throws_item_data()
|
||||
{
|
||||
return array(
|
||||
array('Item 0 does not exist', 0, 5),
|
||||
array('Item does not exist', 200, 5),
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider change_parent_throws_item_data
|
||||
*
|
||||
* @expectedException OutOfBoundsException
|
||||
* @expectedExceptionMessage FORUM_NESTEDSET_INVALID_ITEM
|
||||
*/
|
||||
public function test_change_parent_throws_item($explain, $forum_id, $target_id)
|
||||
{
|
||||
$this->set->change_parent($forum_id, $target_id);
|
||||
}
|
||||
|
||||
public function change_parent_throws_parent_data()
|
||||
{
|
||||
return array(
|
||||
array('New parent is child', 4, 5),
|
||||
array('New parent is child 2', 7, 9),
|
||||
array('New parent does not exist', 1, 200),
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider change_parent_throws_parent_data
|
||||
*
|
||||
* @expectedException OutOfBoundsException
|
||||
* @expectedExceptionMessage FORUM_NESTEDSET_INVALID_PARENT
|
||||
*/
|
||||
public function test_change_parent_throws_parent($explain, $forum_id, $target_id)
|
||||
{
|
||||
$this->set->change_parent($forum_id, $target_id);
|
||||
}
|
||||
}
|
72
tests/tree/nestedset_forum_regenerate_test.php
Normal file
72
tests/tree/nestedset_forum_regenerate_test.php
Normal file
@@ -0,0 +1,72 @@
|
||||
<?php
|
||||
/**
|
||||
*
|
||||
* @package tree
|
||||
* @copyright (c) 2013 phpBB Group
|
||||
* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
|
||||
*
|
||||
*/
|
||||
|
||||
require_once dirname(__FILE__) . '/nestedset_forum_base.php';
|
||||
|
||||
class phpbb_tests_tree_nestedset_forum_regenerate_test extends phpbb_tests_tree_nestedset_forum_base
|
||||
{
|
||||
protected $fixed_set = array(
|
||||
array('forum_id' => 1, 'parent_id' => 0, 'left_id' => 1, 'right_id' => 6, 'forum_parents' => ''),
|
||||
array('forum_id' => 2, 'parent_id' => 1, 'left_id' => 2, 'right_id' => 3, 'forum_parents' => ''),
|
||||
array('forum_id' => 3, 'parent_id' => 1, 'left_id' => 4, 'right_id' => 5, 'forum_parents' => ''),
|
||||
|
||||
array('forum_id' => 4, 'parent_id' => 0, 'left_id' => 7, 'right_id' => 12, 'forum_parents' => ''),
|
||||
array('forum_id' => 5, 'parent_id' => 4, 'left_id' => 8, 'right_id' => 11, 'forum_parents' => ''),
|
||||
array('forum_id' => 6, 'parent_id' => 5, 'left_id' => 9, 'right_id' => 10, 'forum_parents' => ''),
|
||||
|
||||
array('forum_id' => 7, 'parent_id' => 0, 'left_id' => 13, 'right_id' => 22, 'forum_parents' => ''),
|
||||
array('forum_id' => 8, 'parent_id' => 7, 'left_id' => 14, 'right_id' => 15, 'forum_parents' => ''),
|
||||
array('forum_id' => 9, 'parent_id' => 7, 'left_id' => 16, 'right_id' => 19, 'forum_parents' => ''),
|
||||
array('forum_id' => 10, 'parent_id' => 9, 'left_id' => 17, 'right_id' => 18, 'forum_parents' => ''),
|
||||
array('forum_id' => 11, 'parent_id' => 7, 'left_id' => 20, 'right_id' => 21, 'forum_parents' => ''),
|
||||
);
|
||||
|
||||
public function regenerate_left_right_ids_data()
|
||||
{
|
||||
return array(
|
||||
array('UPDATE phpbb_forums
|
||||
SET left_id = 0,
|
||||
right_id = 0', false),
|
||||
array('UPDATE phpbb_forums
|
||||
SET left_id = 28,
|
||||
right_id = 28
|
||||
WHERE left_id > 12', false),
|
||||
array('UPDATE phpbb_forums
|
||||
SET left_id = left_id * 2,
|
||||
right_id = right_id * 2', false),
|
||||
array('UPDATE phpbb_forums
|
||||
SET left_id = left_id * 2,
|
||||
right_id = right_id * 2
|
||||
WHERE left_id > 12', false),
|
||||
array('UPDATE phpbb_forums
|
||||
SET left_id = left_id - 4,
|
||||
right_id = right_id * 4
|
||||
WHERE left_id > 4', false),
|
||||
array('UPDATE phpbb_forums
|
||||
SET left_id = 0,
|
||||
right_id = 0
|
||||
WHERE left_id > 12', true),
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider regenerate_left_right_ids_data
|
||||
*/
|
||||
public function test_regenerate_left_right_ids($breaking_query, $reset_ids)
|
||||
{
|
||||
$result = $this->db->sql_query($breaking_query);
|
||||
|
||||
$this->assertEquals(23, $this->set->regenerate_left_right_ids(1, 0, $reset_ids));
|
||||
|
||||
$result = $this->db->sql_query('SELECT forum_id, parent_id, left_id, right_id, forum_parents
|
||||
FROM phpbb_forums
|
||||
ORDER BY left_id, forum_id ASC');
|
||||
$this->assertEquals($this->fixed_set, $this->db->sql_fetchrowset($result));
|
||||
}
|
||||
}
|
116
tests/tree/nestedset_forum_test.php
Normal file
116
tests/tree/nestedset_forum_test.php
Normal file
@@ -0,0 +1,116 @@
|
||||
<?php
|
||||
/**
|
||||
*
|
||||
* @package tree
|
||||
* @copyright (c) 2013 phpBB Group
|
||||
* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
|
||||
*
|
||||
*/
|
||||
|
||||
require_once dirname(__FILE__) . '/nestedset_forum_base.php';
|
||||
|
||||
class pphpbb_tests_tree_nestedset_forum_test extends phpbb_tests_tree_nestedset_forum_base
|
||||
{
|
||||
public function forum_constructor_data()
|
||||
{
|
||||
return array(
|
||||
array(array(
|
||||
array('forum_id' => 1, 'parent_id' => 0, 'left_id' => 1, 'right_id' => 6),
|
||||
array('forum_id' => 2, 'parent_id' => 1, 'left_id' => 2, 'right_id' => 3),
|
||||
array('forum_id' => 3, 'parent_id' => 1, 'left_id' => 4, 'right_id' => 5),
|
||||
|
||||
array('forum_id' => 4, 'parent_id' => 0, 'left_id' => 7, 'right_id' => 12),
|
||||
array('forum_id' => 5, 'parent_id' => 4, 'left_id' => 8, 'right_id' => 11),
|
||||
array('forum_id' => 6, 'parent_id' => 5, 'left_id' => 9, 'right_id' => 10),
|
||||
|
||||
array('forum_id' => 7, 'parent_id' => 0, 'left_id' => 13, 'right_id' => 22),
|
||||
array('forum_id' => 8, 'parent_id' => 7, 'left_id' => 14, 'right_id' => 15),
|
||||
array('forum_id' => 9, 'parent_id' => 7, 'left_id' => 16, 'right_id' => 19),
|
||||
array('forum_id' => 10, 'parent_id' => 9, 'left_id' => 17, 'right_id' => 18),
|
||||
array('forum_id' => 11, 'parent_id' => 7, 'left_id' => 20, 'right_id' => 21),
|
||||
)),
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider forum_constructor_data
|
||||
*/
|
||||
public function test_forum_constructor($expected)
|
||||
{
|
||||
$result = $this->db->sql_query('SELECT forum_id, parent_id, left_id, right_id
|
||||
FROM phpbb_forums
|
||||
ORDER BY left_id, forum_id ASC');
|
||||
$this->assertEquals($expected, $this->db->sql_fetchrowset($result));
|
||||
}
|
||||
|
||||
public function get_sql_where_data()
|
||||
{
|
||||
return array(
|
||||
array('SELECT forum_id
|
||||
FROM phpbb_forums
|
||||
%s
|
||||
ORDER BY forum_id ASC',
|
||||
'WHERE', '', array(
|
||||
array('forum_id' => 1),
|
||||
array('forum_id' => 2),
|
||||
array('forum_id' => 3),
|
||||
|
||||
array('forum_id' => 4),
|
||||
array('forum_id' => 5),
|
||||
array('forum_id' => 6),
|
||||
|
||||
array('forum_id' => 7),
|
||||
array('forum_id' => 8),
|
||||
array('forum_id' => 9),
|
||||
array('forum_id' => 10),
|
||||
array('forum_id' => 11),
|
||||
)),
|
||||
array('SELECT f.forum_id
|
||||
FROM phpbb_forums f
|
||||
%s
|
||||
ORDER BY f.forum_id ASC',
|
||||
'WHERE', 'f.', array(
|
||||
array('forum_id' => 1),
|
||||
array('forum_id' => 2),
|
||||
array('forum_id' => 3),
|
||||
|
||||
array('forum_id' => 4),
|
||||
array('forum_id' => 5),
|
||||
array('forum_id' => 6),
|
||||
|
||||
array('forum_id' => 7),
|
||||
array('forum_id' => 8),
|
||||
array('forum_id' => 9),
|
||||
array('forum_id' => 10),
|
||||
array('forum_id' => 11),
|
||||
)),
|
||||
array('SELECT forum_id
|
||||
FROM phpbb_forums
|
||||
WHERE forum_id < 4 %s
|
||||
ORDER BY forum_id ASC',
|
||||
'AND', '', array(
|
||||
array('forum_id' => 1),
|
||||
array('forum_id' => 2),
|
||||
array('forum_id' => 3),
|
||||
)),
|
||||
array('SELECT f.forum_id
|
||||
FROM phpbb_forums f
|
||||
WHERE f.forum_id < 4 %s
|
||||
ORDER BY f.forum_id ASC',
|
||||
'AND', 'f.', array(
|
||||
array('forum_id' => 1),
|
||||
array('forum_id' => 2),
|
||||
array('forum_id' => 3),
|
||||
)),
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider get_sql_where_data
|
||||
*/
|
||||
public function test_get_sql_where($sql_query, $operator, $column_prefix, $expected)
|
||||
{
|
||||
$result = $this->db->sql_query(sprintf($sql_query, $this->set->get_sql_where($operator, $column_prefix)));
|
||||
$this->assertEquals($expected, $this->db->sql_fetchrowset($result));
|
||||
}
|
||||
}
|
@@ -2,22 +2,38 @@
|
||||
<dataset>
|
||||
<table name="phpbb_users">
|
||||
<column>user_id</column>
|
||||
<column>user_permissions</column>
|
||||
<column>username</column>
|
||||
<column>username_clean</column>
|
||||
<column>user_sig</column>
|
||||
<column>user_occ</column>
|
||||
<column>user_interests</column>
|
||||
<row>
|
||||
<value>1</value>
|
||||
<value></value>
|
||||
<value>Guest</value>
|
||||
<value>guest</value>
|
||||
<value></value>
|
||||
<value></value>
|
||||
<value></value>
|
||||
</row>
|
||||
<row>
|
||||
<value>2</value>
|
||||
<value></value>
|
||||
<value>Admin</value>
|
||||
<value>admin</value>
|
||||
<value></value>
|
||||
<value></value>
|
||||
<value></value>
|
||||
</row>
|
||||
<row>
|
||||
<value>3</value>
|
||||
<value></value>
|
||||
<value>Test</value>
|
||||
<value>test</value>
|
||||
<value></value>
|
||||
<value></value>
|
||||
<value></value>
|
||||
</row>
|
||||
</table>
|
||||
</dataset>
|
||||
|
Reference in New Issue
Block a user