1
0
mirror of https://github.com/phpbb/phpbb.git synced 2025-08-05 00:07:44 +02:00

Merge remote-tracking branch 'remotes/nickv/ticket/10714' into develop

# By Joas Schilling
# Via Joas Schilling
* remotes/nickv/ticket/10714: (56 commits)
  [ticket/10714] Get log from container in install, update and download/file
  [ticket/10714] Use $phpbb_adm_relative_path instead of hardcoded adm/
  [ticket/10714] Logs are disabled for this page call only
  [ticket/10714] Update add_log docs block with @param and @deprecated
  [ticket/10714] Remove fallback code from previous commits and move global
  [ticket/10714] Fix missing parameter and global phpbb_log in unit tests
  [ticket/10714] Add getter for is_in_admin and use it
  [ticket/10714] Fix more comments
  [ticket/10714] Cast values to integer before using them in the query
  [ticket/10714] Fix several doc blocks and comments
  [ticket/10714] Fix missing 8th argument in unit tests
  [ticket/10714] Use new core.adm_relative_path to create the object.
  [ticket/10714] Fix several comments and variable names
  [ticket/10714] Fix database driver class name
  [ticket/10714] Forgot most important, use container to create $phpbb_log
  [ticket/10714] Remove type hinting to allow the usage of mocks in tests
  [ticket/10714] Fix dependency injections in unit tests with mocks
  [ticket/10714] Use dependencies instead of globals
  [ticket/10714] Compare log_type to false, rather then null
  [ticket/10714] Add global variables for the unit tests
  ...
This commit is contained in:
Nathaniel Guse
2013-03-04 18:11:42 -06:00
18 changed files with 1728 additions and 316 deletions

View File

