1
0
mirror of https://github.com/phpbb/phpbb.git synced 2025-01-19 15:17:16 +01:00
php-phpbb/tests/content_visibility/get_global_visibility_sql_test.php
Joas Schilling 959525cebe [feature/soft-delete] Merge functionality of m_approve and m_restore
The problems with having two different permissions are just too big and cause
huge queries, if they are granted differently. Also it's quite hard to decide
what should happen when a moderator has only one permission and the topic has
only posts of the two hidden types. To avoid all this, we merge them so it's a
simple switch: either the user is a moderator, then he can see all posts,
or he is not, then he can only see approved ones.

PHPBB3-9567
2012-10-05 12:05:22 +02:00

141 lines
3.2 KiB
PHP

<?php
/**
*
* @package testing
* @copyright (c) 2012 phpBB Group
* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
*
*/
class phpbb_content_visibility_get_global_visibility_sql_test extends phpbb_database_test_case
{
public function getDataSet()
{
return $this->createXMLDataSet(dirname(__FILE__) . '/fixtures/get_forums_visibility_sql.xml');
}
public function get_global_visibility_sql_data()
{
return array(
array(
'phpbb_topics',
'topic', array(), '',
array(
array('m_approve', true, array(1 => true, 2 => true, 3 => true)),
),
array(
array('topic_id' => 1),
array('topic_id' => 2),
array('topic_id' => 3),
array('topic_id' => 4),
array('topic_id' => 5),
array('topic_id' => 6),
array('topic_id' => 7),
array('topic_id' => 8),
array('topic_id' => 9),
),
),
array(
'phpbb_topics',
'topic', array(3), '',
array(
array('m_approve', true, array(1 => true, 2 => true, 3 => true)),
),
array(
array('topic_id' => 1),
array('topic_id' => 2),
array('topic_id' => 3),
array('topic_id' => 4),
array('topic_id' => 5),
array('topic_id' => 6),
),
),
array(
'phpbb_topics',
'topic', array(), '',
array(
array('m_approve', true, array(2 => true)),
),
array(
array('topic_id' => 2),
array('topic_id' => 4),
array('topic_id' => 5),
array('topic_id' => 6),
array('topic_id' => 8),
),
),
array(
'phpbb_posts',
'post', array(), '',
array(
array('m_approve', true, array(1 => true, 2 => true, 3 => true)),
),
array(
array('post_id' => 1),
array('post_id' => 2),
array('post_id' => 3),
array('post_id' => 4),
array('post_id' => 5),
array('post_id' => 6),
array('post_id' => 7),
array('post_id' => 8),
array('post_id' => 9),
),
),
array(
'phpbb_posts',
'post', array(3), '',
array(
array('m_approve', true, array(1 => true, 2 => true, 3 => true)),
),
array(
array('post_id' => 1),
array('post_id' => 2),
array('post_id' => 3),
array('post_id' => 4),
array('post_id' => 5),
array('post_id' => 6),
),
),
array(
'phpbb_posts',
'post', array(), '',
array(
array('m_approve', true, array(2 => true)),
),
array(
array('post_id' => 2),
array('post_id' => 4),
array('post_id' => 5),
array('post_id' => 6),
array('post_id' => 8),
),
),
);
}
/**
* @dataProvider get_global_visibility_sql_data
*/
public function test_get_global_visibility_sql($table, $mode, $forum_ids, $table_alias, $permissions, $expected)
{
global $db, $auth;
$db = $this->new_dbal();
// Create auth mock
$auth = $this->getMock('phpbb_auth');
$auth->expects($this->any())
->method('acl_getf')
->with($this->stringContains('_'), $this->anything())
->will($this->returnValueMap($permissions));
$result = $db->sql_query('SELECT ' . $mode . '_id
FROM ' . $table . '
WHERE ' . phpbb_content_visibility::get_global_visibility_sql($mode, $forum_ids, $table_alias) . '
ORDER BY ' . $mode . '_id ASC');
$this->assertEquals($expected, $db->sql_fetchrowset($result));
}
}