diff --git a/phpunit.xml.dist b/phpunit.xml.dist index a2bf2288cc..27dee48aac 100644 --- a/phpunit.xml.dist +++ b/phpunit.xml.dist @@ -19,6 +19,7 @@ + functional slow diff --git a/phpunit.xml.functional b/phpunit.xml.functional new file mode 100644 index 0000000000..9facbcff8b --- /dev/null +++ b/phpunit.xml.functional @@ -0,0 +1,48 @@ + + + + + + ./tests/ + + + + + + functional + + + + + + ./tests/ + + + ./phpBB/includes/ + + ./phpBB/includes/db/firebird.php + ./phpBB/includes/db/mysql.php + ./phpBB/includes/db/mysqli.php + ./phpBB/includes/db/mssql.php + ./phpBB/includes/db/mssql_odbc.php + ./phpBB/includes/db/mssqlnative.php + ./phpBB/includes/db/oracle.php + ./phpBB/includes/db/postgres.php + ./phpBB/includes/db/sqlite.php + ./phpBB/includes/search/fulltext_native.php + ./phpBB/includes/search/fulltext_mysql.php + ./phpBB/includes/captcha/ + + + + diff --git a/tests/bootstrap.php b/tests/bootstrap.php index b7c3534cde..9a1c8857c0 100644 --- a/tests/bootstrap.php +++ b/tests/bootstrap.php @@ -39,3 +39,4 @@ require_once 'test_framework/phpbb_test_case_helpers.php'; require_once 'test_framework/phpbb_test_case.php'; require_once 'test_framework/phpbb_database_test_case.php'; require_once 'test_framework/phpbb_database_test_connection_manager.php'; +require_once 'test_framework/phpbb_functional_test_case.php'; diff --git a/tests/functional/browse_test.php b/tests/functional/browse_test.php new file mode 100644 index 0000000000..9c1d04f35d --- /dev/null +++ b/tests/functional/browse_test.php @@ -0,0 +1,26 @@ +request('GET', 'index.php'); + $this->assertGreaterThan(0, $crawler->filter('.topiclist')->count()); + } + + public function test_viewforum() + { + $crawler = $this->request('GET', 'viewforum.php?f=2'); + $this->assertGreaterThan(0, $crawler->filter('.topiclist')->count()); + } +} diff --git a/tests/test_framework/phpbb_functional_test_case.php b/tests/test_framework/phpbb_functional_test_case.php new file mode 100644 index 0000000000..ddaa894061 --- /dev/null +++ b/tests/test_framework/phpbb_functional_test_case.php @@ -0,0 +1,128 @@ +client = new Goutte\Client(); + $this->root_url = $_SERVER['PHPBB_FUNCTIONAL_URL']; + } + + public function request($method, $path) + { + return $this->client->request($method, $this->root_url . $path); + } + + static public function setUpBeforeClass() + { + global $phpbb_root_path, $phpEx; + + if (!isset($_SERVER['PHPBB_FUNCTIONAL_URL'])) + { + self::markTestSkipped("The 'PHPBB_FUNCTIONAL_URL' environment variable was not set."); + } + + if (!file_exists($phpbb_root_path . "config.$phpEx")) + { + self::markTestSkipped("config.php does not exist, it is required for running functional tests."); + } + + require $phpbb_root_path . "config.$phpEx"; + + $db_config = array( + 'dbhost' => $dbhost, + 'dbport' => $dbport, + 'dbname' => $dbname, + 'dbuser' => $dbuser, + 'dbpasswd' => $dbpasswd, + 'dbms' => $dbms, + 'table_prefix' => 'phpbb_', + ); + self::recreate_database($db_config); + + rename($phpbb_root_path . "config.$phpEx", $phpbb_root_path . "_config.$phpEx"); + + // begin data + $data = array(); + + $data = array_merge($data, $db_config); + + $data = array_merge($data, array( + 'default_lang' => 'en', + 'admin_name' => 'admin', + 'admin_pass1' => 'admin', + 'admin_pass2' => 'admin', + 'board_email1' => 'nobody@example.com', + 'board_email2' => 'nobody@example.com', + )); + + $parseURL = parse_url($_SERVER['PHPBB_FUNCTIONAL_URL']); + + $data = array_merge($data, array( + 'email_enable' => false, + 'smtp_delivery' => false, + 'smtp_host' => '', + 'smtp_auth' => '', + 'smtp_user' => '', + 'smtp_pass' => '', + 'cookie_secure' => false, + 'force_server_vars' => false, + 'server_protocol' => $parseURL['scheme'] . '://', + 'server_name' => 'localhost', + 'server_port' => isset($parseURL['port']) ? (int) $parseURL['port'] : 80, + 'script_path' => $parseURL['path'], + )); + // end data + + $content = self::do_request('install'); + self::assertContains('Welcome to Installation', $content); + + self::do_request('config_file', $data); + + rename($phpbb_root_path . "_config.$phpEx", $phpbb_root_path . "config.$phpEx"); + + self::do_request('create_table', $data); + self::do_request('final', $data); + } + + static public function tearDownAfterClass() + { + } + + 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($_SERVER['PHPBB_FUNCTIONAL_URL'] . 'install/index.php?mode=install&sub=' . $sub, false, $context); + } + + static private function recreate_database($config) + { + $db_conn_mgr = new phpbb_database_test_connection_manager($config); + $db_conn_mgr->recreate_db(); + } +} diff --git a/vendor/goutte.phar b/vendor/goutte.phar new file mode 100644 index 0000000000..20b7166a67 Binary files /dev/null and b/vendor/goutte.phar differ