mirror of
https://github.com/phpbb/phpbb.git
synced 2025-08-13 12:14:06 +02:00
Merge branch 'develop-olympus' of https://github.com/phpbb/phpbb3 into ticket/11548
This commit is contained in:
@@ -47,9 +47,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 = 'mysqli';
|
||||
@@ -114,8 +116,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
|
||||
|
@@ -18,6 +18,11 @@ class phpbb_dbal_order_lower_test extends phpbb_database_test_case
|
||||
{
|
||||
$db = $this->new_dbal();
|
||||
|
||||
if (strpos($db->sql_layer, 'mysql') === 0 && version_compare($db->sql_server_info(true, false), '5.6', '>='))
|
||||
{
|
||||
$this->markTestSkipped('MySQL 5.6 fails to order things correctly. See also: http://tracker.phpbb.com/browse/PHPBB3-11571 http://bugs.mysql.com/bug.php?id=69005');
|
||||
}
|
||||
|
||||
// http://tracker.phpbb.com/browse/PHPBB3-10507
|
||||
// Test ORDER BY LOWER(style_name)
|
||||
$db->sql_return_on_error(true);
|
||||
@@ -55,7 +60,7 @@ class phpbb_dbal_order_lower_test extends phpbb_database_test_case
|
||||
'theme_id' => 2,
|
||||
'imageset_id' => 2
|
||||
)
|
||||
),
|
||||
),
|
||||
$db->sql_fetchrowset($result)
|
||||
);
|
||||
}
|
||||
|
@@ -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());
|
||||
}
|
||||
}
|
||||
|
@@ -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());
|
||||
}
|
||||
}
|
||||
|
@@ -35,11 +35,10 @@ abstract class phpbb_functional_common_groups_test extends phpbb_functional_test
|
||||
$this->add_lang(array('ucp', 'acp/groups'));
|
||||
|
||||
// Manage Administrators group
|
||||
$crawler = $this->request('GET', $this->get_url() . '&g=5&sid=' . $this->sid);
|
||||
$this->assert_response_success();
|
||||
$crawler = self::request('GET', $this->get_url() . '&g=5&sid=' . $this->sid);
|
||||
$form = $crawler->selectButton($this->lang('SUBMIT'))->form();
|
||||
$form['group_colour']->setValue($input);
|
||||
$crawler = $this->client->submit($form);
|
||||
$crawler = self::submit($form);
|
||||
$this->assertContains($this->lang($expected), $crawler->text());
|
||||
}
|
||||
}
|
||||
|
45
tests/functional/forum_style_test.php
Normal file
45
tests/functional/forum_style_test.php
Normal file
@@ -0,0 +1,45 @@
|
||||
<?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_forum_style_test extends phpbb_functional_test_case
|
||||
{
|
||||
public function test_default_forum_style()
|
||||
{
|
||||
$crawler = self::request('GET', 'viewtopic.php?t=1&f=2');
|
||||
$this->assertContains('styles/prosilver/', $crawler->filter('head > link[rel=stylesheet]')->attr('href'));
|
||||
|
||||
$crawler = self::request('GET', 'viewtopic.php?t=1');
|
||||
$this->assertContains('styles/prosilver/', $crawler->filter('head > link[rel=stylesheet]')->attr('href'));
|
||||
|
||||
$crawler = self::request('GET', 'viewtopic.php?t=1&view=next');
|
||||
$this->assertContains('styles/prosilver/', $crawler->filter('head > link[rel=stylesheet]')->attr('href'));
|
||||
}
|
||||
|
||||
public function test_custom_forum_style()
|
||||
{
|
||||
$db = $this->get_db();
|
||||
$this->add_style(2, 'test_style');
|
||||
$db->sql_query('UPDATE ' . FORUMS_TABLE . ' SET forum_style = 2 WHERE forum_id = 2');
|
||||
|
||||
$crawler = self::request('GET', 'viewtopic.php?t=1&f=2');
|
||||
$this->assertContains('styles/test_style/', $crawler->filter('head > link[rel=stylesheet]')->attr('href'));
|
||||
|
||||
$crawler = self::request('GET', 'viewtopic.php?t=1');
|
||||
$this->assertContains('styles/test_style/', $crawler->filter('head > link[rel=stylesheet]')->attr('href'));
|
||||
|
||||
$crawler = self::request('GET', 'viewtopic.php?t=1&view=next');
|
||||
$this->assertContains('styles/test_style/', $crawler->filter('head > link[rel=stylesheet]')->attr('href'));
|
||||
|
||||
$db->sql_query('UPDATE ' . FORUMS_TABLE . ' SET forum_style = 0 WHERE forum_id = 2');
|
||||
$this->delete_style(2, 'test_style');
|
||||
}
|
||||
}
|
@@ -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();
|
||||
|
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);
|
||||
}
|
||||
}
|
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>
|
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>
|
75
tests/functions/get_remote_file_test.php
Normal file
75
tests/functions/get_remote_file_test.php
Normal file
@@ -0,0 +1,75 @@
|
||||
<?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_admin.php';
|
||||
|
||||
/**
|
||||
* @group slow
|
||||
*/
|
||||
class phpbb_functions_get_remote_file extends phpbb_test_case
|
||||
{
|
||||
public function test_version_phpbb_com()
|
||||
{
|
||||
$hostname = 'version.phpbb.com';
|
||||
|
||||
if (!phpbb_checkdnsrr($hostname, 'A'))
|
||||
{
|
||||
$this->markTestSkipped(sprintf(
|
||||
'Could not find a DNS record for hostname %s. ' .
|
||||
'Assuming network is down.',
|
||||
$hostname
|
||||
));
|
||||
}
|
||||
|
||||
$errstr = $errno = null;
|
||||
$file = get_remote_file($hostname, '/phpbb', '30x.txt', $errstr, $errno);
|
||||
|
||||
$this->assertNotEquals(
|
||||
0,
|
||||
strlen($file),
|
||||
'Failed asserting that the response is not empty.'
|
||||
);
|
||||
|
||||
$this->assertSame(
|
||||
'',
|
||||
$errstr,
|
||||
'Failed asserting that the error string is empty.'
|
||||
);
|
||||
|
||||
$this->assertSame(
|
||||
0,
|
||||
$errno,
|
||||
'Failed asserting that the error number is 0 (i.e. no error occurred).'
|
||||
);
|
||||
|
||||
$lines = explode("\n", $file);
|
||||
|
||||
$this->assertGreaterThanOrEqual(
|
||||
2,
|
||||
sizeof($lines),
|
||||
'Failed asserting that the version file has at least two lines.'
|
||||
);
|
||||
|
||||
$this->assertStringStartsWith(
|
||||
'3.',
|
||||
$lines[0],
|
||||
"Failed asserting that the first line of the version file starts with '3.'"
|
||||
);
|
||||
|
||||
$this->assertNotSame(
|
||||
false,
|
||||
filter_var($lines[1], FILTER_VALIDATE_URL),
|
||||
'Failed asserting that the second line of the version file is a valid URL.'
|
||||
);
|
||||
|
||||
$this->assertContains('http', $lines[1]);
|
||||
$this->assertContains('phpbb.com', $lines[1], '', true);
|
||||
}
|
||||
}
|
238
tests/functions/obtain_online_test.php
Normal file
238
tests/functions/obtain_online_test.php
Normal file
@@ -0,0 +1,238 @@
|
||||
<?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';
|
||||
require_once dirname(__FILE__) . '/../../phpBB/includes/auth.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 5REG_USERS_TOTAL_AND 2HIDDEN_USERS_TOTAL 3',
|
||||
)),
|
||||
array(0, true, array(
|
||||
'online_userlist' => 'REGISTERED_USERS 2, 3',
|
||||
'l_online_users' => 'ONLINE_USERS_TOTAL 7REG_USERS_TOTAL 2HIDDEN_USERS_TOTAL_AND 3GUEST_USERS_TOTAL 2',
|
||||
)),
|
||||
array(1, false, array(
|
||||
'online_userlist' => 'BROWSING_FORUM 3',
|
||||
'l_online_users' => 'ONLINE_USERS_TOTAL 2REG_USER_TOTAL_AND 1HIDDEN_USER_TOTAL 1',
|
||||
)),
|
||||
array(1, true, array(
|
||||
'online_userlist' => 'BROWSING_FORUM_GUEST 3 1',
|
||||
'l_online_users' => 'ONLINE_USERS_TOTAL 3REG_USER_TOTAL 1HIDDEN_USER_TOTAL_AND 1GUEST_USER_TOTAL 1',
|
||||
)),
|
||||
array(2, false, array(
|
||||
'online_userlist' => 'BROWSING_FORUM NO_ONLINE_USERS',
|
||||
'l_online_users' => 'ONLINE_USERS_ZERO_TOTAL 0REG_USERS_ZERO_TOTAL_AND 0HIDDEN_USERS_ZERO_TOTAL 0',
|
||||
)),
|
||||
array(2, true, array(
|
||||
'online_userlist' => 'BROWSING_FORUM_GUESTS NO_ONLINE_USERS 0',
|
||||
'l_online_users' => 'ONLINE_USERS_ZERO_TOTAL 0REG_USERS_ZERO_TOTAL 0HIDDEN_USERS_ZERO_TOTAL_AND 0GUEST_USERS_ZERO_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;
|
||||
$config['load_online_guests'] = $display_guests;
|
||||
$user->lang = $this->load_language();
|
||||
$auth = $this->getMock('auth');
|
||||
$acl_get_map = array(
|
||||
array('u_viewonline', true),
|
||||
);
|
||||
$auth->expects($this->any())
|
||||
->method('acl_get')
|
||||
->with($this->stringContains('_'),
|
||||
$this->anything())
|
||||
->will($this->returnValueMap($acl_get_map));
|
||||
|
||||
$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()
|
||||
{
|
||||
$lang = 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',
|
||||
);
|
||||
$vars_online = array('ONLINE', 'REG', 'HIDDEN', 'GUEST');
|
||||
foreach ($vars_online as $online)
|
||||
{
|
||||
$lang = array_merge($lang, array(
|
||||
$online . '_USERS_ZERO_TOTAL' => $online . '_USERS_ZERO_TOTAL %d',
|
||||
$online . '_USER_TOTAL' => $online . '_USER_TOTAL %d',
|
||||
$online . '_USERS_TOTAL' => $online . '_USERS_TOTAL %d',
|
||||
$online . '_USERS_ZERO_TOTAL_AND' => $online . '_USERS_ZERO_TOTAL_AND %d',
|
||||
$online . '_USER_TOTAL_AND' => $online . '_USER_TOTAL_AND %d',
|
||||
$online . '_USERS_TOTAL_AND' => $online . '_USERS_TOTAL_AND %d',
|
||||
));
|
||||
}
|
||||
return $lang;
|
||||
}
|
||||
}
|
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'),
|
||||
),
|
||||
));
|
||||
}
|
||||
}
|
@@ -74,6 +74,21 @@ class phpbb_mock_cache
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* 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 set_bots($bots)
|
||||
{
|
||||
$this->data['_bots'] = $bots;
|
||||
|
@@ -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;
|
||||
}
|
||||
}
|
||||
|
@@ -10,7 +10,7 @@
|
||||
require_once dirname(__FILE__) . '/../mock/cache.php';
|
||||
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()
|
||||
{
|
||||
@@ -35,10 +35,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),
|
@@ -69,9 +69,14 @@ class phpbb_template_template_test 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);
|
||||
}
|
||||
}
|
||||
|
||||
$GLOBALS['config'] = array(
|
||||
@@ -84,9 +89,15 @@ class phpbb_template_template_test 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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -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();
|
||||
@@ -123,6 +156,8 @@ abstract class phpbb_database_test_case extends PHPUnit_Extensions_Database_Test
|
||||
$db = new $dbal();
|
||||
$db->sql_connect($config['dbhost'], $config['dbuser'], $config['dbpasswd'], $config['dbname'], $config['dbport']);
|
||||
|
||||
$this->db_connections[] = $db;
|
||||
|
||||
return $db;
|
||||
}
|
||||
|
||||
|
@@ -480,12 +480,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'])
|
||||
{
|
||||
@@ -542,7 +563,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))
|
||||
|
@@ -14,8 +14,9 @@ require_once __DIR__ . '/../../phpBB/includes/cache.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;
|
||||
@@ -40,6 +41,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'];
|
||||
|
||||
if (!isset(self::$config['phpbb_functional_url']))
|
||||
{
|
||||
@@ -59,12 +61,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();
|
||||
@@ -72,9 +74,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
|
||||
@@ -136,40 +184,118 @@ class phpbb_functional_test_case extends phpbb_test_case
|
||||
self::$config['table_prefix'] = 'phpbb_';
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
||||
// 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(
|
||||
'email_enable' => false,
|
||||
'smtp_delivery' => false,
|
||||
'smtp_host' => '',
|
||||
'smtp_auth' => '',
|
||||
'smtp_user' => '',
|
||||
'smtp_pass' => '',
|
||||
$crawler = self::request('GET', 'install/index.php?mode=install');
|
||||
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(
|
||||
// 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'],
|
||||
));
|
||||
|
||||
// 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(
|
||||
'default_lang' => 'en',
|
||||
'admin_name' => 'admin',
|
||||
'admin_pass1' => 'adminadmin',
|
||||
'admin_pass2' => 'adminadmin',
|
||||
'board_email1' => 'nobody@example.com',
|
||||
'board_email2' => '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();
|
||||
|
||||
// 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'], array(), true, true);
|
||||
$config_created = file_put_contents($config_file, $config_php_data) !== false;
|
||||
if (!$config_created)
|
||||
{
|
||||
self::markTestSkipped("Could not write $config_file file.");
|
||||
}
|
||||
|
||||
// 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,
|
||||
'smtp_delivery' => true,
|
||||
'smtp_host' => 'nxdomain.phpbb.com',
|
||||
'smtp_auth' => 'PLAIN',
|
||||
'smtp_user' => 'nxuser',
|
||||
'smtp_pass' => 'nxpass',
|
||||
'cookie_secure' => false,
|
||||
'force_server_vars' => false,
|
||||
'server_protocol' => $parseURL['scheme'] . '://',
|
||||
@@ -177,46 +303,18 @@ 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);
|
||||
// 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();
|
||||
|
||||
$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);
|
||||
// install/index.php?mode=install&sub=final
|
||||
$crawler = self::submit($form);
|
||||
self::assertContains('You have successfully installed', $crawler->text());
|
||||
|
||||
$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'], array(), true, true));
|
||||
|
||||
$content = self::do_request('final', $data);
|
||||
self::assertNotSame(false, $content);
|
||||
self::assertContains('You have successfully installed', $content);
|
||||
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);
|
||||
copy($config_file, $config_file_test);
|
||||
}
|
||||
|
||||
static private function recreate_database($config)
|
||||
@@ -225,6 +323,90 @@ class phpbb_functional_test_case extends phpbb_test_case
|
||||
$db_conn_mgr->recreate_db();
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a new style
|
||||
*
|
||||
* @param string $style_id Style ID
|
||||
* @param string $style_path Style directory
|
||||
* @param string $parent_style_id Parent style id. Default = 1
|
||||
* @param string $parent_style_path Parent style directory. Default = 'prosilver'
|
||||
*/
|
||||
protected function add_style($style_id, $style_path, $parent_style_id = 1, $parent_style_path = 'prosilver')
|
||||
{
|
||||
global $phpbb_root_path;
|
||||
|
||||
$db = $this->get_db();
|
||||
$sql = 'INSERT INTO ' . STYLES_TABLE . ' ' . $db->sql_build_array('INSERT', array(
|
||||
'style_id' => $style_id,
|
||||
'style_name' => $style_path,
|
||||
'style_copyright' => '',
|
||||
'style_active' => 1,
|
||||
'template_id' => $style_id,
|
||||
'theme_id' => $style_id,
|
||||
'imageset_id' => $style_id,
|
||||
));
|
||||
$db->sql_query($sql);
|
||||
|
||||
$sql = 'INSERT INTO ' . STYLES_IMAGESET_TABLE . ' ' . $db->sql_build_array('INSERT', array(
|
||||
'imageset_id' => $style_id,
|
||||
'imageset_name' => $style_path,
|
||||
'imageset_copyright' => '',
|
||||
'imageset_path' => $style_path,
|
||||
));
|
||||
$db->sql_query($sql);
|
||||
|
||||
$sql = 'INSERT INTO ' . STYLES_TEMPLATE_TABLE . ' ' . $db->sql_build_array('INSERT', array(
|
||||
'template_id' => $style_id,
|
||||
'template_name' => $style_path,
|
||||
'template_copyright' => '',
|
||||
'template_path' => $style_path,
|
||||
'bbcode_bitfield' => 'kNg=',
|
||||
'template_inherits_id' => $parent_style_id,
|
||||
'template_inherit_path' => $parent_style_path,
|
||||
));
|
||||
$db->sql_query($sql);
|
||||
|
||||
$sql = 'INSERT INTO ' . STYLES_THEME_TABLE . ' ' . $db->sql_build_array('INSERT', array(
|
||||
'theme_id' => $style_id,
|
||||
'theme_name' => $style_path,
|
||||
'theme_copyright' => '',
|
||||
'theme_path' => $style_path,
|
||||
'theme_storedb' => 0,
|
||||
'theme_mtime' => 0,
|
||||
'theme_data' => '',
|
||||
));
|
||||
$db->sql_query($sql);
|
||||
|
||||
if ($style_path != 'prosilver' && $style_path != 'subsilver2')
|
||||
{
|
||||
@mkdir($phpbb_root_path . 'styles/' . $style_path, 0777);
|
||||
@mkdir($phpbb_root_path . 'styles/' . $style_path . '/template', 0777);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove temporary style created by add_style()
|
||||
*
|
||||
* @param string $style_id Style ID
|
||||
* @param string $style_path Style directory
|
||||
*/
|
||||
protected function delete_style($style_id, $style_path)
|
||||
{
|
||||
global $phpbb_root_path;
|
||||
|
||||
$db = $this->get_db();
|
||||
$db->sql_query('DELETE FROM ' . STYLES_TABLE . ' WHERE style_id = ' . $style_id);
|
||||
$db->sql_query('DELETE FROM ' . STYLES_IMAGESET_TABLE . ' WHERE imageset_id = ' . $style_id);
|
||||
$db->sql_query('DELETE FROM ' . STYLES_TEMPLATE_TABLE . ' WHERE template_id = ' . $style_id);
|
||||
$db->sql_query('DELETE FROM ' . STYLES_THEME_TABLE . ' WHERE theme_id = ' . $style_id);
|
||||
|
||||
if ($style_path != 'prosilver' && $style_path != 'subsilver2')
|
||||
{
|
||||
@rmdir($phpbb_root_path . 'styles/' . $style_path . '/template');
|
||||
@rmdir($phpbb_root_path . 'styles/' . $style_path);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a new user with limited permissions
|
||||
*
|
||||
@@ -270,7 +452,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);
|
||||
}
|
||||
@@ -279,15 +461,14 @@ class phpbb_functional_test_case extends phpbb_test_case
|
||||
{
|
||||
$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);
|
||||
@@ -314,7 +495,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();
|
||||
@@ -323,11 +504,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);
|
||||
@@ -380,21 +560,37 @@ class phpbb_functional_test_case extends phpbb_test_case
|
||||
return call_user_func_array('sprintf', $args);
|
||||
}
|
||||
|
||||
/**
|
||||
* 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());
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user