mirror of
https://github.com/phpbb/phpbb.git
synced 2025-02-24 03:54:10 +01:00
Until now, the user data had both user_id and group_id keys in the avatar data. As both group_ and user_ prefixes were removed the group_id was collapsed onto the user_id and therefore all users in the same group had the same prefix for their uploaded avatars. This patch will make sure that the correct id is used depending on whether it's a group's or user's avatar data. PHPBB3-11525
293 lines
7.7 KiB
PHP
293 lines
7.7 KiB
PHP
<?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__) . '/driver/foobar.php';
|
|
|
|
class phpbb_avatar_manager_test extends PHPUnit_Framework_TestCase
|
|
{
|
|
public function setUp()
|
|
{
|
|
global $phpbb_root_path, $phpEx;
|
|
|
|
// Mock phpbb_container
|
|
$this->phpbb_container = $this->getMock('Symfony\Component\DependencyInjection\ContainerInterface');
|
|
$this->phpbb_container->expects($this->any())
|
|
->method('get')
|
|
->will($this->returnArgument(0));
|
|
|
|
// Prepare dependencies for avatar manager and driver
|
|
$config = new \phpbb\config\config(array());
|
|
$request = $this->getMock('\phpbb\request\request');
|
|
$cache = $this->getMock('\phpbb\cache\driver\driver_interface');
|
|
$path_helper = new \phpbb\path_helper(
|
|
new \phpbb\symfony_request(
|
|
new phpbb_mock_request()
|
|
),
|
|
new \phpbb\filesystem(),
|
|
$this->phpbb_root_path,
|
|
$this->phpEx
|
|
);
|
|
|
|
// $this->avatar_foobar will be needed later on
|
|
$this->avatar_foobar = $this->getMock('\phpbb\avatar\driver\foobar', array('get_name'), array($config, $phpbb_root_path, $phpEx, $path_helper, $cache));
|
|
$this->avatar_foobar->expects($this->any())
|
|
->method('get_name')
|
|
->will($this->returnValue('avatar.driver.foobar'));
|
|
// barfoo driver can't be mocked with constructor arguments
|
|
$this->avatar_barfoo = $this->getMock('\phpbb\avatar\driver\barfoo', array('get_name'));
|
|
$this->avatar_barfoo->expects($this->any())
|
|
->method('get_name')
|
|
->will($this->returnValue('avatar.driver.barfoo'));
|
|
$avatar_drivers = array($this->avatar_foobar, $this->avatar_barfoo);
|
|
|
|
foreach ($this->avatar_drivers() as $driver)
|
|
{
|
|
$cur_avatar = $this->getMock('\phpbb\avatar\driver\\' . $driver, array('get_name'), array($config, $phpbb_root_path, $phpEx, $path_helper, $cache));
|
|
$cur_avatar->expects($this->any())
|
|
->method('get_name')
|
|
->will($this->returnValue('avatar.driver.' . $driver));
|
|
$config['allow_avatar_' . get_class($cur_avatar)] = false;
|
|
$avatar_drivers[] = $cur_avatar;
|
|
}
|
|
|
|
$config['allow_avatar_' . get_class($this->avatar_foobar)] = true;
|
|
$config['allow_avatar_' . get_class($this->avatar_barfoo)] = false;
|
|
|
|
// Set up avatar manager
|
|
$this->manager = new \phpbb\avatar\manager($config, $avatar_drivers, $this->phpbb_container);
|
|
}
|
|
|
|
protected function avatar_drivers()
|
|
{
|
|
return array(
|
|
'local',
|
|
'upload',
|
|
'remote',
|
|
'gravatar',
|
|
);
|
|
}
|
|
|
|
public function test_get_all_drivers()
|
|
{
|
|
$drivers = $this->manager->get_all_drivers();
|
|
$this->assertEquals(array(
|
|
'avatar.driver.barfoo' => 'avatar.driver.barfoo',
|
|
'avatar.driver.foobar' => 'avatar.driver.foobar',
|
|
'avatar.driver.local' => 'avatar.driver.local',
|
|
'avatar.driver.remote' => 'avatar.driver.remote',
|
|
'avatar.driver.upload' => 'avatar.driver.upload',
|
|
'avatar.driver.gravatar' => 'avatar.driver.gravatar',
|
|
), $drivers);
|
|
}
|
|
|
|
public function test_get_enabled_drivers()
|
|
{
|
|
$drivers = $this->manager->get_enabled_drivers();
|
|
$this->assertArrayHasKey('avatar.driver.foobar', $drivers);
|
|
$this->assertArrayNotHasKey('avatar.driver.barfoo', $drivers);
|
|
$this->assertEquals('avatar.driver.foobar', $drivers['avatar.driver.foobar']);
|
|
}
|
|
|
|
public function get_driver_data_enabled()
|
|
{
|
|
return array(
|
|
array('avatar.driver.foobar', 'avatar.driver.foobar'),
|
|
array('avatar.driver.foo_wrong', null),
|
|
array('avatar.driver.local', null),
|
|
array(AVATAR_GALLERY, null),
|
|
array(AVATAR_UPLOAD, null),
|
|
array(AVATAR_REMOTE, null),
|
|
);
|
|
}
|
|
|
|
/**
|
|
* @dataProvider get_driver_data_enabled
|
|
*/
|
|
public function test_get_driver_enabled($driver_name, $expected)
|
|
{
|
|
$driver = $this->manager->get_driver($driver_name);
|
|
$this->assertEquals($expected, $driver);
|
|
}
|
|
|
|
public function get_driver_data_all()
|
|
{
|
|
return array(
|
|
array('avatar.driver.foobar', 'avatar.driver.foobar'),
|
|
array('avatar.driver.foo_wrong', null),
|
|
array('avatar.driver.local', 'avatar.driver.local'),
|
|
array(AVATAR_GALLERY, 'avatar.driver.local'),
|
|
array(AVATAR_UPLOAD, 'avatar.driver.upload'),
|
|
array(AVATAR_REMOTE, 'avatar.driver.remote'),
|
|
);
|
|
}
|
|
|
|
/**
|
|
* @dataProvider get_driver_data_all
|
|
*/
|
|
public function test_get_driver_all($driver_name, $expected)
|
|
{
|
|
$driver = $this->manager->get_driver($driver_name, false);
|
|
$this->assertEquals($expected, $driver);
|
|
}
|
|
|
|
public function test_get_avatar_settings()
|
|
{
|
|
$avatar_settings = $this->manager->get_avatar_settings($this->avatar_foobar);
|
|
|
|
$expected_settings = array(
|
|
'allow_avatar_' . get_class($this->avatar_foobar) => array('lang' => 'ALLOW_' . strtoupper(get_class($this->avatar_foobar)), 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => false),
|
|
);
|
|
|
|
$this->assertEquals($expected_settings, $avatar_settings);
|
|
}
|
|
|
|
public function database_row_data()
|
|
{
|
|
return array(
|
|
array(
|
|
array(
|
|
'user_avatar' => '',
|
|
'user_avatar_type' => '',
|
|
'user_avatar_width' => '',
|
|
'user_avatar_height' => '',
|
|
),
|
|
array(
|
|
'avatar' => '',
|
|
'avatar_type' => '',
|
|
'avatar_width' => '',
|
|
'avatar_height' => '',
|
|
),
|
|
),
|
|
array(
|
|
array(
|
|
'group_avatar' => '',
|
|
'group_avatar_type' => '',
|
|
'group_avatar_width' => '',
|
|
'group_avatar_height' => '',
|
|
),
|
|
array(
|
|
'avatar' => '',
|
|
'avatar_type' => '',
|
|
'avatar_width' => '',
|
|
'avatar_height' => '',
|
|
),
|
|
),
|
|
array(
|
|
array(),
|
|
array(
|
|
'avatar' => '',
|
|
'avatar_type' => '',
|
|
'avatar_width' => '',
|
|
'avatar_height' => '',
|
|
),
|
|
),
|
|
array(
|
|
array(
|
|
'foobar_avatar' => '',
|
|
'foobar_avatar_type' => '',
|
|
'foobar_avatar_width' => '',
|
|
'foobar_avatar_height' => '',
|
|
),
|
|
array(
|
|
'foobar_avatar' => '',
|
|
'foobar_avatar_type' => '',
|
|
'foobar_avatar_width' => '',
|
|
'foobar_avatar_height' => '',
|
|
),
|
|
),
|
|
array(
|
|
array(
|
|
'user_avatar' => '',
|
|
'user_id' => 5,
|
|
'group_id' => 4,
|
|
),
|
|
array(
|
|
'avatar' => '',
|
|
'id' => 4,
|
|
),
|
|
),
|
|
array(
|
|
array(
|
|
'user_avatar' => '',
|
|
'user_id' => 5,
|
|
'group_id' => 4,
|
|
),
|
|
array(
|
|
'avatar' => '',
|
|
'id' => 5,
|
|
'group_id' => 4,
|
|
),
|
|
'user',
|
|
),
|
|
array(
|
|
array(
|
|
'group_avatar' => '',
|
|
'user_id' => 5,
|
|
'group_id' => 4,
|
|
),
|
|
array(
|
|
'avatar' => '',
|
|
'id' => 4,
|
|
'user_id' => 5,
|
|
),
|
|
'group',
|
|
),
|
|
);
|
|
}
|
|
|
|
/**
|
|
* @dataProvider database_row_data
|
|
*/
|
|
public function test_clean_row(array $input, array $output, $prefix = '')
|
|
{
|
|
$cleaned_row = array();
|
|
|
|
$cleaned_row = \phpbb\avatar\manager::clean_row($input, $prefix);
|
|
foreach ($output as $key => $value)
|
|
{
|
|
$this->assertArrayHasKey($key, $cleaned_row);
|
|
$this->assertEquals($output[$key], $value);
|
|
}
|
|
}
|
|
|
|
public function test_clean_driver_name()
|
|
{
|
|
$this->assertEquals('avatar.driver.local', $this->manager->clean_driver_name('avatar_driver_local'));
|
|
}
|
|
|
|
public function test_prepare_driver_name()
|
|
{
|
|
$this->assertEquals('avatar_driver_local', $this->manager->prepare_driver_name('avatar.driver.local'));
|
|
}
|
|
|
|
public function test_localize_errors()
|
|
{
|
|
$user = $this->getMock('\phpbb\user');
|
|
$lang_array = array(
|
|
array('FOOBAR_OFF', 'foobar_off'),
|
|
array('FOOBAR_EXPLAIN', 'FOOBAR_EXPLAIN %s'),
|
|
);
|
|
$user->expects($this->any())
|
|
->method('lang')
|
|
->will($this->returnValueMap($lang_array));
|
|
|
|
// Pass error as string
|
|
$this->assertEquals(array('foobar_off'), $this->manager->localize_errors($user, array('FOOBAR_OFF')));
|
|
|
|
// Pass error as array for vsprintf()
|
|
$this->assertEquals(array('FOOBAR_EXPLAIN foo'), $this->manager->localize_errors($user, array(array('FOOBAR_EXPLAIN', 'foo'))));
|
|
|
|
// Pass both types
|
|
$this->assertEquals(array('foobar_off', 'FOOBAR_EXPLAIN foo'), $this->manager->localize_errors($user, array(
|
|
'FOOBAR_OFF',
|
|
array('FOOBAR_EXPLAIN', 'foo'),
|
|
)));
|
|
}
|
|
}
|