@@ -125,7 +125,7 @@ class phpbb_functions_user_group_user_attributes_test extends phpbb_database_tes
*/
public function test_group_user_attributes($description, $user_id, $group_id, $group_row, $expected)
{
global $auth, $cache, $db, $phpbb_dispatcher, $user, $phpbb_container;
global $auth, $cache, $db, $phpbb_dispatcher, $user, $phpbb_container, $phpbb_log, $phpbb_root_path, $phpEx;
$user->ip = '';
$cache = new phpbb_mock_cache;
@@ -141,6 +141,7 @@ class phpbb_functions_user_group_user_attributes_test extends phpbb_database_tes
->method('get')
->with('cache.driver')
->will($this->returnValue($cache_driver));
$phpbb_log = new phpbb_log($db, $user, $auth, $phpbb_dispatcher, $phpbb_root_path, 'adm/', $phpEx, LOG_TABLE);
group_user_attributes('default', $group_id, array($user_id), false, 'group_name', $group_row);

88
tests/log/add_test.php Normal file
View File

@@ -0,0 +1,88 @@
<?php
/**
*
* @package testing
* @copyright (c) 2012 phpBB Group
* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
*
*/
require_once dirname(__FILE__) . '/../../phpBB/includes/functions.php';
class phpbb_log_add_test extends phpbb_database_test_case
{
public function getDataSet()
{
return $this->createXMLDataSet(dirname(__FILE__) . '/fixtures/empty_log.xml');
}
public function test_log_enabled()
{
global $phpbb_root_path, $phpEx, $db, $phpbb_dispatcher;
$db = $this->new_dbal();
$cache = new phpbb_mock_cache;
$phpbb_dispatcher = new phpbb_mock_event_dispatcher();
$user = $this->getMock('phpbb_user');
$auth = $this->getMock('phpbb_auth');
$log = new phpbb_log($db, $user, $auth, $phpbb_dispatcher, $phpbb_root_path, 'adm/', $phpEx, LOG_TABLE);
$this->assertTrue($log->is_enabled(), 'Initialise failed');
$log->disable();
$this->assertFalse($log->is_enabled(), 'Disable all failed');
$log->enable();
$this->assertTrue($log->is_enabled(), 'Enable all failed');
$log->disable('admin');
$this->assertFalse($log->is_enabled('admin'), 'Disable admin failed');
$this->assertTrue($log->is_enabled('user'), 'User should be enabled, is disabled');
$this->assertTrue($log->is_enabled(), 'Disable admin disabled all');
$log->enable('admin');
$this->assertTrue($log->is_enabled('admin'), 'Enable admin failed');
}
public function test_log_add()
{
global $phpbb_root_path, $phpEx, $db, $phpbb_dispatcher;
$db = $this->new_dbal();
$cache = new phpbb_mock_cache;
$phpbb_dispatcher = new phpbb_mock_event_dispatcher();
$user = $this->getMock('phpbb_user');
$auth = $this->getMock('phpbb_auth');
$log = new phpbb_log($db, $user, $auth, $phpbb_dispatcher, $phpbb_root_path, 'adm/', $phpEx, LOG_TABLE);
$mode = 'critical';
$user_id = ANONYMOUS;
$log_ip = 'user_ip';
$log_time = time();
$log_operation = 'LOG_OPERATION';
$additional_data = array();
// Add an entry successful
$this->assertEquals(1, $log->add($mode, $user_id, $log_ip, $log_operation, $log_time));
// Disable logging for all types
$log->disable();
$this->assertFalse($log->add($mode, $user_id, $log_ip, $log_operation, $log_time), 'Disable for all types failed');
$log->enable();
// Disable logging for same type
$log->disable('critical');
$this->assertFalse($log->add($mode, $user_id, $log_ip, $log_operation, $log_time), 'Disable for same type failed');
$log->enable();
// Disable logging for different type
$log->disable('admin');
$this->assertEquals(2, $log->add($mode, $user_id, $log_ip, $log_operation, $log_time), 'Disable for different types failed');
$log->enable();
// Invalid mode specified
$this->assertFalse($log->add('mode_does_not_exist', $user_id, $log_ip, $log_operation, $log_time));
}
}

View File

@@ -0,0 +1,15 @@
<?xml version="1.0" encoding="UTF-8" ?>
<dataset>
<table name="phpbb_log">
<column>log_id</column>
<column>log_type</column>
<column>user_id</column>
<column>forum_id</column>
<column>topic_id</column>
<column>reportee_id</column>
<column>log_ip</column>
<column>log_time</column>
<column>log_operation</column>
<column>log_data</column>
</table>
</dataset>

View File

@@ -0,0 +1,166 @@
<?xml version="1.0" encoding="UTF-8" ?>
<dataset>
<table name="phpbb_log">
<column>log_id</column>
<column>log_type</column>
<column>user_id</column>
<column>forum_id</column>
<column>topic_id</column>
<column>reportee_id</column>
<column>log_ip</column>
<column>log_time</column>
<column>log_operation</column>
<column>log_data</column>
<row>
<value>1</value>
<value>0</value>
<value>1</value>
<value>0</value>
<value>0</value>
<value>0</value>
<value>127.0.0.1</value>
<value>1</value>
<value>LOG_INSTALL_INSTALLED</value>
<value>a:1:{i:0;s:9:"3.1.0-dev";}</value>
</row>
<row>
<value>2</value>
<value>0</value>
<value>1</value>
<value>0</value>
<value>0</value>
<value>0</value>
<value>127.0.0.1</value>
<value>1</value>
<value>LOG_KEY_NOT_EXISTS</value>
<value>a:1:{i:0;s:15:"additional_data";}</value>
</row>
<row>
<value>3</value>
<value>2</value>
<value>1</value>
<value>0</value>
<value>0</value>
<value>0</value>
<value>127.0.0.1</value>
<value>1</value>
<value>LOG_CRITICAL</value>
<value>a:1:{i:0;s:13:"critical data";}</value>
</row>
<row>
<value>4</value>
<value>1</value>
<value>1</value>
<value>12</value>
<value>34</value>
<value>0</value>
<value>127.0.0.1</value>
<value>1</value>
<value>LOG_MOD</value>
<value></value>
</row>
<row>
<value>5</value>
<value>1</value>
<value>1</value>
<value>12</value>
<value>45</value>
<value>0</value>
<value>127.0.0.1</value>
<value>1</value>
<value>LOG_MOD</value>
<value></value>
</row>
<row>
<value>6</value>
<value>1</value>
<value>1</value>
<value>23</value>
<value>56</value>
<value>0</value>
<value>127.0.0.1</value>
<value>1</value>
<value>LOG_MOD</value>
<value></value>
</row>
<row>
<value>7</value>
<value>1</value>
<value>1</value>
<value>12</value>
<value>45</value>
<value>0</value>
<value>127.0.0.1</value>
<value>1</value>
<value>LOG_MOD2</value>
<value></value>
</row>
<row>
<value>8</value>
<value>3</value>
<value>1</value>
<value>0</value>
<value>0</value>
<value>2</value>
<value>127.0.0.1</value>
<value>1</value>
<value>LOG_USER</value>
<value>a:1:{i:0;s:5:"admin";}</value>
</row>
<row>
<value>9</value>
<value>3</value>
<value>1</value>
<value>0</value>
<value>0</value>
<value>1</value>
<value>127.0.0.1</value>
<value>1</value>
<value>LOG_USER</value>
<value>a:1:{i:0;s:5:"guest";}</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>Anonymous</value>
<value>Anonymous</value>
<value></value>
<value></value>
<value></value>
<value></value>
</row>
<row>
<value>2</value>
<value>admin</value>
<value>admin</value>
<value></value>
<value></value>
<value></value>
<value></value>
</row>
</table>
<table name="phpbb_topics">
<column>topic_id</column>
<column>forum_id</column>
<row>
<value>34</value>
<value>12</value>
</row>
<row>
<value>45</value>
<value>12</value>
</row>
<row>
<value>56</value>
<value>23</value>
</row>
</table>
</dataset>

View File

@@ -0,0 +1,193 @@
<?php
/**
*
* @package testing
* @copyright (c) 2012 phpBB Group
* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
*
*/
require_once dirname(__FILE__) . '/../../phpBB/includes/functions.php';
class phpbb_log_function_add_log_test extends phpbb_database_test_case
{
public function getDataSet()
{
return $this->createXMLDataSet(dirname(__FILE__) . '/fixtures/empty_log.xml');
}
public static function test_add_log_function_data()
{
return array(
/**
* Case documentation
array(
// Row that is in the database afterwards
array(
'user_id' => ANONYMOUS,
'log_type' => LOG_MOD,
'log_operation' => 'LOG_MOD_ADDITIONAL',
// log_data will be serialized
'log_data' => array(
'argument3',
),
'reportee_id' => 0,
'forum_id' => 56,
'topic_id' => 78,
),
// user_id Can also be false, then ANONYMOUS is used
false,
// log_mode Used to determine the log_type
'mod',
// Followed by some additional arguments
// forum_id, topic_id and reportee_id are specified before log_operation
// The rest is specified afterwards.
56,
78,
'LOG_MOD_ADDITIONAL', // log_operation
'argument3',
),
*/
array(
array(
'user_id' => 2,
'log_type' => LOG_CRITICAL,
'log_operation' => 'LOG_NO_ADDITIONAL',
'log_data' => '',
'reportee_id' => 0,
'forum_id' => 0,
'topic_id' => 0,
),
2, 'critical', 'LOG_NO_ADDITIONAL',
),
array(
array(
'user_id' => 2,
'log_type' => LOG_CRITICAL,
'log_operation' => 'LOG_ONE_ADDITIONAL',
'log_data' => array(
'argument1',
),
'reportee_id' => 0,
'forum_id' => 0,
'topic_id' => 0,
),
2, 'critical', 'LOG_ONE_ADDITIONAL', 'argument1',
),
array(
array(
'user_id' => ANONYMOUS,
'log_type' => LOG_ADMIN,
'log_operation' => 'LOG_TWO_ADDITIONAL',
'log_data' => array(
'argument1',
'argument2',
),
'reportee_id' => 0,
'forum_id' => 0,
'topic_id' => 0,
),
false, 'admin', 'LOG_TWO_ADDITIONAL', 'argument1', 'argument2',
),
array(
array(
'user_id' => ANONYMOUS,
'log_type' => LOG_USERS,
'log_operation' => 'LOG_USERS_ADDITIONAL',
'log_data' => array(
'argument2',
),
'reportee_id' => 2,
'forum_id' => 0,
'topic_id' => 0,
),
false, 'user', 2, 'LOG_USERS_ADDITIONAL', 'argument2',
),
array(
array(
'user_id' => ANONYMOUS,
'log_type' => LOG_MOD,
'log_operation' => 'LOG_MOD_TOPIC_AND_FORUM',
'log_data' => '',
'reportee_id' => 0,
'forum_id' => 12,
'topic_id' => 34,
),
false, 'mod', 12, 34, 'LOG_MOD_TOPIC_AND_FORUM',
),
array(
array(
'user_id' => ANONYMOUS,
'log_type' => LOG_MOD,
'log_operation' => 'LOG_MOD_ADDITIONAL',
'log_data' => array(
'argument3',
),
'reportee_id' => 0,
'forum_id' => 56,
'topic_id' => 78,
),
false, 'mod', 56, 78, 'LOG_MOD_ADDITIONAL', 'argument3',
),
array(
array(
),
false, 'mode_does_not_exist', 'LOG_MOD_ADDITIONAL', 'argument1',
),
);
}
/**
* @dataProvider test_add_log_function_data
*/
public function test_add_log_function($expected, $user_id, $mode, $required1, $additional1 = null, $additional2 = null, $additional3 = null)
{
global $db, $cache, $user, $phpbb_log, $phpbb_dispatcher, $phpbb_root_path, $phpEx;
if ($expected)
{
// Serialize the log data if we have some
if (is_array($expected['log_data']))
{
$expected['log_data'] = serialize($expected['log_data']);
}
$expected = array($expected);
}
$db = $this->new_dbal();
$cache = new phpbb_mock_cache;
$phpbb_dispatcher = new phpbb_mock_event_dispatcher();
$user = $this->getMock('phpbb_user');
$auth = $this->getMock('phpbb_auth');
$phpbb_log = new phpbb_log($db, $user, $auth, $phpbb_dispatcher, $phpbb_root_path, 'adm/', $phpEx, LOG_TABLE);
$user->ip = 'user_ip';
if ($user_id)
{
$user->data['user_id'] = $user_id;
}
if ($additional3 != null)
{
add_log($mode, $required1, $additional1, $additional2, $additional3);
}
else if ($additional2 != null)
{
add_log($mode, $required1, $additional1, $additional2);
}
else if ($additional1 != null)
{
add_log($mode, $required1, $additional1);
}
else
{
add_log($mode, $required1);
}
$result = $db->sql_query('SELECT user_id, log_type, log_operation, log_data, reportee_id, forum_id, topic_id
FROM ' . LOG_TABLE);
$this->assertEquals($expected, $db->sql_fetchrowset($result));
}
}

View File

@@ -0,0 +1,344 @@
<?php
/**
*
* @package testing
* @copyright (c) 2012 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';
require_once dirname(__FILE__) . '/../../phpBB/includes/functions_content.php';
require_once dirname(__FILE__) . '/../../phpBB/includes/utf/utf_tools.php';
require_once dirname(__FILE__) . '/../../phpBB/includes/session.php';
require_once dirname(__FILE__) . '/../mock/user.php';
require_once dirname(__FILE__) . '/../mock/cache.php';
class phpbb_log_function_view_log_test extends phpbb_database_test_case
{
public function getDataSet()
{
return $this->createXMLDataSet(dirname(__FILE__) . '/fixtures/full_log.xml');
}
public static function test_view_log_function_data()
{
global $phpEx, $phpbb_dispatcher;
$phpbb_dispatcher = new phpbb_mock_event_dispatcher();
$expected_data_sets = array(
1 => array(
'id' => 1,
'reportee_id' => 0,
'reportee_username' => '',
'reportee_username_full'=> '',
'user_id' => 1,
'username' => 'Anonymous',
'username_full' => 'Anonymous',
'ip' => '127.0.0.1',
'time' => 1,
'forum_id' => 0,
'topic_id' => 0,
'viewforum' => '',
'action' => 'installed: 3.1.0-dev',
),
2 => array(
'id' => 2,
'reportee_id' => 0,
'reportee_username' => '',
'reportee_username_full'=> '',
'user_id' => 1,
'username' => 'Anonymous',
'username_full' => 'Anonymous',
'ip' => '127.0.0.1',
'time' => 1,
'forum_id' => 0,
'topic_id' => 0,
'viewforum' => '',
'action' => '{LOG KEY NOT EXISTS}<br />additional_data',
),
3 => array(
'id' => 3,
'reportee_id' => 0,
'reportee_username' => '',
'reportee_username_full'=> '',
'user_id' => 1,
'username' => 'Anonymous',
'username_full' => 'Anonymous',
'ip' => '127.0.0.1',
'time' => 1,
'forum_id' => 0,
'topic_id' => 0,
'viewforum' => '',
'action' => '{LOG CRITICAL}<br />critical data',
),
4 => array(
'id' => 4,
'reportee_id' => 0,
'reportee_username' => '',
'reportee_username_full'=> '',
'user_id' => 1,
'username' => 'Anonymous',
'username_full' => 'Anonymous',
'ip' => '127.0.0.1',
'time' => 1,
'forum_id' => 12,
'topic_id' => 34,
'viewforum' => '',
'action' => '{LOG MOD}',
'viewtopic' => '',
'viewlogs' => '',
),
5 => array(
'id' => 5,
'reportee_id' => 0,
'reportee_username' => '',
'reportee_username_full'=> '',
'user_id' => 1,
'username' => 'Anonymous',
'username_full' => 'Anonymous',
'ip' => '127.0.0.1',
'time' => 1,
'forum_id' => 12,
'topic_id' => 45,
'viewforum' => '',
'action' => '{LOG MOD}',
'viewtopic' => '',
'viewlogs' => '',
),
6 => array(
'id' => 6,
'reportee_id' => 0,
'reportee_username' => '',
'reportee_username_full'=> '',
'user_id' => 1,
'username' => 'Anonymous',
'username_full' => 'Anonymous',
'ip' => '127.0.0.1',
'time' => 1,
'forum_id' => 23,
'topic_id' => 56,
'viewforum' => append_sid("phpBB/viewforum.$phpEx", 'f=23'),
'action' => '{LOG MOD}',
'viewtopic' => append_sid("phpBB/viewtopic.$phpEx", 'f=23&amp;t=56'),
'viewlogs' => append_sid("phpBB/mcp.$phpEx", 'i=logs&amp;mode=topic_logs&amp;t=56'),
),
7 => array(
'id' => 7,
'reportee_id' => 0,
'reportee_username' => '',
'reportee_username_full'=> '',
'user_id' => 1,
'username' => 'Anonymous',
'username_full' => 'Anonymous',
'ip' => '127.0.0.1',
'time' => 1,
'forum_id' => 12,
'topic_id' => 45,
'viewforum' => '',
'action' => '{LOG MOD2}',
'viewtopic' => '',
'viewlogs' => '',
),
8 => array(
'id' => 8,
'reportee_id' => 2,
'reportee_username' => 'admin',
'reportee_username_full'=> 'admin',
'user_id' => 1,
'username' => 'Anonymous',
'username_full' => 'Anonymous',
'ip' => '127.0.0.1',
'time' => 1,
'forum_id' => 0,
'topic_id' => 0,
'viewforum' => '',
'action' => '{LOG USER}<br />admin',
),
9 => array(
'id' => 9,
'reportee_id' => 1,
'reportee_username' => 'Anonymous',
'reportee_username_full'=> 'Anonymous',
'user_id' => 1,
'username' => 'Anonymous',
'username_full' => 'Anonymous',
'ip' => '127.0.0.1',
'time' => 1,
'forum_id' => 0,
'topic_id' => 0,
'viewforum' => '',
'action' => '{LOG USER}<br />guest',
),
);
$test_cases = array(
/**
* Case documentation
array(
// Array of datasets that should be in $log after running the function
'expected' => array(5, 7),
// Offset that will be returned from the function
'expected_returned' => 0,
// view_log parameters (see includes/functions_admin.php for docblock)
// $log is ommited!
'mod', 5, 0, 12, 45,
),
*/
array(
'expected' => array(1, 2),
'expected_returned' => 0,
'admin', false,
),
array(
'expected' => array(1),
'expected_returned' => 0,
'admin', false, 1,
),
array(
'expected' => array(2),
'expected_returned' => 1,
'admin', false, 1, 1,
),
array(
'expected' => array(2),
'expected_returned' => 1,
'admin', 0, 1, 1,
),
array(
'expected' => array(2),
'expected_returned' => 1,
'admin', 0, 1, 5,
),
array(
'expected' => array(3),
'expected_returned' => 0,
'critical', false,
),
array(
'expected' => array(),
'expected_returned' => null,
'mode_does_not_exist', false,
),
array(
'expected' => array(4, 5, 7),
'expected_returned' => 0,
'mod', 0, 5, 0, 12,
),
array(
'expected' => array(5, 7),
'expected_returned' => 0,
'mod', 0, 5, 0, 12, 45,
),
array(
'expected' => array(6),
'expected_returned' => 0,
'mod', 0, 5, 0, 23,
),
array(
'expected' => array(8),
'expected_returned' => 0,
'user', 0, 5, 0, 0, 0, 2,
),
array(
'expected' => array(8, 9),
'expected_returned' => 0,
'users', 0,
),
);
foreach ($test_cases as $case => $case_data)
{
foreach ($case_data['expected'] as $data_set => $expected)
{
$test_cases[$case]['expected'][$data_set] = $expected_data_sets[$expected];
}
}
return $test_cases;
}
/**
* @dataProvider test_view_log_function_data
*/
public function test_view_log_function($expected, $expected_returned, $mode, $log_count, $limit = 5, $offset = 0, $forum_id = 0, $topic_id = 0, $user_id = 0, $limit_days = 0, $sort_by = 'l.log_id ASC', $keywords = '')
{
global $cache, $db, $user, $auth, $phpbb_log, $phpbb_dispatcher, $phpbb_root_path, $phpEx;
$db = $this->new_dbal();
$cache = new phpbb_mock_cache;
$phpbb_dispatcher = new phpbb_mock_event_dispatcher();
// Create auth mock
$auth = $this->getMock('phpbb_auth');
$acl_get_map = array(
array('f_read', 23, true),
array('m_', 23, true),
);
$acl_gets_map = array(
array('a_', 'm_', 23, true),
);
$auth->expects($this->any())
->method('acl_get')
->with($this->stringContains('_'),
$this->anything())
->will($this->returnValueMap($acl_get_map));
$auth->expects($this->any())
->method('acl_gets')
->with($this->stringContains('_'),
$this->anything())
->will($this->returnValueMap($acl_gets_map));
$user = new phpbb_mock_user;
$user->optionset('viewcensors', false);
// Test sprintf() of the data into the action
$user->lang = array(
'LOG_INSTALL_INSTALLED' => 'installed: %s',
);
$phpbb_log = new phpbb_log($db, $user, $auth, $phpbb_dispatcher, $phpbb_root_path, 'adm/', $phpEx, LOG_TABLE);
$log = array();
$this->assertEquals($expected_returned, view_log($mode, $log, $log_count, $limit, $offset, $forum_id, $topic_id, $user_id, $limit_days, $sort_by, $keywords));
$this->assertEquals($expected, $log);
}
}