aboutsummaryrefslogtreecommitdiffstats
path: root/tests/test_framework/phpbb_functional_test_case.php
blob: ddaa894061b998243abc2557c47854f0fc0f3ded (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
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();
	}
}