mirror of
https://github.com/phpbb/phpbb.git
synced 2025-08-21 16:01:40 +02:00
Merge branch 'develop' of https://github.com/phpbb/phpbb3 into ticket/11600
This commit is contained in:
@@ -50,9 +50,11 @@ Database Tests
|
||||
By default all tests requiring a database connection will use sqlite. If you
|
||||
do not have sqlite installed the tests will be skipped. If you wish to run the
|
||||
tests on a different database you have to create a test_config.php file within
|
||||
your tests directory following the same format as phpBB's config.php. An
|
||||
example for mysqli can be found below. More information on configuration
|
||||
options can be found on the wiki (see below).
|
||||
your tests directory following the same format as phpBB's config.php. Testing
|
||||
makes use of a seperate database defined in this config file and before running
|
||||
the tests each time this database is deleted. An example for mysqli can be
|
||||
found below. More information on configuration options can be found on the
|
||||
wiki (see below).
|
||||
|
||||
<?php
|
||||
$dbms = 'phpbb_db_driver_mysqli';
|
||||
@@ -132,8 +134,36 @@ only want the slow tests, run:
|
||||
|
||||
$ phpBB/vendor/bin/phpunit --group slow
|
||||
|
||||
Functional tests
|
||||
-----------------
|
||||
|
||||
Functional tests test software the way a user would. They simulate a user
|
||||
browsing the website, but they do these steps in an automated way.
|
||||
phpBB allows you to write such tests.
|
||||
|
||||
Running
|
||||
=======
|
||||
|
||||
Running the tests requires your phpBB3 repository to be accessible through a
|
||||
local web server. You will need to supply the URL to the webserver in
|
||||
the 'tests/test_config.php' file. This is as simple as defining the
|
||||
'$phpbb_functional_url' variable, which contains the URL for the directory containing
|
||||
the board. Make sure you include the trailing slash. Note that without extensive
|
||||
changes to the test framework, you cannot use a board outside of the repository
|
||||
on which to run tests.
|
||||
|
||||
$phpbb_functional_url = 'http://localhost/phpBB3/';
|
||||
|
||||
To then run the tests, you run PHPUnit, but use the phpunit.xml.functional
|
||||
config file instead of the default one. Specify this through the "-c" option:
|
||||
|
||||
$ phpBB/vendor/bin/phpunit -c phpunit.xml.functional
|
||||
|
||||
This will change your board's config.php file, but it makes a backup at
|
||||
config_dev.php, so you can restore it after the test run is complete.
|
||||
|
||||
More Information
|
||||
================
|
||||
|
||||
Further information is available on phpbb wiki:
|
||||
http://wiki.phpbb.com/Unit_Tests
|
||||
http://wiki.phpbb.com/Automated_Tests
|
||||
|
33
tests/auth/fixtures/user.xml
Normal file
33
tests/auth/fixtures/user.xml
Normal file
@@ -0,0 +1,33 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<dataset>
|
||||
<table name="phpbb_users">
|
||||
<column>user_id</column>
|
||||
<column>username</column>
|
||||
<column>username_clean</column>
|
||||
<column>user_password</column>
|
||||
<column>user_passchg</column>
|
||||
<column>user_pass_convert</column>
|
||||
<column>user_email</column>
|
||||
<column>user_type</column>
|
||||
<column>user_login_attempts</column>
|
||||
<column>user_permissions</column>
|
||||
<column>user_sig</column>
|
||||
<column>user_occ</column>
|
||||
<column>user_interests</column>
|
||||
<row>
|
||||
<value>1</value>
|
||||
<value>foobar</value>
|
||||
<value>foobar</value>
|
||||
<value>$H$9E45lK6J8nLTSm9oJE5aNCSTFK9wqa/</value>
|
||||
<value>0</value>
|
||||
<value>0</value>
|
||||
<value>example@example.com</value>
|
||||
<value>0</value>
|
||||
<value>0</value>
|
||||
<value></value>
|
||||
<value></value>
|
||||
<value></value>
|
||||
<value></value>
|
||||
</row>
|
||||
</table>
|
||||
</dataset>
|
206
tests/auth/provider_apache_test.php
Normal file
206
tests/auth/provider_apache_test.php
Normal file
@@ -0,0 +1,206 @@
|
||||
<?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_auth_provider_apache_test extends phpbb_database_test_case
|
||||
{
|
||||
protected $provider;
|
||||
protected $user;
|
||||
protected $request;
|
||||
|
||||
protected function setup()
|
||||
{
|
||||
parent::setUp();
|
||||
|
||||
global $phpbb_root_path, $phpEx;
|
||||
|
||||
$db = $this->new_dbal();
|
||||
$config = new phpbb_config(array());
|
||||
$this->request = $this->getMock('phpbb_request');
|
||||
$this->user = $this->getMock('phpbb_user');
|
||||
|
||||
$this->provider = new phpbb_auth_provider_apache($db, $config, $this->request, $this->user, $phpbb_root_path, $phpEx);
|
||||
}
|
||||
|
||||
public function getDataSet()
|
||||
{
|
||||
return $this->createXMLDataSet(dirname(__FILE__).'/fixtures/user.xml');
|
||||
}
|
||||
|
||||
/**
|
||||
* Test to see if a user is identified to Apache. Expects false if they are.
|
||||
*/
|
||||
public function test_init()
|
||||
{
|
||||
$this->user->data['username'] = 'foobar';
|
||||
$this->request->expects($this->once())
|
||||
->method('is_set')
|
||||
->with('PHP_AUTH_USER',
|
||||
phpbb_request_interface::SERVER)
|
||||
->will($this->returnValue(true));
|
||||
$this->request->expects($this->once())
|
||||
->method('server')
|
||||
->with('PHP_AUTH_USER')
|
||||
->will($this->returnValue('foobar'));
|
||||
|
||||
$this->assertFalse($this->provider->init());
|
||||
}
|
||||
|
||||
public function test_login()
|
||||
{
|
||||
$username = 'foobar';
|
||||
$password = 'example';
|
||||
|
||||
$this->request->expects($this->once())
|
||||
->method('is_set')
|
||||
->with('PHP_AUTH_USER',
|
||||
phpbb_request_interface::SERVER)
|
||||
->will($this->returnValue(true));
|
||||
$this->request->expects($this->at(1))
|
||||
->method('server')
|
||||
->with('PHP_AUTH_USER')
|
||||
->will($this->returnValue('foobar'));
|
||||
$this->request->expects($this->at(2))
|
||||
->method('server')
|
||||
->with('PHP_AUTH_PW')
|
||||
->will($this->returnValue('example'));
|
||||
|
||||
$expected = array(
|
||||
'status' => LOGIN_SUCCESS,
|
||||
'error_msg' => false,
|
||||
'user_row' => array(
|
||||
'user_id' => '1',
|
||||
'username' => 'foobar',
|
||||
'user_password' => '$H$9E45lK6J8nLTSm9oJE5aNCSTFK9wqa/',
|
||||
'user_passchg' => '0',
|
||||
'user_email' => 'example@example.com',
|
||||
'user_type' => '0',
|
||||
),
|
||||
);
|
||||
|
||||
$this->assertEquals($expected, $this->provider->login($username, $password));
|
||||
}
|
||||
|
||||
public function test_autologin()
|
||||
{
|
||||
$this->request->expects($this->once())
|
||||
->method('is_set')
|
||||
->with('PHP_AUTH_USER',
|
||||
phpbb_request_interface::SERVER)
|
||||
->will($this->returnValue(true));
|
||||
$this->request->expects($this->at(1))
|
||||
->method('server')
|
||||
->with('PHP_AUTH_USER')
|
||||
->will($this->returnValue('foobar'));
|
||||
$this->request->expects($this->at(2))
|
||||
->method('server')
|
||||
->with('PHP_AUTH_PW')
|
||||
->will($this->returnValue('example'));
|
||||
|
||||
$expected = array(
|
||||
'user_id' => '1',
|
||||
'user_type' => '0',
|
||||
'group_id' => '3',
|
||||
'user_permissions' => '',
|
||||
'user_perm_from' => '0',
|
||||
'user_ip' => '',
|
||||
'user_regdate' => '0',
|
||||
'username' => 'foobar',
|
||||
'username_clean' => 'foobar',
|
||||
'user_password' => '$H$9E45lK6J8nLTSm9oJE5aNCSTFK9wqa/',
|
||||
'user_passchg' => '0',
|
||||
'user_pass_convert' => '0',
|
||||
'user_email' => 'example@example.com',
|
||||
'user_email_hash' => '0',
|
||||
'user_birthday' => '',
|
||||
'user_lastvisit' => '0',
|
||||
'user_lastmark' => '0',
|
||||
'user_lastpost_time' => '0',
|
||||
'user_lastpage' => '',
|
||||
'user_last_confirm_key' => '',
|
||||
'user_last_search' => '0',
|
||||
'user_warnings' => '0',
|
||||
'user_last_warning' => '0',
|
||||
'user_login_attempts' => '0',
|
||||
'user_inactive_reason' => '0',
|
||||
'user_inactive_time' => '0',
|
||||
'user_posts' => '0',
|
||||
'user_lang' => '',
|
||||
'user_timezone' => 'UTC',
|
||||
'user_dateformat' => 'd M Y H:i',
|
||||
'user_style' => '0',
|
||||
'user_rank' => '0',
|
||||
'user_colour' => '',
|
||||
'user_new_privmsg' => '0',
|
||||
'user_unread_privmsg' => '0',
|
||||
'user_last_privmsg' => '0',
|
||||
'user_message_rules' => '0',
|
||||
'user_full_folder' => '-3',
|
||||
'user_emailtime' => '0',
|
||||
'user_topic_show_days' => '0',
|
||||
'user_topic_sortby_type' => 't',
|
||||
'user_topic_sortby_dir' => 'd',
|
||||
'user_post_show_days' => '0',
|
||||
'user_post_sortby_type' => 't',
|
||||
'user_post_sortby_dir' => 'a',
|
||||
'user_notify' => '0',
|
||||
'user_notify_pm' => '1',
|
||||
'user_notify_type' => '0',
|
||||
'user_allow_pm' => '1',
|
||||
'user_allow_viewonline' => '1',
|
||||
'user_allow_viewemail' => '1',
|
||||
'user_allow_massemail' => '1',
|
||||
'user_options' => '230271',
|
||||
'user_avatar' => '',
|
||||
'user_avatar_type' => '',
|
||||
'user_avatar_width' => '0',
|
||||
'user_avatar_height' => '0',
|
||||
'user_sig' => '',
|
||||
'user_sig_bbcode_uid' => '',
|
||||
'user_sig_bbcode_bitfield' => '',
|
||||
'user_from' => '',
|
||||
'user_icq' => '',
|
||||
'user_aim' => '',
|
||||
'user_yim' => '',
|
||||
'user_msnm' => '',
|
||||
'user_jabber' => '',
|
||||
'user_website' => '',
|
||||
'user_occ' => '',
|
||||
'user_interests' => '',
|
||||
'user_actkey' => '',
|
||||
'user_newpasswd' => '',
|
||||
'user_form_salt' => '',
|
||||
'user_new' => '1',
|
||||
'user_reminded' => '0',
|
||||
'user_reminded_time' => '0',
|
||||
);
|
||||
|
||||
$this->assertEquals($expected, $this->provider->autologin());
|
||||
}
|
||||
|
||||
public function test_validate_session()
|
||||
{
|
||||
$user = array(
|
||||
'username' => 'foobar',
|
||||
'user_type'
|
||||
);
|
||||
$this->request->expects($this->once())
|
||||
->method('is_set')
|
||||
->with('PHP_AUTH_USER',
|
||||
phpbb_request_interface::SERVER)
|
||||
->will($this->returnValue(true));
|
||||
$this->request->expects($this->once())
|
||||
->method('server')
|
||||
->with('PHP_AUTH_USER')
|
||||
->will($this->returnValue('foobar'));
|
||||
|
||||
$this->assertTrue($this->provider->validate_session($user));
|
||||
}
|
||||
}
|
50
tests/auth/provider_db_test.php
Normal file
50
tests/auth/provider_db_test.php
Normal file
@@ -0,0 +1,50 @@
|
||||
<?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_auth_provider_db_test extends phpbb_database_test_case
|
||||
{
|
||||
public function getDataSet()
|
||||
{
|
||||
return $this->createXMLDataSet(dirname(__FILE__).'/fixtures/user.xml');
|
||||
}
|
||||
|
||||
public function test_login()
|
||||
{
|
||||
global $phpbb_root_path, $phpEx;
|
||||
|
||||
$db = $this->new_dbal();
|
||||
$config = new phpbb_config(array(
|
||||
'ip_login_limit_max' => 0,
|
||||
'ip_login_limit_use_forwarded' => 0,
|
||||
'max_login_attempts' => 0,
|
||||
));
|
||||
$request = $this->getMock('phpbb_request');
|
||||
$user = $this->getMock('phpbb_user');
|
||||
$provider = new phpbb_auth_provider_db($db, $config, $request, $user, $phpbb_root_path, $phpEx);
|
||||
|
||||
$expected = array(
|
||||
'status' => LOGIN_SUCCESS,
|
||||
'error_msg' => false,
|
||||
'user_row' => array(
|
||||
'user_id' => '1',
|
||||
'username' => 'foobar',
|
||||
'user_password' => '$H$9E45lK6J8nLTSm9oJE5aNCSTFK9wqa/',
|
||||
'user_passchg' => '0',
|
||||
'user_pass_convert' => '0',
|
||||
'user_email' => 'example@example.com',
|
||||
'user_type' => '0',
|
||||
'user_login_attempts' => '0',
|
||||
),
|
||||
);
|
||||
|
||||
$this->assertEquals($expected, $provider->login('foobar', 'example'));
|
||||
}
|
||||
}
|
130
tests/download/http_user_agent_test.php
Normal file
130
tests/download/http_user_agent_test.php
Normal file
@@ -0,0 +1,130 @@
|
||||
<?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_download.php';
|
||||
|
||||
class phpbb_download_http_user_agent_test extends phpbb_test_case
|
||||
{
|
||||
public function user_agents_check_greater_ie_version()
|
||||
{
|
||||
return array(
|
||||
// user agent
|
||||
// IE version
|
||||
// expected
|
||||
array(
|
||||
'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)',
|
||||
7,
|
||||
true,
|
||||
),
|
||||
array(
|
||||
'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident/6.0)',
|
||||
7,
|
||||
true,
|
||||
),
|
||||
array(
|
||||
'Mozilla/5.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; GTB7.4; InfoPath.2; SV1; .NET CLR 3.3.69573; WOW64; en-US)',
|
||||
7,
|
||||
true,
|
||||
),
|
||||
array(
|
||||
'Mozilla/5.0 (Windows; U; MSIE 7.0; Windows NT 6.0; en-US)',
|
||||
7,
|
||||
false,
|
||||
),
|
||||
array(
|
||||
'Mozilla/4.0 (compatible; MSIE 6.1; Windows XP; .NET CLR 1.1.4322; .NET CLR 2.0.50727)',
|
||||
7,
|
||||
false,
|
||||
),
|
||||
array(
|
||||
'Mozilla/4.0 (compatible; MSIE 6.01; Windows NT 6.0)',
|
||||
7,
|
||||
false,
|
||||
),
|
||||
array(
|
||||
'Mozilla/5.0 (Windows; U; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727)',
|
||||
7,
|
||||
false,
|
||||
),
|
||||
array(
|
||||
'Mozilla/5.0 (Windows NT 6.2; Win64; x64;) Gecko/20100101 Firefox/20.0',
|
||||
7,
|
||||
false,
|
||||
),
|
||||
array(
|
||||
'Mozilla/5.0 (Windows NT 6.2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1464.0 Safari/537.36',
|
||||
7,
|
||||
false,
|
||||
),
|
||||
array(
|
||||
'Googlebot-Image/1.0',
|
||||
7,
|
||||
false,
|
||||
),
|
||||
array(
|
||||
'Googlebot/2.1 ( http://www.google.com/bot.html)',
|
||||
7,
|
||||
false,
|
||||
),
|
||||
array(
|
||||
'Lynx/2.8.3dev.9 libwww-FM/2.14 SSL-MM/1.4.1 OpenSSL/0.9.6',
|
||||
7,
|
||||
false,
|
||||
),
|
||||
array(
|
||||
'Links (0.9x; Linux 2.4.7-10 i686)',
|
||||
7,
|
||||
false,
|
||||
),
|
||||
array(
|
||||
'Opera/9.60 (Windows NT 5.1; U; de) Presto/2.1.1',
|
||||
7,
|
||||
false,
|
||||
),
|
||||
array(
|
||||
'Mozilla/4.0 (compatible; MSIE 5.0; Windows NT;)',
|
||||
7,
|
||||
false,
|
||||
),
|
||||
array(
|
||||
'Mozilla/4.0 (compatible; MSIE 5.0; Windows NT 4.0) Opera 6.01 [en]',
|
||||
7,
|
||||
false,
|
||||
),
|
||||
array(
|
||||
'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; en) Opera 9.24',
|
||||
7,
|
||||
false,
|
||||
),
|
||||
array(
|
||||
'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)',
|
||||
8,
|
||||
true,
|
||||
),
|
||||
array(
|
||||
'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident/6.0)',
|
||||
9,
|
||||
true,
|
||||
),
|
||||
array(
|
||||
'Mozilla/5.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; GTB7.4; InfoPath.2; SV1; .NET CLR 3.3.69573; WOW64; en-US)',
|
||||
10,
|
||||
false,
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider user_agents_check_greater_ie_version
|
||||
*/
|
||||
public function test_is_greater_ie_version($user_agent, $version, $expected)
|
||||
{
|
||||
$this->assertEquals($expected, phpbb_is_greater_ie_version($user_agent, $version));
|
||||
}
|
||||
}
|
@@ -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,29 +75,6 @@ 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 = self::request('GET', 'adm/index.php?i=acp_extensions&mode=main&sid=' . $this->sid);
|
||||
|
@@ -15,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()
|
||||
|
@@ -16,56 +16,26 @@ require_once dirname(__FILE__) . '/../../phpBB/includes/acp/acp_modules.php';
|
||||
class phpbb_functional_extension_module_test extends phpbb_functional_test_case
|
||||
{
|
||||
protected $phpbb_extension_manager;
|
||||
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 fixtures 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::$copied_files = array();
|
||||
|
||||
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__) . '/fixtures/ext/', $phpbb_root_path . 'ext/'));
|
||||
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();
|
||||
|
||||
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/');
|
||||
}
|
||||
self::$helper->restore_original_ext_dir();
|
||||
}
|
||||
|
||||
public function setUp()
|
||||
|
@@ -16,59 +16,23 @@ class phpbb_functional_extension_permission_lang_test extends phpbb_functional_t
|
||||
|
||||
static private $helper;
|
||||
|
||||
static private $copied_files = array();
|
||||
|
||||
static protected $fixtures = array(
|
||||
'foo/bar/language/en/',
|
||||
);
|
||||
|
||||
/**
|
||||
* 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();
|
||||
|
||||
self::$helper = new phpbb_test_case_helpers(self);
|
||||
|
||||
self::$copied_files = array();
|
||||
|
||||
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__) . '/fixtures/ext/' . $fixture, $phpbb_root_path . 'ext/' . $fixture));
|
||||
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;
|
||||
|
||||
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/');
|
||||
}
|
||||
parent::tearDownAfterClass();
|
||||
|
||||
// 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/');
|
||||
}
|
||||
self::$helper->restore_original_ext_dir();
|
||||
}
|
||||
|
||||
public function setUp()
|
||||
|
@@ -16,47 +16,25 @@ class phpbb_functional_metadata_manager_test extends phpbb_functional_test_case
|
||||
{
|
||||
protected $phpbb_extension_manager;
|
||||
|
||||
static private $helpers;
|
||||
static private $helper;
|
||||
|
||||
static protected $fixtures = array(
|
||||
'foo/bar/',
|
||||
);
|
||||
|
||||
/**
|
||||
* 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();
|
||||
|
||||
self::$helpers = new phpbb_test_case_helpers(self);
|
||||
|
||||
if (!file_exists($phpbb_root_path . 'ext/foo/bar/'))
|
||||
{
|
||||
self::$helpers->makedirs($phpbb_root_path . 'ext/foo/bar/');
|
||||
}
|
||||
|
||||
foreach (self::$fixtures as $fixture)
|
||||
{
|
||||
self::$helpers->copy_dir(dirname(__FILE__) . '/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)
|
||||
{
|
||||
self::$helpers->empty_dir($phpbb_root_path . 'ext/' . $fixture);
|
||||
}
|
||||
self::$helpers->empty_dir($phpbb_root_path . 'ext/foo/');
|
||||
self::$helper->restore_original_ext_dir();
|
||||
}
|
||||
|
||||
public function setUp()
|
||||
|
39
tests/functional/paging_test.php
Normal file
39
tests/functional/paging_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
|
||||
*
|
||||
*/
|
||||
|
||||
/**
|
||||
* @group functional
|
||||
*/
|
||||
class phpbb_functional_paging_test extends phpbb_functional_test_case
|
||||
{
|
||||
|
||||
public function test_pagination()
|
||||
{
|
||||
$this->login();
|
||||
|
||||
$post = $this->create_topic(2, 'Test Topic 1', 'This is a test topic posted by the testing framework.');
|
||||
for ($post_id = 1; $post_id < 20; $post_id++)
|
||||
{
|
||||
$this->create_post(2, $post['topic_id'], 'Re: Test Topic 1', 'This is a test post no' . $post_id . ' posted by the testing framework.');
|
||||
}
|
||||
$crawler = self::request('GET', "viewtopic.php?t={$post['topic_id']}&sid={$this->sid}");
|
||||
$this->assertContains('post no9', $crawler->text());
|
||||
$this->assertNotContains('post no19', $crawler->text());
|
||||
|
||||
$next_link = $crawler->filter('#viewtopic > fieldset > a.arrow-right')->attr('href');
|
||||
$crawler = self::request('GET', $next_link);
|
||||
$this->assertContains('post no19', $crawler->text());
|
||||
$this->assertNotContains('post no9', $crawler->text());
|
||||
|
||||
$prev_link = $crawler->filter('#viewtopic > fieldset > a.arrow-left')->attr('href');
|
||||
$crawler = self::request('GET', $prev_link);
|
||||
$this->assertContains('post no9', $crawler->text());
|
||||
$this->assertNotContains('post no19', $crawler->text());
|
||||
}
|
||||
}
|
@@ -32,105 +32,4 @@ class phpbb_functional_posting_test extends phpbb_functional_test_case
|
||||
$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());
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a topic
|
||||
*
|
||||
* Be sure to login before creating
|
||||
*
|
||||
* @param int $forum_id
|
||||
* @param string $subject
|
||||
* @param string $message
|
||||
* @param array $additional_form_data Any additional form data to be sent in the request
|
||||
* @return array post_id, topic_id
|
||||
*/
|
||||
public function create_topic($forum_id, $subject, $message, $additional_form_data = array())
|
||||
{
|
||||
$posting_url = "posting.php?mode=post&f={$forum_id}&sid={$this->sid}";
|
||||
|
||||
$form_data = array_merge(array(
|
||||
'subject' => $subject,
|
||||
'message' => $message,
|
||||
'post' => true,
|
||||
), $additional_form_data);
|
||||
|
||||
return self::submit_post($posting_url, 'POST_TOPIC', $form_data);
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a post
|
||||
*
|
||||
* Be sure to login before creating
|
||||
*
|
||||
* @param int $forum_id
|
||||
* @param string $subject
|
||||
* @param string $message
|
||||
* @param array $additional_form_data Any additional form data to be sent in the request
|
||||
* @return array post_id, topic_id
|
||||
*/
|
||||
public function create_post($forum_id, $topic_id, $subject, $message, $additional_form_data = array())
|
||||
{
|
||||
$posting_url = "posting.php?mode=reply&f={$forum_id}&t={$topic_id}&sid={$this->sid}";
|
||||
|
||||
$form_data = array_merge(array(
|
||||
'subject' => $subject,
|
||||
'message' => $message,
|
||||
'post' => true,
|
||||
), $additional_form_data);
|
||||
|
||||
return self::submit_post($posting_url, 'POST_REPLY', $form_data);
|
||||
}
|
||||
|
||||
/**
|
||||
* Helper for submitting posts
|
||||
*
|
||||
* @param string $posting_url
|
||||
* @param string $posting_contains
|
||||
* @param array $form_data
|
||||
* @return array post_id, topic_id
|
||||
*/
|
||||
protected function submit_post($posting_url, $posting_contains, $form_data)
|
||||
{
|
||||
$this->add_lang('posting');
|
||||
|
||||
$crawler = self::request('GET', $posting_url);
|
||||
$this->assertContains($this->lang($posting_contains), $crawler->filter('html')->text());
|
||||
|
||||
$hidden_fields = array(
|
||||
$crawler->filter('[type="hidden"]')->each(function ($node, $i) {
|
||||
return array('name' => $node->getAttribute('name'), 'value' => $node->getAttribute('value'));
|
||||
}),
|
||||
);
|
||||
|
||||
foreach ($hidden_fields as $fields)
|
||||
{
|
||||
foreach($fields as $field)
|
||||
{
|
||||
$form_data[$field['name']] = $field['value'];
|
||||
}
|
||||
}
|
||||
|
||||
// Bypass time restriction that said that if the lastclick time (i.e. time when the form was opened)
|
||||
// is not at least 2 seconds before submission, cancel the form
|
||||
$form_data['lastclick'] = 0;
|
||||
|
||||
// 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 = 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();
|
||||
|
||||
$matches = $topic_id = $post_id = false;
|
||||
preg_match_all('#&t=([0-9]+)(&p=([0-9]+))?#', $url, $matches);
|
||||
|
||||
$topic_id = (int) (isset($matches[1][0])) ? $matches[1][0] : 0;
|
||||
$post_id = (int) (isset($matches[3][0])) ? $matches[3][0] : 0;
|
||||
|
||||
return array(
|
||||
'topic_id' => $topic_id,
|
||||
'post_id' => $post_id,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
61
tests/functional/report_post_captcha.php
Normal file
61
tests/functional/report_post_captcha.php
Normal file
@@ -0,0 +1,61 @@
|
||||
<?php
|
||||
/**
|
||||
*
|
||||
* @package testing
|
||||
* @copyright (c) 2013 phpBB Group
|
||||
* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
|
||||
*
|
||||
*/
|
||||
|
||||
/**
|
||||
* @group functional
|
||||
*/
|
||||
class phpbb_functional_report_post_captcha_test extends phpbb_functional_test_case
|
||||
{
|
||||
public function test_user_report_post()
|
||||
{
|
||||
$this->login();
|
||||
$crawler = self::request('GET', 'report.php?f=2&p=1');
|
||||
$this->assertNotContains($this->lang('CONFIRM_CODE'), $crawler->filter('html')->text());
|
||||
}
|
||||
|
||||
public function test_guest_report_post()
|
||||
{
|
||||
$crawler = self::request('GET', 'report.php?f=2&p=1');
|
||||
$this->add_lang('mcp');
|
||||
$this->assertContains($this->lang('USER_CANNOT_REPORT'), $crawler->filter('html')->text());
|
||||
|
||||
$this->set_reporting_guest(1);
|
||||
$crawler = self::request('GET', 'report.php?f=2&p=1');
|
||||
$this->assertContains($this->lang('CONFIRM_CODE'), $crawler->filter('html')->text());
|
||||
$this->set_reporting_guest(-1);
|
||||
}
|
||||
|
||||
protected function set_reporting_guest($report_post_allowed)
|
||||
{
|
||||
$this->login();
|
||||
$this->admin_login();
|
||||
|
||||
$crawler = self::request('GET', 'adm/index.php?i=permissions&icat=12&mode=setting_group_local&sid=' . $this->sid);
|
||||
$form = $crawler->selectButton('Submit')->form();
|
||||
$values = $form->getValues();
|
||||
$values["group_id[0]"] = 1;
|
||||
$form->setValues($values);
|
||||
$crawler = self::submit($form);
|
||||
|
||||
$form = $crawler->selectButton('Submit')->form();
|
||||
$values = $form->getValues();
|
||||
$values["forum_id"] = 2;
|
||||
$form->setValues($values);
|
||||
$crawler = self::submit($form);
|
||||
|
||||
$this->add_lang('acp/permissions');
|
||||
$form = $crawler->selectButton($this->lang('APPLY_ALL_PERMISSIONS'))->form();
|
||||
$values = $form->getValues();
|
||||
$values["setting[1][2][f_report]"] = $report_post_allowed;
|
||||
$form->setValues($values);
|
||||
$crawler = self::submit($form);
|
||||
|
||||
$crawler = self::request('GET', 'ucp.php?mode=logout&sid=' . $this->sid);
|
||||
}
|
||||
}
|
23
tests/functions/fixtures/validate_email.xml
Normal file
23
tests/functions/fixtures/validate_email.xml
Normal file
@@ -0,0 +1,23 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<dataset>
|
||||
<table name="phpbb_users">
|
||||
<column>user_id</column>
|
||||
<column>username</column>
|
||||
<column>username_clean</column>
|
||||
<column>user_permissions</column>
|
||||
<column>user_sig</column>
|
||||
<column>user_occ</column>
|
||||
<column>user_interests</column>
|
||||
<column>user_email_hash</column>
|
||||
<row>
|
||||
<value>1</value>
|
||||
<value>admin</value>
|
||||
<value>admin</value>
|
||||
<value></value>
|
||||
<value></value>
|
||||
<value></value>
|
||||
<value></value>
|
||||
<value>143317126117</value>
|
||||
</row>
|
||||
</table>
|
||||
</dataset>
|
38
tests/functions/fixtures/validate_username.xml
Normal file
38
tests/functions/fixtures/validate_username.xml
Normal file
@@ -0,0 +1,38 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<dataset>
|
||||
<table name="phpbb_groups">
|
||||
<column>group_name</column>
|
||||
<column>group_desc</column>
|
||||
<row>
|
||||
<value>foobar_group</value>
|
||||
<value>test123</value>
|
||||
</row>
|
||||
</table>
|
||||
<table name="phpbb_users">
|
||||
<column>user_id</column>
|
||||
<column>username</column>
|
||||
<column>username_clean</column>
|
||||
<column>user_permissions</column>
|
||||
<column>user_sig</column>
|
||||
<column>user_occ</column>
|
||||
<column>user_interests</column>
|
||||
<row>
|
||||
<value>1</value>
|
||||
<value>admin</value>
|
||||
<value>admin</value>
|
||||
<value></value>
|
||||
<value></value>
|
||||
<value></value>
|
||||
<value></value>
|
||||
</row>
|
||||
<row>
|
||||
<value>2</value>
|
||||
<value>moderator</value>
|
||||
<value>moderator</value>
|
||||
<value></value>
|
||||
<value></value>
|
||||
<value></value>
|
||||
<value></value>
|
||||
</row>
|
||||
</table>
|
||||
</dataset>
|
36
tests/functions/validate_data_helper.php
Normal file
36
tests/functions/validate_data_helper.php
Normal file
@@ -0,0 +1,36 @@
|
||||
<?php
|
||||
/**
|
||||
*
|
||||
* @package testing
|
||||
* @copyright (c) 2013 phpBB Group
|
||||
* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
|
||||
*
|
||||
*/
|
||||
|
||||
class phpbb_functions_validate_data_helper
|
||||
{
|
||||
protected $test_case;
|
||||
|
||||
public function __construct($test_case)
|
||||
{
|
||||
$this->test_case = $test_case;
|
||||
}
|
||||
|
||||
/**
|
||||
* Test provided input data with supplied checks and compare to expected
|
||||
* results
|
||||
*
|
||||
* @param array $data Array containing one or more subarrays with the
|
||||
* test data. The first element of a subarray is the
|
||||
* expected result, the second one is the input, and the
|
||||
* third is the data that should be passed to the function
|
||||
* validate_data().
|
||||
*/
|
||||
public function assert_valid_data($data)
|
||||
{
|
||||
foreach ($data as $key => $test)
|
||||
{
|
||||
$this->test_case->assertEquals($test[0], validate_data(array($test[1]), array($test[2])));
|
||||
}
|
||||
}
|
||||
}
|
82
tests/functions/validate_date_test.php
Normal file
82
tests/functions/validate_date_test.php
Normal file
@@ -0,0 +1,82 @@
|
||||
<?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';
|
||||
require_once dirname(__FILE__) . '/validate_data_helper.php';
|
||||
|
||||
class phpbb_functions_validate_date_test extends phpbb_test_case
|
||||
{
|
||||
protected $helper;
|
||||
|
||||
protected function setUp()
|
||||
{
|
||||
parent::setUp();
|
||||
|
||||
$this->helper = new phpbb_functions_validate_data_helper($this);
|
||||
}
|
||||
|
||||
public function test_validate_date()
|
||||
{
|
||||
$this->helper->assert_valid_data(array(
|
||||
'empty' => array(
|
||||
array('INVALID'),
|
||||
'',
|
||||
array('date'),
|
||||
),
|
||||
'empty_opt' => array(
|
||||
array(),
|
||||
'',
|
||||
array('date', true),
|
||||
),
|
||||
'double_single' => array(
|
||||
array(),
|
||||
'17-06-1990',
|
||||
array('date'),
|
||||
),
|
||||
'single_single' => array(
|
||||
array(),
|
||||
'05-05-2009',
|
||||
array('date'),
|
||||
),
|
||||
'double_double' => array(
|
||||
array(),
|
||||
'17-12-1990',
|
||||
array('date'),
|
||||
),
|
||||
'month_high' => array(
|
||||
array('INVALID'),
|
||||
'17-17-1990',
|
||||
array('date'),
|
||||
),
|
||||
'month_low' => array(
|
||||
array('INVALID'),
|
||||
'01-00-1990',
|
||||
array('date'),
|
||||
),
|
||||
'day_high' => array(
|
||||
array('INVALID'),
|
||||
'64-01-1990',
|
||||
array('date'),
|
||||
),
|
||||
'day_low' => array(
|
||||
array('INVALID'),
|
||||
'00-12-1990',
|
||||
array('date'),
|
||||
),
|
||||
// Currently fails
|
||||
/*
|
||||
'zero_year' => array(
|
||||
array(),
|
||||
'01-01-0000',
|
||||
array('date'),
|
||||
),
|
||||
*/
|
||||
));
|
||||
}
|
||||
}
|
108
tests/functions/validate_email_test.php
Normal file
108
tests/functions/validate_email_test.php
Normal file
@@ -0,0 +1,108 @@
|
||||
<?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_user.php';
|
||||
require_once dirname(__FILE__) . '/../mock/user.php';
|
||||
require_once dirname(__FILE__) . '/validate_data_helper.php';
|
||||
|
||||
class phpbb_functions_validate_email_test extends phpbb_database_test_case
|
||||
{
|
||||
protected $db;
|
||||
protected $user;
|
||||
protected $helper;
|
||||
|
||||
public function getDataSet()
|
||||
{
|
||||
return $this->createXMLDataSet(dirname(__FILE__) . '/fixtures/validate_email.xml');
|
||||
}
|
||||
|
||||
protected function setUp()
|
||||
{
|
||||
parent::setUp();
|
||||
|
||||
$this->db = $this->new_dbal();
|
||||
$this->user = new phpbb_mock_user;
|
||||
$this->helper = new phpbb_functions_validate_data_helper($this);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get validation prerequesites
|
||||
*
|
||||
* @param bool $check_mx Whether mx records should be checked
|
||||
*/
|
||||
protected function set_validation_prerequisites($check_mx)
|
||||
{
|
||||
global $config, $db, $user;
|
||||
|
||||
$config['email_check_mx'] = $check_mx;
|
||||
$db = $this->db;
|
||||
$user = $this->user;
|
||||
$user->optionset('banned_users', array('banned@example.com'));
|
||||
}
|
||||
|
||||
public function test_validate_email()
|
||||
{
|
||||
$this->set_validation_prerequisites(false);
|
||||
|
||||
$this->helper->assert_valid_data(array(
|
||||
'empty' => array(
|
||||
array(),
|
||||
'',
|
||||
array('email'),
|
||||
),
|
||||
'allowed' => array(
|
||||
array(),
|
||||
'foobar@example.com',
|
||||
array('email', 'foobar@example.com'),
|
||||
),
|
||||
'invalid' => array(
|
||||
array('EMAIL_INVALID'),
|
||||
'fööbar@example.com',
|
||||
array('email'),
|
||||
),
|
||||
'valid_complex' => array(
|
||||
array(),
|
||||
"'%$~test@example.com",
|
||||
array('email'),
|
||||
),
|
||||
'taken' => array(
|
||||
array('EMAIL_TAKEN'),
|
||||
'admin@example.com',
|
||||
array('email'),
|
||||
),
|
||||
'banned' => array(
|
||||
array('EMAIL_BANNED'),
|
||||
'banned@example.com',
|
||||
array('email'),
|
||||
),
|
||||
));
|
||||
}
|
||||
|
||||
/**
|
||||
* @group slow
|
||||
*/
|
||||
public function test_validate_email_mx()
|
||||
{
|
||||
$this->set_validation_prerequisites(true);
|
||||
|
||||
$this->helper->assert_valid_data(array(
|
||||
'valid' => array(
|
||||
array(),
|
||||
'foobar@phpbb.com',
|
||||
array('email'),
|
||||
),
|
||||
'no_mx' => array(
|
||||
array('DOMAIN_NO_MX_RECORD'),
|
||||
'test@does-not-exist.phpbb.com',
|
||||
array('email'),
|
||||
),
|
||||
));
|
||||
}
|
||||
}
|
79
tests/functions/validate_jabber_test.php
Normal file
79
tests/functions/validate_jabber_test.php
Normal file
@@ -0,0 +1,79 @@
|
||||
<?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';
|
||||
require_once dirname(__FILE__) . '/validate_data_helper.php';
|
||||
|
||||
class phpbb_functions_validate_jabber_test extends phpbb_test_case
|
||||
{
|
||||
protected $helper;
|
||||
|
||||
protected function setUp()
|
||||
{
|
||||
parent::setUp();
|
||||
|
||||
$this->helper = new phpbb_functions_validate_data_helper($this);
|
||||
}
|
||||
|
||||
public function test_validate_jabber()
|
||||
{
|
||||
$this->helper->assert_valid_data(array(
|
||||
'empty' => array(
|
||||
array(),
|
||||
'',
|
||||
array('jabber'),
|
||||
),
|
||||
'no_seperator' => array(
|
||||
array('WRONG_DATA'),
|
||||
'testjabber.ccc',
|
||||
array('jabber'),
|
||||
),
|
||||
'no_user' => array(
|
||||
array('WRONG_DATA'),
|
||||
'@jabber.ccc',
|
||||
array('jabber'),
|
||||
),
|
||||
'no_realm' => array(
|
||||
array('WRONG_DATA'),
|
||||
'user@',
|
||||
array('jabber'),
|
||||
),
|
||||
'dot_realm' => array(
|
||||
array('WRONG_DATA'),
|
||||
'user@.....',
|
||||
array('jabber'),
|
||||
),
|
||||
'-realm' => array(
|
||||
array('WRONG_DATA'),
|
||||
'user@-jabber.ccc',
|
||||
array('jabber'),
|
||||
),
|
||||
'realm-' => array(
|
||||
array('WRONG_DATA'),
|
||||
'user@jabber.ccc-',
|
||||
array('jabber'),
|
||||
),
|
||||
'correct' => array(
|
||||
array(),
|
||||
'user@jabber.09A-z.org',
|
||||
array('jabber'),
|
||||
),
|
||||
'prohibited' => array(
|
||||
array('WRONG_DATA'),
|
||||
'u@ser@jabber.ccc.org',
|
||||
array('jabber'),
|
||||
),
|
||||
'prohibited_char' => array(
|
||||
array('WRONG_DATA'),
|
||||
'u<s>er@jabber.ccc.org',
|
||||
array('jabber'),
|
||||
),
|
||||
));
|
||||
}
|
||||
}
|
60
tests/functions/validate_lang_iso_test.php
Normal file
60
tests/functions/validate_lang_iso_test.php
Normal file
@@ -0,0 +1,60 @@
|
||||
<?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';
|
||||
require_once dirname(__FILE__) . '/validate_data_helper.php';
|
||||
|
||||
class phpbb_functions_validate_lang_iso_test extends phpbb_database_test_case
|
||||
{
|
||||
protected $db;
|
||||
protected $helper;
|
||||
|
||||
public function getDataSet()
|
||||
{
|
||||
return $this->createXMLDataSet(dirname(__FILE__) . '/fixtures/language_select.xml');
|
||||
}
|
||||
|
||||
protected function setUp()
|
||||
{
|
||||
parent::setUp();
|
||||
|
||||
$this->db = $this->new_dbal();
|
||||
$this->helper = new phpbb_functions_validate_data_helper($this);
|
||||
}
|
||||
|
||||
public function test_validate_lang_iso()
|
||||
{
|
||||
global $db;
|
||||
|
||||
$db = $this->db;
|
||||
|
||||
$this->helper->assert_valid_data(array(
|
||||
'empty' => array(
|
||||
array('WRONG_DATA'),
|
||||
'',
|
||||
array('language_iso_name'),
|
||||
),
|
||||
'en' => array(
|
||||
array(),
|
||||
'en',
|
||||
array('language_iso_name'),
|
||||
),
|
||||
'cs' => array(
|
||||
array(),
|
||||
'cs',
|
||||
array('language_iso_name'),
|
||||
),
|
||||
'de' => array(
|
||||
array('WRONG_DATA'),
|
||||
'de',
|
||||
array('language_iso_name'),
|
||||
),
|
||||
));
|
||||
}
|
||||
}
|
49
tests/functions/validate_match_test.php
Normal file
49
tests/functions/validate_match_test.php
Normal file
@@ -0,0 +1,49 @@
|
||||
<?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';
|
||||
require_once dirname(__FILE__) . '/validate_data_helper.php';
|
||||
|
||||
class phpbb_functions_validate_match_test extends phpbb_test_case
|
||||
{
|
||||
protected $helper;
|
||||
|
||||
protected function setUp()
|
||||
{
|
||||
parent::setUp();
|
||||
|
||||
$this->helper = new phpbb_functions_validate_data_helper($this);
|
||||
}
|
||||
|
||||
public function test_validate_match()
|
||||
{
|
||||
$this->helper->assert_valid_data(array(
|
||||
'empty_opt' => array(
|
||||
array(),
|
||||
'',
|
||||
array('match', true, '/[a-z]$/'),
|
||||
),
|
||||
'empty_empty_match' => array(
|
||||
array(),
|
||||
'',
|
||||
array('match'),
|
||||
),
|
||||
'foobar' => array(
|
||||
array(),
|
||||
'foobar',
|
||||
array('match', false, '/[a-z]$/'),
|
||||
),
|
||||
'foobar_fail' => array(
|
||||
array('WRONG_DATA'),
|
||||
'foobar123',
|
||||
array('match', false, '/[a-z]$/'),
|
||||
),
|
||||
));
|
||||
}
|
||||
}
|
59
tests/functions/validate_num_test.php
Normal file
59
tests/functions/validate_num_test.php
Normal file
@@ -0,0 +1,59 @@
|
||||
<?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';
|
||||
require_once dirname(__FILE__) . '/validate_data_helper.php';
|
||||
|
||||
class phpbb_functions_validate_num_test extends phpbb_test_case
|
||||
{
|
||||
protected $helper;
|
||||
|
||||
protected function setUp()
|
||||
{
|
||||
parent::setUp();
|
||||
|
||||
$this->helper = new phpbb_functions_validate_data_helper($this);
|
||||
}
|
||||
|
||||
public function test_validate_num()
|
||||
{
|
||||
$this->helper->assert_valid_data(array(
|
||||
'empty' => array(
|
||||
array(),
|
||||
'',
|
||||
array('num'),
|
||||
),
|
||||
'zero' => array(
|
||||
array(),
|
||||
'0',
|
||||
array('num'),
|
||||
),
|
||||
'five_minmax_correct' => array(
|
||||
array(),
|
||||
'5',
|
||||
array('num', false, 2, 6),
|
||||
),
|
||||
'five_minmax_short' => array(
|
||||
array('TOO_SMALL'),
|
||||
'5',
|
||||
array('num', false, 7, 10),
|
||||
),
|
||||
'five_minmax_long' => array(
|
||||
array('TOO_LARGE'),
|
||||
'5',
|
||||
array('num', false, 2, 3),
|
||||
),
|
||||
'string' => array(
|
||||
array(),
|
||||
'foobar',
|
||||
array('num'),
|
||||
),
|
||||
));
|
||||
}
|
||||
}
|
96
tests/functions/validate_password_test.php
Normal file
96
tests/functions/validate_password_test.php
Normal file
@@ -0,0 +1,96 @@
|
||||
<?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';
|
||||
require_once dirname(__FILE__) . '/validate_data_helper.php';
|
||||
|
||||
class phpbb_functions_validate_password_test extends phpbb_test_case
|
||||
{
|
||||
protected $helper;
|
||||
|
||||
protected function setUp()
|
||||
{
|
||||
parent::setUp();
|
||||
|
||||
$this->helper = new phpbb_functions_validate_data_helper($this);
|
||||
}
|
||||
|
||||
public function validate_password_data()
|
||||
{
|
||||
return array(
|
||||
array('PASS_TYPE_ANY', array(
|
||||
'empty' => array(),
|
||||
'foobar_any' => array(),
|
||||
'foobar_mixed' => array(),
|
||||
'foobar_alpha' => array(),
|
||||
'foobar_symbol' => array(),
|
||||
)),
|
||||
array('PASS_TYPE_CASE', array(
|
||||
'empty' => array(),
|
||||
'foobar_any' => array('INVALID_CHARS'),
|
||||
'foobar_mixed' => array(),
|
||||
'foobar_alpha' => array(),
|
||||
'foobar_symbol' => array(),
|
||||
)),
|
||||
array('PASS_TYPE_ALPHA', array(
|
||||
'empty' => array(),
|
||||
'foobar_any' => array('INVALID_CHARS'),
|
||||
'foobar_mixed' => array('INVALID_CHARS'),
|
||||
'foobar_alpha' => array(),
|
||||
'foobar_symbol' => array(),
|
||||
)),
|
||||
array('PASS_TYPE_SYMBOL', array(
|
||||
'empty' => array(),
|
||||
'foobar_any' => array('INVALID_CHARS'),
|
||||
'foobar_mixed' => array('INVALID_CHARS'),
|
||||
'foobar_alpha' => array('INVALID_CHARS'),
|
||||
'foobar_symbol' => array(),
|
||||
)),
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider validate_password_data
|
||||
*/
|
||||
public function test_validate_password($pass_complexity, $expected)
|
||||
{
|
||||
global $config;
|
||||
|
||||
// Set complexity to mixed case letters, numbers and symbols
|
||||
$config['pass_complex'] = $pass_complexity;
|
||||
|
||||
$this->helper->assert_valid_data(array(
|
||||
'empty' => array(
|
||||
$expected['empty'],
|
||||
'',
|
||||
array('password'),
|
||||
),
|
||||
'foobar_any' => array(
|
||||
$expected['foobar_any'],
|
||||
'foobar',
|
||||
array('password'),
|
||||
),
|
||||
'foobar_mixed' => array(
|
||||
$expected['foobar_mixed'],
|
||||
'FooBar',
|
||||
array('password'),
|
||||
),
|
||||
'foobar_alpha' => array(
|
||||
$expected['foobar_alpha'],
|
||||
'F00bar',
|
||||
array('password'),
|
||||
),
|
||||
'foobar_symbol' => array(
|
||||
$expected['foobar_symbol'],
|
||||
'fooBar123*',
|
||||
array('password'),
|
||||
),
|
||||
));
|
||||
}
|
||||
}
|
70
tests/functions/validate_string_test.php
Normal file
70
tests/functions/validate_string_test.php
Normal file
@@ -0,0 +1,70 @@
|
||||
<?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';
|
||||
require_once dirname(__FILE__) . '/../../phpBB/includes/utf/utf_tools.php';
|
||||
require_once dirname(__FILE__) . '/validate_data_helper.php';
|
||||
|
||||
class phpbb_functions_validate_string_test extends phpbb_test_case
|
||||
{
|
||||
protected $helper;
|
||||
|
||||
protected function setUp()
|
||||
{
|
||||
parent::setUp();
|
||||
|
||||
$this->helper = new phpbb_functions_validate_data_helper($this);
|
||||
}
|
||||
|
||||
public function test_validate_string()
|
||||
{
|
||||
$this->helper->assert_valid_data(array(
|
||||
'empty_opt' => array(
|
||||
array(),
|
||||
'',
|
||||
array('string', true),
|
||||
),
|
||||
'empty' => array(
|
||||
array(),
|
||||
'',
|
||||
array('string'),
|
||||
),
|
||||
'foo' => array(
|
||||
array(),
|
||||
'foobar',
|
||||
array('string'),
|
||||
),
|
||||
'foo_minmax_correct' => array(
|
||||
array(),
|
||||
'foobar',
|
||||
array('string', false, 2, 6),
|
||||
),
|
||||
'foo_minmax_short' => array(
|
||||
array('TOO_SHORT'),
|
||||
'foobar',
|
||||
array('string', false, 7, 9),
|
||||
),
|
||||
'foo_minmax_long' => array(
|
||||
array('TOO_LONG'),
|
||||
'foobar',
|
||||
array('string', false, 2, 5),
|
||||
),
|
||||
'empty_short' => array(
|
||||
array('TOO_SHORT'),
|
||||
'',
|
||||
array('string', false, 1, 6),
|
||||
),
|
||||
'empty_length_opt' => array(
|
||||
array(),
|
||||
'',
|
||||
array('string', true, 1, 6),
|
||||
),
|
||||
));
|
||||
}
|
||||
}
|
190
tests/functions/validate_username_test.php
Normal file
190
tests/functions/validate_username_test.php
Normal file
@@ -0,0 +1,190 @@
|
||||
<?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';
|
||||
require_once dirname(__FILE__) . '/../../phpBB/includes/utf/utf_tools.php';
|
||||
require_once dirname(__FILE__) . '/../mock/cache.php';
|
||||
require_once dirname(__FILE__) . '/validate_data_helper.php';
|
||||
|
||||
class phpbb_functions_validate_data_test extends phpbb_database_test_case
|
||||
{
|
||||
protected $db;
|
||||
protected $cache;
|
||||
protected $helper;
|
||||
|
||||
public function getDataSet()
|
||||
{
|
||||
return $this->createXMLDataSet(dirname(__FILE__) . '/fixtures/validate_username.xml');
|
||||
}
|
||||
|
||||
protected function setUp()
|
||||
{
|
||||
parent::setUp();
|
||||
|
||||
$this->db = $this->new_dbal();
|
||||
$this->cache = new phpbb_mock_cache;
|
||||
$this->helper = new phpbb_functions_validate_data_helper($this);
|
||||
}
|
||||
|
||||
public function validate_username_data()
|
||||
{
|
||||
return array(
|
||||
array('USERNAME_CHARS_ANY', array(
|
||||
'foobar_allow' => array(),
|
||||
'foobar_ascii' => array(),
|
||||
'foobar_any' => array(),
|
||||
'foobar_alpha' => array(),
|
||||
'foobar_alpha_spacers' => array(),
|
||||
'foobar_letter_num' => array(),
|
||||
'foobar_letter_num_sp' => array(),
|
||||
'foobar_quot' => array('INVALID_CHARS'),
|
||||
'barfoo_disallow' => array('USERNAME_DISALLOWED'),
|
||||
'admin_taken' => array('USERNAME_TAKEN'),
|
||||
'group_taken' => array('USERNAME_TAKEN'),
|
||||
)),
|
||||
array('USERNAME_ALPHA_ONLY', array(
|
||||
'foobar_allow' => array(),
|
||||
'foobar_ascii' => array(),
|
||||
'foobar_any' => array('INVALID_CHARS'),
|
||||
'foobar_alpha' => array(),
|
||||
'foobar_alpha_spacers' => array('INVALID_CHARS'),
|
||||
'foobar_letter_num' => array(),
|
||||
'foobar_letter_num_sp' => array('INVALID_CHARS'),
|
||||
'foobar_quot' => array('INVALID_CHARS'),
|
||||
'barfoo_disallow' => array('USERNAME_DISALLOWED'),
|
||||
'admin_taken' => array('USERNAME_TAKEN'),
|
||||
'group_taken' => array('INVALID_CHARS'),
|
||||
)),
|
||||
array('USERNAME_ALPHA_SPACERS', array(
|
||||
'foobar_allow' => array(),
|
||||
'foobar_ascii' => array(),
|
||||
'foobar_any' => array('INVALID_CHARS'),
|
||||
'foobar_alpha' => array(),
|
||||
'foobar_alpha_spacers' => array(),
|
||||
'foobar_letter_num' => array(),
|
||||
'foobar_letter_num_sp' => array('INVALID_CHARS'),
|
||||
'foobar_quot' => array('INVALID_CHARS'),
|
||||
'barfoo_disallow' => array('USERNAME_DISALLOWED'),
|
||||
'admin_taken' => array('USERNAME_TAKEN'),
|
||||
'group_taken' => array('USERNAME_TAKEN'),
|
||||
)),
|
||||
array('USERNAME_LETTER_NUM', array(
|
||||
'foobar_allow' => array(),
|
||||
'foobar_ascii' => array(),
|
||||
'foobar_any' => array('INVALID_CHARS'),
|
||||
'foobar_alpha' => array(),
|
||||
'foobar_alpha_spacers' => array('INVALID_CHARS'),
|
||||
'foobar_letter_num' => array(),
|
||||
'foobar_letter_num_sp' => array('INVALID_CHARS'),
|
||||
'foobar_quot' => array('INVALID_CHARS'),
|
||||
'barfoo_disallow' => array('USERNAME_DISALLOWED'),
|
||||
'admin_taken' => array('USERNAME_TAKEN'),
|
||||
'group_taken' => array('INVALID_CHARS'),
|
||||
)),
|
||||
array('USERNAME_LETTER_NUM_SPACERS', array(
|
||||
'foobar_allow' => array(),
|
||||
'foobar_ascii' => array(),
|
||||
'foobar_any' => array('INVALID_CHARS'),
|
||||
'foobar_alpha' => array(),
|
||||
'foobar_alpha_spacers' => array(),
|
||||
'foobar_letter_num' => array(),
|
||||
'foobar_letter_num_sp' => array(),
|
||||
'foobar_quot' => array('INVALID_CHARS'),
|
||||
'barfoo_disallow' => array('USERNAME_DISALLOWED'),
|
||||
'admin_taken' => array('USERNAME_TAKEN'),
|
||||
'group_taken' => array('USERNAME_TAKEN'),
|
||||
)),
|
||||
array('USERNAME_ASCII', array(
|
||||
'foobar_allow' => array(),
|
||||
'foobar_ascii' => array(),
|
||||
'foobar_any' => array(),
|
||||
'foobar_alpha' => array(),
|
||||
'foobar_alpha_spacers' => array(),
|
||||
'foobar_letter_num' => array(),
|
||||
'foobar_letter_num_sp' => array('INVALID_CHARS'),
|
||||
'foobar_quot' => array('INVALID_CHARS'),
|
||||
'barfoo_disallow' => array('USERNAME_DISALLOWED'),
|
||||
'admin_taken' => array('USERNAME_TAKEN'),
|
||||
'group_taken' => array('USERNAME_TAKEN'),
|
||||
)),
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider validate_username_data
|
||||
*/
|
||||
public function test_validate_username($allow_name_chars, $expected)
|
||||
{
|
||||
global $cache, $config, $db;
|
||||
|
||||
$db = $this->db;
|
||||
$cache = $this->cache;
|
||||
$cache->put('_disallowed_usernames', array('barfoo'));
|
||||
|
||||
$config['allow_name_chars'] = $allow_name_chars;
|
||||
|
||||
$this->helper->assert_valid_data(array(
|
||||
'foobar_allow' => array(
|
||||
$expected['foobar_allow'],
|
||||
'foobar',
|
||||
array('username', 'foobar'),
|
||||
),
|
||||
'foobar_ascii' => array(
|
||||
$expected['foobar_ascii'],
|
||||
'foobar',
|
||||
array('username'),
|
||||
),
|
||||
'foobar_any' => array(
|
||||
$expected['foobar_any'],
|
||||
'f*~*^=oo_bar1',
|
||||
array('username'),
|
||||
),
|
||||
'foobar_alpha' => array(
|
||||
$expected['foobar_alpha'],
|
||||
'fo0Bar',
|
||||
array('username'),
|
||||
),
|
||||
'foobar_alpha_spacers' => array(
|
||||
$expected['foobar_alpha_spacers'],
|
||||
'Fo0-[B]_a+ R',
|
||||
array('username'),
|
||||
),
|
||||
'foobar_letter_num' => array(
|
||||
$expected['foobar_letter_num'],
|
||||
'fo0Bar0',
|
||||
array('username'),
|
||||
),
|
||||
'foobar_letter_num_sp' => array(
|
||||
$expected['foobar_letter_num_sp'],
|
||||
'Fö0-[B]_a+ R',
|
||||
array('username'),
|
||||
),
|
||||
'foobar_quot' => array(
|
||||
$expected['foobar_quot'],
|
||||
'"foobar"',
|
||||
array('username'),
|
||||
),
|
||||
'barfoo_disallow' => array(
|
||||
$expected['barfoo_disallow'],
|
||||
'barfoo',
|
||||
array('username'),
|
||||
),
|
||||
'admin_taken' => array(
|
||||
$expected['admin_taken'],
|
||||
'admin',
|
||||
array('username'),
|
||||
),
|
||||
'group_taken' => array(
|
||||
$expected['group_taken'],
|
||||
'foobar_group',
|
||||
array('username'),
|
||||
),
|
||||
));
|
||||
}
|
||||
}
|
@@ -53,6 +53,21 @@ class phpbb_mock_cache implements phpbb_cache_driver_interface
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Obtain disallowed usernames. Input data via standard put method.
|
||||
*/
|
||||
public function obtain_disallowed_usernames()
|
||||
{
|
||||
if (($usernames = $this->get('_disallowed_usernames')) !== false)
|
||||
{
|
||||
return $usernames;
|
||||
}
|
||||
else
|
||||
{
|
||||
return array();
|
||||
}
|
||||
}
|
||||
|
||||
public function checkVar(PHPUnit_Framework_Assert $test, $var_name, $data)
|
||||
{
|
||||
$test->assertTrue(isset($this->data[$var_name]));
|
||||
|
@@ -33,4 +33,17 @@ class phpbb_mock_user
|
||||
{
|
||||
$this->options[$item] = $value;
|
||||
}
|
||||
|
||||
public function check_ban($user_id = false, $user_ips = false, $user_email = false, $return = false)
|
||||
{
|
||||
$banned_users = $this->optionget('banned_users');
|
||||
foreach ($banned_users as $banned)
|
||||
{
|
||||
if ($banned == $user_id || $banned == $user_ips || $banned == $user_email)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
@@ -1,5 +1,13 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<dataset>
|
||||
<table name="phpbb_bookmarks">
|
||||
</table>
|
||||
<table name="phpbb_notifications">
|
||||
</table>
|
||||
<table name="phpbb_notification_types">
|
||||
</table>
|
||||
<table name="phpbb_topics_watch">
|
||||
</table>
|
||||
<table name="phpbb_user_notifications">
|
||||
</table>
|
||||
</dataset>
|
||||
|
@@ -53,7 +53,20 @@ class phpbb_session_continue_test extends phpbb_database_test_case
|
||||
*/
|
||||
public function test_session_begin_valid_session($session_id, $user_id, $user_agent, $ip, $expected_sessions, $expected_cookies, $message)
|
||||
{
|
||||
global $phpbb_container, $phpbb_root_path, $phpEx;
|
||||
|
||||
$db = $this->new_dbal();
|
||||
$config = new phpbb_config(array());
|
||||
$request = $this->getMock('phpbb_request');
|
||||
$user = $this->getMock('phpbb_user');
|
||||
|
||||
$auth_provider = new phpbb_auth_provider_db($db, $config, $request, $user, $phpbb_root_path, $phpEx);
|
||||
$phpbb_container = $this->getMock('Symfony\Component\DependencyInjection\ContainerInterface');
|
||||
$phpbb_container->expects($this->any())
|
||||
->method('get')
|
||||
->with('auth.provider.db')
|
||||
->will($this->returnValue($auth_provider));
|
||||
|
||||
$session_factory = new phpbb_session_testable_factory;
|
||||
$session_factory->set_cookies(array(
|
||||
'_sid' => $session_id,
|
||||
|
@@ -9,7 +9,7 @@
|
||||
|
||||
require_once dirname(__FILE__) . '/testable_factory.php';
|
||||
|
||||
class phpbb_session_init_test extends phpbb_database_test_case
|
||||
class phpbb_session_creation_test extends phpbb_database_test_case
|
||||
{
|
||||
public function getDataSet()
|
||||
{
|
||||
@@ -20,7 +20,20 @@ class phpbb_session_init_test extends phpbb_database_test_case
|
||||
|
||||
public function test_login_session_create()
|
||||
{
|
||||
global $phpbb_container, $phpbb_root_path, $phpEx;
|
||||
|
||||
$db = $this->new_dbal();
|
||||
$config = new phpbb_config(array());
|
||||
$request = $this->getMock('phpbb_request');
|
||||
$user = $this->getMock('phpbb_user');
|
||||
|
||||
$auth_provider = new phpbb_auth_provider_db($db, $config, $request, $user, $phpbb_root_path, $phpEx);
|
||||
$phpbb_container = $this->getMock('Symfony\Component\DependencyInjection\ContainerInterface');
|
||||
$phpbb_container->expects($this->any())
|
||||
->method('get')
|
||||
->with('auth.provider.db')
|
||||
->will($this->returnValue($auth_provider));
|
||||
|
||||
$session_factory = new phpbb_session_testable_factory;
|
||||
|
||||
$session = $session_factory->get_session($db);
|
||||
@@ -34,10 +47,11 @@ class phpbb_session_init_test extends phpbb_database_test_case
|
||||
$this->assertSqlResultEquals(
|
||||
array(array('session_user_id' => 3)),
|
||||
$sql,
|
||||
'Check if exacly one session for user id 3 was created'
|
||||
'Check if exactly one session for user id 3 was created'
|
||||
);
|
||||
|
||||
$cookie_expire = $session->time_now + 31536000; // default is one year
|
||||
$one_year_in_seconds = 365 * 24 * 60 * 60;
|
||||
$cookie_expire = $session->time_now + $one_year_in_seconds;
|
||||
|
||||
$session->check_cookies($this, array(
|
||||
'u' => array(null, $cookie_expire),
|
@@ -83,9 +83,14 @@ class phpbb_template_template_test_case extends phpbb_test_case
|
||||
$this->markTestSkipped("Template cache directory ({$template_cache_dir}) is not writable.");
|
||||
}
|
||||
|
||||
foreach (glob($this->template->cachepath . '*') as $file)
|
||||
$file_array = scandir($template_cache_dir);
|
||||
$file_prefix = basename($this->template->cachepath);
|
||||
foreach ($file_array as $file)
|
||||
{
|
||||
unlink($file);
|
||||
if (strpos($file, $file_prefix) === 0)
|
||||
{
|
||||
unlink($template_cache_dir . '/' . $file);
|
||||
}
|
||||
}
|
||||
|
||||
$this->setup_engine();
|
||||
@@ -95,9 +100,15 @@ class phpbb_template_template_test_case extends phpbb_test_case
|
||||
{
|
||||
if (is_object($this->template))
|
||||
{
|
||||
foreach (glob($this->template->cachepath . '*') as $file)
|
||||
$template_cache_dir = dirname($this->template->cachepath);
|
||||
$file_array = scandir($template_cache_dir);
|
||||
$file_prefix = basename($this->template->cachepath);
|
||||
foreach ($file_array as $file)
|
||||
{
|
||||
unlink($file);
|
||||
if (strpos($file, $file_prefix) === 0)
|
||||
{
|
||||
unlink($template_cache_dir . '/' . $file);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -62,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();
|
||||
|
@@ -479,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'])
|
||||
{
|
||||
@@ -541,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))
|
||||
|
@@ -219,15 +219,19 @@ class phpbb_functional_test_case extends phpbb_test_case
|
||||
|
||||
self::recreate_database(self::$config);
|
||||
|
||||
if (file_exists($phpbb_root_path . "config.$phpEx"))
|
||||
$config_file = $phpbb_root_path . "config.$phpEx";
|
||||
$config_file_dev = $phpbb_root_path . "config_dev.$phpEx";
|
||||
$config_file_test = $phpbb_root_path . "config_test.$phpEx";
|
||||
|
||||
if (file_exists($config_file))
|
||||
{
|
||||
if (!file_exists($phpbb_root_path . "config_dev.$phpEx"))
|
||||
if (!file_exists($config_file_dev))
|
||||
{
|
||||
rename($phpbb_root_path . "config.$phpEx", $phpbb_root_path . "config_dev.$phpEx");
|
||||
rename($config_file, $config_file_dev);
|
||||
}
|
||||
else
|
||||
{
|
||||
unlink($phpbb_root_path . "config.$phpEx");
|
||||
unlink($config_file);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -251,10 +255,12 @@ class phpbb_functional_test_case extends phpbb_test_case
|
||||
self::assertContains('Welcome to Installation', $crawler->filter('#main')->text());
|
||||
$form = $crawler->selectButton('submit')->form();
|
||||
|
||||
// install/index.php?mode=install&sub=requirements
|
||||
$crawler = self::submit($form);
|
||||
self::assertContains('Installation compatibility', $crawler->filter('#main')->text());
|
||||
$form = $crawler->selectButton('submit')->form();
|
||||
|
||||
// install/index.php?mode=install&sub=database
|
||||
$crawler = self::submit($form);
|
||||
self::assertContains('Database configuration', $crawler->filter('#main')->text());
|
||||
$form = $crawler->selectButton('submit')->form(array(
|
||||
@@ -268,10 +274,12 @@ class phpbb_functional_test_case extends phpbb_test_case
|
||||
'table_prefix' => self::$config['table_prefix'],
|
||||
));
|
||||
|
||||
// install/index.php?mode=install&sub=database
|
||||
$crawler = self::submit($form);
|
||||
self::assertContains('Successful connection', $crawler->filter('#main')->text());
|
||||
$form = $crawler->selectButton('submit')->form();
|
||||
|
||||
// install/index.php?mode=install&sub=administrator
|
||||
$crawler = self::submit($form);
|
||||
self::assertContains('Administrator configuration', $crawler->filter('#main')->text());
|
||||
$form = $crawler->selectButton('submit')->form(array(
|
||||
@@ -282,16 +290,38 @@ class phpbb_functional_test_case extends phpbb_test_case
|
||||
'board_email' => 'nobody@example.com',
|
||||
));
|
||||
|
||||
// install/index.php?mode=install&sub=administrator
|
||||
$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();
|
||||
// We have to skip install/index.php?mode=install&sub=config_file
|
||||
// because that step will create a config.php file if phpBB has the
|
||||
// permission to do so. We have to create the config file on our own
|
||||
// in order to get the DEBUG constants defined.
|
||||
$config_php_data = phpbb_create_config_file_data(self::$config, self::$config['dbms'], true, true);
|
||||
$config_created = file_put_contents($config_file, $config_php_data) !== false;
|
||||
if (!$config_created)
|
||||
{
|
||||
self::markTestSkipped("Could not write $config_file file.");
|
||||
}
|
||||
|
||||
$crawler = self::submit($form);
|
||||
// We also have to create a install lock that is normally created by
|
||||
// the installer. The file will be removed by the final step of the
|
||||
// installer.
|
||||
$install_lock_file = $phpbb_root_path . 'cache/install_lock';
|
||||
$lock_created = file_put_contents($install_lock_file, '') !== false;
|
||||
if (!$lock_created)
|
||||
{
|
||||
self::markTestSkipped("Could not create $lock_created file.");
|
||||
}
|
||||
@chmod($install_lock_file, 0666);
|
||||
|
||||
// install/index.php?mode=install&sub=advanced
|
||||
$form_data = $form->getValues();
|
||||
unset($form_data['submit']);
|
||||
|
||||
$crawler = self::request('POST', 'install/index.php?mode=install&sub=advanced', $form_data);
|
||||
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,
|
||||
@@ -308,14 +338,17 @@ class phpbb_functional_test_case extends phpbb_test_case
|
||||
'script_path' => $parseURL['path'],
|
||||
));
|
||||
|
||||
// install/index.php?mode=install&sub=create_table
|
||||
$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();
|
||||
|
||||
// install/index.php?mode=install&sub=final
|
||||
$crawler = self::submit($form);
|
||||
self::assertContains('You have successfully installed', $crawler->text());
|
||||
copy($phpbb_root_path . "config.$phpEx", $phpbb_root_path . "config_test.$phpEx");
|
||||
|
||||
copy($config_file, $config_file_test);
|
||||
}
|
||||
|
||||
static private function recreate_database($config)
|
||||
@@ -703,4 +736,105 @@ class phpbb_functional_test_case extends phpbb_test_case
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a topic
|
||||
*
|
||||
* Be sure to login before creating
|
||||
*
|
||||
* @param int $forum_id
|
||||
* @param string $subject
|
||||
* @param string $message
|
||||
* @param array $additional_form_data Any additional form data to be sent in the request
|
||||
* @return array post_id, topic_id
|
||||
*/
|
||||
public function create_topic($forum_id, $subject, $message, $additional_form_data = array())
|
||||
{
|
||||
$posting_url = "posting.php?mode=post&f={$forum_id}&sid={$this->sid}";
|
||||
|
||||
$form_data = array_merge(array(
|
||||
'subject' => $subject,
|
||||
'message' => $message,
|
||||
'post' => true,
|
||||
), $additional_form_data);
|
||||
|
||||
return self::submit_post($posting_url, 'POST_TOPIC', $form_data);
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a post
|
||||
*
|
||||
* Be sure to login before creating
|
||||
*
|
||||
* @param int $forum_id
|
||||
* @param string $subject
|
||||
* @param string $message
|
||||
* @param array $additional_form_data Any additional form data to be sent in the request
|
||||
* @return array post_id, topic_id
|
||||
*/
|
||||
public function create_post($forum_id, $topic_id, $subject, $message, $additional_form_data = array())
|
||||
{
|
||||
$posting_url = "posting.php?mode=reply&f={$forum_id}&t={$topic_id}&sid={$this->sid}";
|
||||
|
||||
$form_data = array_merge(array(
|
||||
'subject' => $subject,
|
||||
'message' => $message,
|
||||
'post' => true,
|
||||
), $additional_form_data);
|
||||
|
||||
return self::submit_post($posting_url, 'POST_REPLY', $form_data);
|
||||
}
|
||||
|
||||
/**
|
||||
* Helper for submitting posts
|
||||
*
|
||||
* @param string $posting_url
|
||||
* @param string $posting_contains
|
||||
* @param array $form_data
|
||||
* @return array post_id, topic_id
|
||||
*/
|
||||
protected function submit_post($posting_url, $posting_contains, $form_data)
|
||||
{
|
||||
$this->add_lang('posting');
|
||||
|
||||
$crawler = self::request('GET', $posting_url);
|
||||
$this->assertContains($this->lang($posting_contains), $crawler->filter('html')->text());
|
||||
|
||||
$hidden_fields = array(
|
||||
$crawler->filter('[type="hidden"]')->each(function ($node, $i) {
|
||||
return array('name' => $node->getAttribute('name'), 'value' => $node->getAttribute('value'));
|
||||
}),
|
||||
);
|
||||
|
||||
foreach ($hidden_fields as $fields)
|
||||
{
|
||||
foreach($fields as $field)
|
||||
{
|
||||
$form_data[$field['name']] = $field['value'];
|
||||
}
|
||||
}
|
||||
|
||||
// Bypass time restriction that said that if the lastclick time (i.e. time when the form was opened)
|
||||
// is not at least 2 seconds before submission, cancel the form
|
||||
$form_data['lastclick'] = 0;
|
||||
|
||||
// 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 = 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();
|
||||
|
||||
$matches = $topic_id = $post_id = false;
|
||||
preg_match_all('#&t=([0-9]+)(&p=([0-9]+))?#', $url, $matches);
|
||||
|
||||
$topic_id = (int) (isset($matches[1][0])) ? $matches[1][0] : 0;
|
||||
$post_id = (int) (isset($matches[3][0])) ? $matches[3][0] : 0;
|
||||
|
||||
return array(
|
||||
'topic_id' => $topic_id,
|
||||
'post_id' => $post_id,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
@@ -18,6 +18,56 @@ class phpbb_test_case_helpers
|
||||
$this->test_case = $test_case;
|
||||
}
|
||||
|
||||
/**
|
||||
* 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;
|
||||
|
||||
if (file_exists($phpbb_root_path . 'ext/'))
|
||||
{
|
||||
// First, move any extensions setup on the board to a temp directory
|
||||
$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->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;
|
||||
|
||||
// Remove all of the files we copied from test ext -> board ext
|
||||
$this->empty_dir($phpbb_root_path . 'ext/');
|
||||
|
||||
// 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 from board ext -> temp_ext
|
||||
$this->empty_dir($phpbb_root_path . 'store/temp_ext/');
|
||||
}
|
||||
|
||||
if (file_exists($phpbb_root_path . 'store/temp_ext/'))
|
||||
{
|
||||
$this->empty_dir($phpbb_root_path . 'store/temp_ext/');
|
||||
}
|
||||
}
|
||||
|
||||
public function setExpectedTriggerError($errno, $message = '')
|
||||
{
|
||||
$exceptionName = '';
|
||||
@@ -202,27 +252,6 @@ class phpbb_test_case_helpers
|
||||
return $copied_files;
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove files/directories that are listed in an array
|
||||
* Designed for use with $this->copy_dir()
|
||||
*
|
||||
* @param array $file_list
|
||||
*/
|
||||
public function remove_files($file_list)
|
||||
{
|
||||
foreach ($file_list as $file)
|
||||
{
|
||||
if (is_dir($file))
|
||||
{
|
||||
rmdir($file);
|
||||
}
|
||||
else
|
||||
{
|
||||
unlink($file);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Empty directory (remove any subdirectories/files below)
|
||||
*
|
||||
|
@@ -59,27 +59,52 @@ class phpbb_tests_tree_nestedset_forum_base extends phpbb_database_test_case
|
||||
$this->set = new phpbb_tree_nestedset_forum($this->db, $this->lock, 'phpbb_forums');
|
||||
|
||||
$this->set_up_forums();
|
||||
|
||||
$sql = "UPDATE phpbb_forums
|
||||
SET forum_parents = 'a:0:{}'";
|
||||
$this->db->sql_query($sql);
|
||||
}
|
||||
|
||||
protected function set_up_forums()
|
||||
{
|
||||
$this->create_forum('Parent with two flat children');
|
||||
$this->create_forum('Flat child #1', 1);
|
||||
$this->create_forum('Flat child #2', 1);
|
||||
static $forums;
|
||||
|
||||
$this->create_forum('Parent with two nested children');
|
||||
$this->create_forum('Nested child #1', 4);
|
||||
$this->create_forum('Nested child #2', 5);
|
||||
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 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);
|
||||
$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)
|
||||
|
Reference in New Issue
Block a user