aboutsummaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authorIgor Wiedler <igor@wiedler.ch>2011-08-21 19:26:15 +0200
committerNils Adermann <naderman@naderman.de>2011-10-14 17:20:53 +0200
commit637d8eabe76907ce4a1e810d8b6bd964acb1b303 (patch)
tree63b82f29cb73a609987185ca026c6174e2068b27 /tests
parent37d9e7e30c3edbd14bb4e0f098ce676f1d7fe07b (diff)
downloadforums-637d8eabe76907ce4a1e810d8b6bd964acb1b303.tar
forums-637d8eabe76907ce4a1e810d8b6bd964acb1b303.tar.gz
forums-637d8eabe76907ce4a1e810d8b6bd964acb1b303.tar.bz2
forums-637d8eabe76907ce4a1e810d8b6bd964acb1b303.tar.xz
forums-637d8eabe76907ce4a1e810d8b6bd964acb1b303.zip
[feature/functional-tests] Implementing functional test framework with goutte
PHPBB3-10414
Diffstat (limited to 'tests')
-rw-r--r--tests/bootstrap.php1
-rw-r--r--tests/functional/browse_test.php26
-rw-r--r--tests/test_framework/phpbb_functional_test_case.php128
3 files changed, 155 insertions, 0 deletions
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 @@
+<?php
+/**
+*
+* @package testing
+* @copyright (c) 2011 phpBB Group
+* @license http://opensource.org/licenses/gpl-license.php GNU Public License
+*
+*/
+
+/**
+* @group functional
+*/
+class phpbb_functional_browse_test extends phpbb_functional_test_case
+{
+ public function test_index()
+ {
+ $crawler = $this->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 @@
+<?php
+/**
+*
+* @package testing
+* @copyright (c) 2011 phpBB Group
+* @license http://opensource.org/licenses/gpl-license.php GNU Public License
+*
+*/
+
+require_once __DIR__ . '/../../vendor/goutte.phar';
+
+class phpbb_functional_test_case extends phpbb_test_case
+{
+ protected $client;
+ protected $root_url;
+
+ public function setUp()
+ {
+ $this->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();
+ }
+}