diff options
| author | Nils Adermann <naderman@naderman.de> | 2013-09-16 01:24:05 +0200 |
|---|---|---|
| committer | Nils Adermann <naderman@naderman.de> | 2013-09-16 01:24:05 +0200 |
| commit | 21bbb5850349326464204bdb1bea7ecf5a88c10a (patch) | |
| tree | c2e2ce66583cf94367301fab73e308c9dd8eddb9 /tests/session/testable_facade.php | |
| parent | bb395bbc50df53bf2e005d95d45f34c7c8934ff0 (diff) | |
| parent | ae6f37d559a71fb115cdb954452ebab5fb8fc69f (diff) | |
| download | forums-21bbb5850349326464204bdb1bea7ecf5a88c10a.tar forums-21bbb5850349326464204bdb1bea7ecf5a88c10a.tar.gz forums-21bbb5850349326464204bdb1bea7ecf5a88c10a.tar.bz2 forums-21bbb5850349326464204bdb1bea7ecf5a88c10a.tar.xz forums-21bbb5850349326464204bdb1bea7ecf5a88c10a.zip | |
Merge remote-tracking branch 'github-phpbb/develop' into ticket/11700
* github-phpbb/develop: (586 commits)
[ticket/11735] Display disabled checkbox in subsilver for read notifications
[ticket/11735] Display disabled checkbox when notification is already read
[ticket/11844] update acp/authentication language var
[ticket/11795] Remove PM popup
[ticket/11795] Remove outdated comment from forum_fn.js
[ticket/11795] Move find user JS to forum_fn
[ticket/11795] Replace TWIG with phpBB syntax in ACP
[ticket/11795] Move MSN scripts to forum_fn.js
[ticket/11795] Use phpBB template syntax instead of TWIG
[ticket/11795] Move PM popup JS to forum_fn.js
[ticket/11795] Get rid of pagination JS variables
[ticket/11795] Get rid of onload_functions
[ticket/11795] Use data-reset-on-edit attr to reset elements
[ticket/11795] Redo form elements auto-focus
[ticket/11811] Remove outline on :focus
[ticket/11836] Fix subsilver fatal error
[ticket/11837] Replace escaped single quote with utf-8 single quote
[ticket/11836] Fix fatal error on unsupported provider for auth link
[ticket/11837] Translate UCP_AUTH_LINK_NOT_SUPPORTED
[ticket/11809] Ensure code.js is first script included after jQuery
...
Conflicts:
phpBB/config/services.yml
phpBB/develop/create_schema_files.php
phpBB/develop/mysql_upgrader.php
phpBB/download/file.php
phpBB/includes/bbcode.php
phpBB/includes/functions_container.php
phpBB/install/database_update.php
phpBB/install/index.php
phpBB/phpbb/controller/helper.php
phpBB/phpbb/controller/resolver.php
phpBB/phpbb/request/request_interface.php
phpBB/phpbb/session.php
phpBB/phpbb/style/extension_path_provider.php
phpBB/phpbb/style/path_provider.php
phpBB/phpbb/style/path_provider_interface.php
phpBB/phpbb/style/resource_locator.php
phpBB/phpbb/style/style.php
phpBB/phpbb/template/locator.php
phpBB/phpbb/template/template.php
phpBB/phpbb/template/twig/node/includeasset.php
phpBB/phpbb/template/twig/node/includecss.php
phpBB/phpbb/template/twig/node/includejs.php
phpBB/phpbb/template/twig/twig.php
tests/controller/helper_url_test.php
tests/di/create_container_test.php
tests/extension/style_path_provider_test.php
tests/notification/notification_test.php
tests/session/continue_test.php
tests/session/creation_test.php
tests/template/template_events_test.php
tests/template/template_test_case.php
tests/template/template_test_case_with_tree.php
tests/test_framework/phpbb_functional_test_case.php
Diffstat (limited to 'tests/session/testable_facade.php')
| -rw-r--r-- | tests/session/testable_facade.php | 142 |
1 files changed, 142 insertions, 0 deletions
diff --git a/tests/session/testable_facade.php b/tests/session/testable_facade.php new file mode 100644 index 0000000000..9f0a3c5f59 --- /dev/null +++ b/tests/session/testable_facade.php @@ -0,0 +1,142 @@ +<?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__) . '/testable_factory.php'; +require_once dirname(__FILE__) . '/../../phpBB/phpbb/session.php'; + +/** + * This class exists to expose session.php's functions in a more testable way. + * + * Since many functions in session.php have global variables inside the function, + * this exposes those functions through a testable facade that uses + * testable_factory's mock global variables to modify global variables used in + * the functions. + * + * This is using the facade pattern to provide a testable "front" to the + * functions in sessions.php. + * + */ +class phpbb_session_testable_facade +{ + protected $db; + protected $session_factory; + + function __construct($db, $session_factory) + { + $this->db = $db; + $this->session_factory = $session_factory; + } + + function extract_current_page( + $root_path, + $php_self, + $query_string, + $request_uri + ) + { + $this->session_factory->get_session($this->db); + global $request; + $request->overwrite('PHP_SELF', $php_self, phpbb_request_interface::SERVER); + $request->overwrite('QUERY_STRING', $query_string, phpbb_request_interface::SERVER); + $request->overwrite('REQUEST_URI', $request_uri, phpbb_request_interface::SERVER); + return phpbb_session::extract_current_page($root_path); + } + + function extract_current_hostname( + $host, + $server_name_config, + $cookie_domain_config + ) + { + $session = $this->session_factory->get_session($this->db); + global $config, $request; + $config['server_name'] = $server_name_config; + $config['cookie_domain'] = $cookie_domain_config; + $request->overwrite('SERVER_NAME', $host, phpbb_request_interface::SERVER); + $request->overwrite('Host', $host, phpbb_request_interface::SERVER); + // Note: There is a php_uname function used as a fallthrough + // that this function doesn't override + return $session->extract_current_hostname(); + } + + /** + * + * This function has a lot of dependencies, so instead of naming them all, + * just ask for overrides + * + * @param update_session_page Boolean of whether to set page of the session + * @param config_overrides An array of overrides for the global config object + * @param request_overrides An array of overrides for the global request object + * @return boolean False if the user is identified, otherwise true. + */ + function session_begin( + $update_session_page = true, + $config_overrides = array(), + $request_overrides = array(), + $cookies_overrides = array() + ) + { + $this->session_factory->merge_config_data($config_overrides); + $this->session_factory->merge_server_data($request_overrides); + $this->session_factory->set_cookies($cookies_overrides); + $session = $this->session_factory->get_session($this->db); + $session->session_begin($update_session_page); + return $session; + } + + function session_create( + $user_id = false, + $set_admin = false, + $persist_login = false, + $viewonline = true, + array $config_overrides = array(), + $user_agent = 'user agent', + $ip_address = '127.0.0.1', + array $bot_overrides = array(), + $uri_sid = "" + ) + { + $this->session_factory->merge_config_data($config_overrides); + // Bots + $this->session_factory->merge_cache_data(array('_bots' => $bot_overrides)); + global $request; + $session = $this->session_factory->get_session($this->db); + $session->browser = $user_agent; + $session->ip = $ip_address; + // Uri sid + if ($uri_sid) + { + $_GET['sid'] = $uri_sid; + } + $session->session_create($user_id, $set_admin, $persist_login, $viewonline); + return $session; + } + + function validate_referer( + $check_script_path, + $referer, + $host, + $force_server_vars, + $server_port, + $server_name, + $root_script_path + ) + { + $session = $this->session_factory->get_session($this->db); + global $config, $request; + $session->referer = $referer; + $session->page['root_script_path'] = $root_script_path; + $session->host = $host; + $config['force_server_vars'] = $force_server_vars; + $config['server_name'] = $server_name; + $request->overwrite('SERVER_PORT', $server_port, phpbb_request_interface::SERVER); + return $session->validate_referer($check_script_path); + } +} + |
