mirror of
https://github.com/phpbb/phpbb.git
synced 2025-04-23 09:07:43 +02:00
Merge pull request #2459 from Dragooon/ticket/12514
[ticket/12514] Add tests for profile fields * Dragooon/ticket/12514: (28 commits) [ticket/12514] Fix array formatting for tests [ticket/12514] Fix indention for type_url_test.php [ticket/12514] Missed a few spaces in comments [ticket/12514] Convert spaces to tabs [ticket/12514] Add a few additional tests for type_dropdown [ticket/12514] Add a few additional tests for type_int [ticket/12514] Fix some formatting for tests [ticket/12514] Add a few more tests for type_date [ticket/12514] Remove spaces in header blocks [ticket/12514] Use generic domain name for URL test [ticket/12514] Update file headers to represent the current format [ticket/12514] Remove get_ prefix from data providers [ticket/12514] Add a few more validation cases for type_string_test [ticket/12514] Minor fault in type_bool_test.php [ticket/12514] Remove tests/profiles as they're no longer required [ticket/12514] Fix type_int_test to correctly respect boundaries [ticket/12514] Multi value GET parameters are invalid for phpBB [ticket/12514] Add unit test for type_url custom profile field [ticket/12514] Add unit test for type_date custom profile field [ticket/12514] Add unit test for type_bool custom profile field ...
This commit is contained in:
commit
70d4ede9b2
@ -1,120 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
*
|
||||
* This file is part of the phpBB Forum Software package.
|
||||
*
|
||||
* @copyright (c) phpBB Limited <https://www.phpbb.com>
|
||||
* @license GNU General Public License, version 2 (GPL-2.0)
|
||||
*
|
||||
* For full copyright and license information, please see
|
||||
* the docs/CREDITS.txt file.
|
||||
*
|
||||
*/
|
||||
|
||||
require_once dirname(__FILE__) . '/../../phpBB/includes/utf/utf_tools.php';
|
||||
|
||||
class phpbb_profile_custom_string_test extends phpbb_database_test_case
|
||||
{
|
||||
public function getDataSet()
|
||||
{
|
||||
return $this->createXMLDataSet(dirname(__FILE__) . '/fixtures/profile_fields.xml');
|
||||
}
|
||||
|
||||
static public function string_fields()
|
||||
{
|
||||
return array(
|
||||
// note, there is an offset of 1 between option_id (0-indexed)
|
||||
// in the database and values (1-indexed) to avoid problems with
|
||||
// transmitting 0 in an HTML form
|
||||
// required, value, validation, expected, description
|
||||
array(
|
||||
1,
|
||||
'H3110',
|
||||
'[0-9]+',
|
||||
'FIELD_INVALID_CHARS_NUMBERS_ONLY-field',
|
||||
'Required field should reject characters in a numbers-only field',
|
||||
),
|
||||
array(
|
||||
1,
|
||||
'This string is too long',
|
||||
'.*',
|
||||
'FIELD_TOO_LONG-10-field',
|
||||
'Required field should reject a field too long',
|
||||
),
|
||||
array(
|
||||
0,
|
||||
'<>"&%&><>',
|
||||
'.*',
|
||||
false,
|
||||
'Optional field should accept html entities',
|
||||
),
|
||||
array(
|
||||
1,
|
||||
'ö ä ü ß',
|
||||
'.*',
|
||||
false,
|
||||
'Required field should accept UTF-8 string',
|
||||
),
|
||||
array(
|
||||
1,
|
||||
'This ö ä string has to b',
|
||||
'.*',
|
||||
'FIELD_TOO_LONG-10-field',
|
||||
'Required field should reject an UTF-8 string which is too long',
|
||||
),
|
||||
array(
|
||||
1,
|
||||
'ö äö äö ä',
|
||||
'[\w]+',
|
||||
'FIELD_INVALID_CHARS_ALPHA_ONLY-field',
|
||||
'Required field should reject UTF-8 in alpha only field',
|
||||
),
|
||||
array(
|
||||
1,
|
||||
'Hello',
|
||||
'[\w]+',
|
||||
false,
|
||||
'Required field should accept a characters only field',
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider string_fields
|
||||
*/
|
||||
public function test_string_validate($field_required, $field_value, $field_validation, $expected, $description)
|
||||
{
|
||||
$db = $this->new_dbal();
|
||||
|
||||
$field_data = array(
|
||||
'field_id' => 1,
|
||||
'lang_id' => 1,
|
||||
'lang_name' => 'field',
|
||||
'field_novalue' => 1,
|
||||
'field_required' => $field_required,
|
||||
'field_maxlen' => 10,
|
||||
'field_validation' => $field_validation,
|
||||
);
|
||||
$user = $this->getMock('\phpbb\user');
|
||||
$user->expects($this->any())
|
||||
->method('lang')
|
||||
->will($this->returnCallback(array($this, 'return_callback_implode')));
|
||||
|
||||
$request = $this->getMock('\phpbb\request\request');
|
||||
$template = $this->getMock('\phpbb\template\template');
|
||||
|
||||
$cp = new \phpbb\profilefields\type\type_string(
|
||||
$request,
|
||||
$template,
|
||||
$user
|
||||
);
|
||||
$result = $cp->validate_profile_field($field_value, $field_data);
|
||||
|
||||
$this->assertEquals($expected, $result, $description);
|
||||
}
|
||||
|
||||
public function return_callback_implode()
|
||||
{
|
||||
return implode('-', func_get_args());
|
||||
}
|
||||
}
|
@ -1,75 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
*
|
||||
* This file is part of the phpBB Forum Software package.
|
||||
*
|
||||
* @copyright (c) phpBB Limited <https://www.phpbb.com>
|
||||
* @license GNU General Public License, version 2 (GPL-2.0)
|
||||
*
|
||||
* For full copyright and license information, please see
|
||||
* the docs/CREDITS.txt file.
|
||||
*
|
||||
*/
|
||||
|
||||
class phpbb_profile_custom_test extends phpbb_database_test_case
|
||||
{
|
||||
public function getDataSet()
|
||||
{
|
||||
return $this->createXMLDataSet(dirname(__FILE__) . '/fixtures/profile_fields.xml');
|
||||
}
|
||||
|
||||
static public function dropdown_fields()
|
||||
{
|
||||
return array(
|
||||
// note, there is an offset of 1 between option_id (0-indexed)
|
||||
// in the database and values (1-indexed) to avoid problems with
|
||||
// transmitting 0 in an HTML form
|
||||
// required, value, expected
|
||||
array(1, '0', 'FIELD_INVALID_VALUE-field', 'Required field should throw error for out-of-range value'),
|
||||
array(1, '1', 'FIELD_REQUIRED-field', 'Required field should throw error for default value'),
|
||||
array(1, '2', false, 'Required field should accept non-default value'),
|
||||
array(0, '0', 'FIELD_INVALID_VALUE-field', 'Optional field should throw error for out-of-range value'),
|
||||
array(0, '1', false, 'Optional field should accept default value'),
|
||||
array(0, '2', false, 'Optional field should accept non-default value'),
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider dropdown_fields
|
||||
*/
|
||||
public function test_dropdown_validate($field_required, $field_value, $expected, $description)
|
||||
{
|
||||
global $db, $table_prefix;
|
||||
$db = $this->new_dbal();
|
||||
|
||||
$field_data = array(
|
||||
'field_id' => 1,
|
||||
'lang_id' => 1,
|
||||
'lang_name' => 'field',
|
||||
'field_novalue' => 1,
|
||||
'field_required' => $field_required,
|
||||
);
|
||||
$user = $this->getMock('\phpbb\user');
|
||||
$user->expects($this->any())
|
||||
->method('lang')
|
||||
->will($this->returnCallback(array($this, 'return_callback_implode')));
|
||||
|
||||
$request = $this->getMock('\phpbb\request\request');
|
||||
$template = $this->getMock('\phpbb\template\template');
|
||||
|
||||
$cp = new \phpbb\profilefields\type\type_dropdown(
|
||||
new \phpbb\profilefields\lang_helper($db, $table_prefix . 'profile_fields_lang'),
|
||||
$request,
|
||||
$template,
|
||||
$user
|
||||
);
|
||||
$result = $cp->validate_profile_field($field_value, $field_data);
|
||||
|
||||
$this->assertEquals($expected, $result, $description);
|
||||
}
|
||||
|
||||
public function return_callback_implode()
|
||||
{
|
||||
return implode('-', func_get_args());
|
||||
}
|
||||
}
|
@ -1,31 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<dataset>
|
||||
<table name="phpbb_profile_fields_lang">
|
||||
<column>field_id</column>
|
||||
<column>lang_id</column>
|
||||
<column>option_id</column>
|
||||
<column>field_type</column>
|
||||
<column>lang_value</column>
|
||||
<row>
|
||||
<value>1</value>
|
||||
<value>1</value>
|
||||
<value>0</value>
|
||||
<value>profilefields.type.dropdown</value>
|
||||
<value>Default Option</value>
|
||||
</row>
|
||||
<row>
|
||||
<value>1</value>
|
||||
<value>1</value>
|
||||
<value>1</value>
|
||||
<value>profilefields.type.dropdown</value>
|
||||
<value>First Alternative</value>
|
||||
</row>
|
||||
<row>
|
||||
<value>1</value>
|
||||
<value>1</value>
|
||||
<value>2</value>
|
||||
<value>profilefields.type.dropdown</value>
|
||||
<value>Third Alternative</value>
|
||||
</row>
|
||||
</table>
|
||||
</dataset>
|
@ -1,46 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
*
|
||||
* This file is part of the phpBB Forum Software package.
|
||||
*
|
||||
* @copyright (c) phpBB Limited <https://www.phpbb.com>
|
||||
* @license GNU General Public License, version 2 (GPL-2.0)
|
||||
*
|
||||
* For full copyright and license information, please see
|
||||
* the docs/CREDITS.txt file.
|
||||
*
|
||||
*/
|
||||
|
||||
class phpbb_profile_get_profile_value_test extends phpbb_test_case
|
||||
{
|
||||
static public function get_profile_value_int_data()
|
||||
{
|
||||
return array(
|
||||
array('\phpbb\profilefields\type\type_int', '10', true, 10),
|
||||
array('\phpbb\profilefields\type\type_int', '0', true, 0),
|
||||
array('\phpbb\profilefields\type\type_int', '', true, 0),
|
||||
array('\phpbb\profilefields\type\type_int', null, true, 0),
|
||||
array('\phpbb\profilefields\type\type_int', '10', false, 10),
|
||||
array('\phpbb\profilefields\type\type_int', '0', false, 0),
|
||||
array('\phpbb\profilefields\type\type_int', '', false, null),
|
||||
array('\phpbb\profilefields\type\type_int', null, false, null),
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider get_profile_value_int_data
|
||||
*/
|
||||
public function test_get_profile_value_int($type, $value, $show_novalue, $expected)
|
||||
{
|
||||
$cp = new $type(
|
||||
$this->getMock('\phpbb\request\request'),
|
||||
$this->getMock('\phpbb\template\template'),
|
||||
$this->getMock('\phpbb\user')
|
||||
);
|
||||
|
||||
$this->assertSame($expected, $cp->get_profile_value($value, array(
|
||||
'field_type' => $type,
|
||||
'field_show_novalue' => $show_novalue,
|
||||
)));
|
||||
}
|
||||
}
|
147
tests/profilefields/type_bool_test.php
Normal file
147
tests/profilefields/type_bool_test.php
Normal file
@ -0,0 +1,147 @@
|
||||
<?php
|
||||
/**
|
||||
*
|
||||
* This file is part of the phpBB Forum Software package.
|
||||
*
|
||||
* @copyright (c) phpBB Limited <https://www.phpbb.com>
|
||||
* @license GNU General Public License, version 2 (GPL-2.0)
|
||||
*
|
||||
* For full copyright and license information, please see
|
||||
* the docs/CREDITS.txt file.
|
||||
*
|
||||
*/
|
||||
|
||||
class phpbb_profilefield_type_bool_test extends phpbb_test_case
|
||||
{
|
||||
protected $cp;
|
||||
protected $field_options = array();
|
||||
protected $options = array();
|
||||
|
||||
/**
|
||||
* Sets up basic test objects
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
public function setUp()
|
||||
{
|
||||
$user = $this->getMock('\phpbb\user');
|
||||
$user->expects($this->any())
|
||||
->method('lang')
|
||||
->will($this->returnCallback(array($this, 'return_callback_implode')));
|
||||
|
||||
$lang = $this->getMock('\phpbb\profilefields\lang_helper', array(), array(null, null));
|
||||
|
||||
$lang->expects($this->any())
|
||||
->method('get_options_lang');
|
||||
|
||||
$lang->expects($this->any())
|
||||
->method('is_set')
|
||||
->will($this->returnCallback(array($this, 'is_set_callback')));
|
||||
|
||||
$lang->expects($this->any())
|
||||
->method('get')
|
||||
->will($this->returnCallback(array($this, 'get')));
|
||||
|
||||
$request = $this->getMock('\phpbb\request\request');
|
||||
$template = $this->getMock('\phpbb\template\template');
|
||||
|
||||
$this->cp = new \phpbb\profilefields\type\type_bool(
|
||||
$lang,
|
||||
$request,
|
||||
$template,
|
||||
$user
|
||||
);
|
||||
|
||||
$this->field_options = array(
|
||||
'field_type' => '\phpbb\profilefields\type\type_bool',
|
||||
'field_name' => 'field',
|
||||
'field_id' => 1,
|
||||
'lang_id' => 1,
|
||||
'lang_name' => 'field',
|
||||
'field_required' => false,
|
||||
'field_default_value' => 1,
|
||||
'field_length' => 1,
|
||||
);
|
||||
|
||||
$this->options = array(
|
||||
0 => 'Yes',
|
||||
1 => 'No',
|
||||
);
|
||||
}
|
||||
|
||||
public function validate_profile_field_data()
|
||||
{
|
||||
return array(
|
||||
array(
|
||||
false,
|
||||
array('field_required' => true),
|
||||
'FIELD_REQUIRED-field',
|
||||
'Field should not accept empty values for required fields',
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider validate_profile_field_data
|
||||
*/
|
||||
public function test_validate_profile_field($value, $field_options, $expected, $description)
|
||||
{
|
||||
$field_options = array_merge($this->field_options, $field_options);
|
||||
|
||||
$result = $this->cp->validate_profile_field($value, $field_options);
|
||||
|
||||
$this->assertSame($expected, $result, $description);
|
||||
}
|
||||
|
||||
public function profile_value_data()
|
||||
{
|
||||
return array(
|
||||
array(
|
||||
false,
|
||||
array('field_show_novalue' => true),
|
||||
'No',
|
||||
'Field should output the default value',
|
||||
),
|
||||
array(
|
||||
false,
|
||||
array('field_show_novalue' => false, 'field_length' => 2),
|
||||
null,
|
||||
'Field should not show anything for empty value',
|
||||
),
|
||||
array(
|
||||
0,
|
||||
array(),
|
||||
'Yes',
|
||||
'Field should show the set value',
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider profile_value_data
|
||||
*/
|
||||
public function test_get_profile_value($value, $field_options, $expected, $description)
|
||||
{
|
||||
$field_options = array_merge($this->field_options, $field_options);
|
||||
|
||||
$result = $this->cp->get_profile_value($value, $field_options);
|
||||
|
||||
$this->assertSame($expected, $result, $description);
|
||||
}
|
||||
|
||||
public function is_set_callback($field_id, $lang_id, $field_value)
|
||||
{
|
||||
return isset($this->options[$field_value]);
|
||||
}
|
||||
|
||||
public function get($field_id, $lang_id, $field_value)
|
||||
{
|
||||
return $this->options[$field_value];
|
||||
}
|
||||
|
||||
public function return_callback_implode()
|
||||
{
|
||||
return implode('-', func_get_args());
|
||||
}
|
||||
}
|
192
tests/profilefields/type_date_test.php
Normal file
192
tests/profilefields/type_date_test.php
Normal file
@ -0,0 +1,192 @@
|
||||
<?php
|
||||
/**
|
||||
*
|
||||
* This file is part of the phpBB Forum Software package.
|
||||
*
|
||||
* @copyright (c) phpBB Limited <https://www.phpbb.com>
|
||||
* @license GNU General Public License, version 2 (GPL-2.0)
|
||||
*
|
||||
* For full copyright and license information, please see
|
||||
* the docs/CREDITS.txt file.
|
||||
*
|
||||
*/
|
||||
|
||||
class phpbb_profilefield_type_date_test extends phpbb_test_case
|
||||
{
|
||||
protected $cp;
|
||||
protected $field_options;
|
||||
protected $user;
|
||||
|
||||
/**
|
||||
* Sets up basic test objects
|
||||
*
|
||||
* @access public
|
||||
* @return null
|
||||
*/
|
||||
public function setUp()
|
||||
{
|
||||
$this->user = $this->getMock('\phpbb\user');
|
||||
$this->user->expects($this->any())
|
||||
->method('lang')
|
||||
->will($this->returnCallback(array($this, 'return_callback_implode')));
|
||||
|
||||
$this->user->expects($this->any())
|
||||
->method('create_datetime')
|
||||
->will($this->returnCallback(array($this, 'create_datetime_callback')));
|
||||
|
||||
$this->user->timezone = new DateTimeZone('UTC');
|
||||
$this->user->lang = array(
|
||||
'datetime' => array(),
|
||||
'DATE_FORMAT' => 'm/d/Y',
|
||||
);
|
||||
|
||||
$request = $this->getMock('\phpbb\request\request');
|
||||
$template = $this->getMock('\phpbb\template\template');
|
||||
|
||||
$this->cp = new \phpbb\profilefields\type\type_date(
|
||||
$request,
|
||||
$template,
|
||||
$this->user
|
||||
);
|
||||
|
||||
$this->field_options = array(
|
||||
'field_type' => '\phpbb\profilefields\type\type_date',
|
||||
'field_name' => 'field',
|
||||
'field_id' => 1,
|
||||
'lang_id' => 1,
|
||||
'lang_name' => 'field',
|
||||
'field_required' => false,
|
||||
);
|
||||
}
|
||||
|
||||
public function profile_value_data()
|
||||
{
|
||||
return array(
|
||||
array(
|
||||
'01-01-2009',
|
||||
array('field_show_novalue' => true),
|
||||
'01/01/2009',
|
||||
'Field should output the correctly formatted date',
|
||||
),
|
||||
array(
|
||||
null,
|
||||
array('field_show_novalue' => false),
|
||||
null,
|
||||
'Field should leave empty value as is',
|
||||
),
|
||||
array(
|
||||
'None',
|
||||
array('field_show_novalue' => true),
|
||||
'None',
|
||||
'Field should leave invalid value as is',
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider profile_value_data
|
||||
*/
|
||||
public function test_get_profile_value($value, $field_options, $expected, $description)
|
||||
{
|
||||
$field_options = array_merge($this->field_options, $field_options);
|
||||
|
||||
$result = $this->cp->get_profile_value($value, $field_options);
|
||||
|
||||
$this->assertSame($expected, $result, $description);
|
||||
}
|
||||
|
||||
public function validate_profile_field_data()
|
||||
{
|
||||
return array(
|
||||
array(
|
||||
'',
|
||||
array('field_required' => true),
|
||||
'FIELD_REQUIRED-field',
|
||||
'Field should reject value for being empty',
|
||||
),
|
||||
array(
|
||||
'0125',
|
||||
array('field_required' => true),
|
||||
'FIELD_REQUIRED-field',
|
||||
'Field should reject value for being invalid',
|
||||
),
|
||||
array(
|
||||
'01-01-2012',
|
||||
array(),
|
||||
false,
|
||||
'Field should accept a valid value',
|
||||
),
|
||||
array(
|
||||
'40-05-2009',
|
||||
array(),
|
||||
'FIELD_INVALID_DATE-field',
|
||||
'Field should reject value for being invalid',
|
||||
),
|
||||
array(
|
||||
'12-30-2012',
|
||||
array(),
|
||||
'FIELD_INVALID_DATE-field',
|
||||
'Field should reject value for being invalid',
|
||||
),
|
||||
array(
|
||||
'string',
|
||||
array(),
|
||||
false,
|
||||
'Field should reject value for being invalid',
|
||||
),
|
||||
array(
|
||||
'string',
|
||||
array('field_required' => true),
|
||||
'FIELD_REQUIRED-field',
|
||||
'Field should reject value for being invalid',
|
||||
),
|
||||
array(
|
||||
100,
|
||||
array(),
|
||||
false,
|
||||
'Field should reject value for being invalid',
|
||||
),
|
||||
array(
|
||||
100,
|
||||
array('field_required' => true),
|
||||
'FIELD_REQUIRED-field',
|
||||
'Field should reject value for being invalid',
|
||||
),
|
||||
array(
|
||||
null,
|
||||
array('field_required' => true),
|
||||
'FIELD_REQUIRED-field',
|
||||
'Field should reject value for being empty',
|
||||
),
|
||||
array(
|
||||
true,
|
||||
array('field_required' => true),
|
||||
'FIELD_REQUIRED-field',
|
||||
'Field should reject value for being empty',
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider validate_profile_field_data
|
||||
*/
|
||||
public function test_validate_profile_field($value, $field_options, $expected, $description)
|
||||
{
|
||||
$field_options = array_merge($this->field_options, $field_options);
|
||||
|
||||
$result = $this->cp->validate_profile_field($value, $field_options);
|
||||
|
||||
$this->assertSame($expected, $result, $description);
|
||||
}
|
||||
|
||||
public function return_callback_implode()
|
||||
{
|
||||
return implode('-', func_get_args());
|
||||
}
|
||||
|
||||
public function create_datetime_callback($time = 'now', \DateTimeZone $timezone = null)
|
||||
{
|
||||
$timezone = $timezone ?: $this->user->timezone;
|
||||
return new \phpbb\datetime($this->user, $time, $timezone);
|
||||
}
|
||||
}
|
187
tests/profilefields/type_dropdown_test.php
Normal file
187
tests/profilefields/type_dropdown_test.php
Normal file
@ -0,0 +1,187 @@
|
||||
<?php
|
||||
/**
|
||||
*
|
||||
* This file is part of the phpBB Forum Software package.
|
||||
*
|
||||
* @copyright (c) phpBB Limited <https://www.phpbb.com>
|
||||
* @license GNU General Public License, version 2 (GPL-2.0)
|
||||
*
|
||||
* For full copyright and license information, please see
|
||||
* the docs/CREDITS.txt file.
|
||||
*
|
||||
*/
|
||||
|
||||
class phpbb_profilefield_type_dropdown_test extends phpbb_test_case
|
||||
{
|
||||
protected $cp;
|
||||
protected $field_options = array();
|
||||
protected $dropdown_options = array();
|
||||
|
||||
/**
|
||||
* Sets up basic test objects
|
||||
*
|
||||
* @access public
|
||||
* @return null
|
||||
*/
|
||||
public function setUp()
|
||||
{
|
||||
$user = $this->getMock('\phpbb\user');
|
||||
$user->expects($this->any())
|
||||
->method('lang')
|
||||
->will($this->returnCallback(array($this, 'return_callback_implode')));
|
||||
|
||||
$request = $this->getMock('\phpbb\request\request');
|
||||
$template = $this->getMock('\phpbb\template\template');
|
||||
|
||||
$lang = $this->getMock('\phpbb\profilefields\lang_helper', array(), array(null, null));
|
||||
|
||||
$lang->expects($this->any())
|
||||
->method('get_options_lang');
|
||||
|
||||
$lang->expects($this->any())
|
||||
->method('is_set')
|
||||
->will($this->returnCallback(array($this, 'is_set_callback')));
|
||||
|
||||
$lang->expects($this->any())
|
||||
->method('get')
|
||||
->will($this->returnCallback(array($this, 'get')));
|
||||
|
||||
$this->cp = new \phpbb\profilefields\type\type_dropdown(
|
||||
$lang,
|
||||
$request,
|
||||
$template,
|
||||
$user
|
||||
);
|
||||
|
||||
$this->field_options = array(
|
||||
'field_type' => '\phpbb\profilefields\type\type_dropdown',
|
||||
'field_name' => 'field',
|
||||
'field_id' => 1,
|
||||
'lang_id' => 1,
|
||||
'lang_name' => 'field',
|
||||
'field_required' => false,
|
||||
'field_validation' => '.*',
|
||||
'field_novalue' => 0,
|
||||
);
|
||||
|
||||
$this->dropdown_options = array(
|
||||
0 => '<No Value>',
|
||||
1 => 'Option 1',
|
||||
2 => 'Option 2',
|
||||
3 => 'Option 3',
|
||||
4 => 'Option 4',
|
||||
);
|
||||
}
|
||||
|
||||
public function validate_profile_field_data()
|
||||
{
|
||||
return array(
|
||||
array(
|
||||
7,
|
||||
array(),
|
||||
'FIELD_INVALID_VALUE-field',
|
||||
'Invalid value should throw error',
|
||||
),
|
||||
array(
|
||||
true,
|
||||
array('field_required' => true),
|
||||
false,
|
||||
'Boolean would evaluate to 1 and hence correct value',
|
||||
),
|
||||
array(
|
||||
'string',
|
||||
array('field_required' => true),
|
||||
'FIELD_REQUIRED-field',
|
||||
'String should be rejected for value',
|
||||
),
|
||||
array(
|
||||
2,
|
||||
array(),
|
||||
false,
|
||||
'Valid value should not throw error'
|
||||
),
|
||||
array(
|
||||
0,
|
||||
array(),
|
||||
false,
|
||||
'Empty value should be acceptible',
|
||||
),
|
||||
array(
|
||||
0,
|
||||
array('field_required' => true),
|
||||
'FIELD_REQUIRED-field',
|
||||
'Required field should not accept empty value',
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider validate_profile_field_data
|
||||
*/
|
||||
public function test_validate_profile_field($value, $field_options, $expected, $description)
|
||||
{
|
||||
$field_options = array_merge($this->field_options, $field_options);
|
||||
|
||||
$result = $this->cp->validate_profile_field($value, $field_options);
|
||||
|
||||
$this->assertSame($expected, $result, $description);
|
||||
}
|
||||
|
||||
public function profile_value_data()
|
||||
{
|
||||
return array(
|
||||
array(
|
||||
1,
|
||||
array('field_show_novalue' => true),
|
||||
'Option 1',
|
||||
'Field should output the given value',
|
||||
),
|
||||
array(
|
||||
4,
|
||||
array('field_show_novalue' => false),
|
||||
'Option 4',
|
||||
'Field should output the given value',
|
||||
),
|
||||
array(
|
||||
'',
|
||||
array('field_show_novalue' => true),
|
||||
'<No Value>',
|
||||
'Field should output nothing for empty value',
|
||||
),
|
||||
array(
|
||||
'',
|
||||
array('field_show_novalue' => false),
|
||||
null,
|
||||
'Field should simply output null for empty value',
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @dataProvider profile_value_data
|
||||
*/
|
||||
public function test_get_profile_value($value, $field_options, $expected, $description)
|
||||
{
|
||||
$field_options = array_merge($this->field_options, $field_options);
|
||||
|
||||
$result = $this->cp->get_profile_value($value, $field_options);
|
||||
|
||||
$this->assertSame($expected, $result, $description);
|
||||
}
|
||||
|
||||
public function is_set_callback($field_id, $lang_id, $field_value)
|
||||
{
|
||||
return isset($this->dropdown_options[$field_value]);
|
||||
}
|
||||
|
||||
public function get($field_id, $lang_id, $field_value)
|
||||
{
|
||||
return $this->dropdown_options[$field_value];
|
||||
}
|
||||
|
||||
public function return_callback_implode()
|
||||
{
|
||||
return implode('-', func_get_args());
|
||||
}
|
||||
}
|
176
tests/profilefields/type_int_test.php
Normal file
176
tests/profilefields/type_int_test.php
Normal file
@ -0,0 +1,176 @@
|
||||
<?php
|
||||
/**
|
||||
*
|
||||
* This file is part of the phpBB Forum Software package.
|
||||
*
|
||||
* @copyright (c) phpBB Limited <https://www.phpbb.com>
|
||||
* @license GNU General Public License, version 2 (GPL-2.0)
|
||||
*
|
||||
* For full copyright and license information, please see
|
||||
* the docs/CREDITS.txt file.
|
||||
*
|
||||
*/
|
||||
|
||||
class phpbb_profilefield_type_int_test extends phpbb_test_case
|
||||
{
|
||||
protected $cp;
|
||||
protected $field_options;
|
||||
|
||||
/**
|
||||
* Sets up basic test objects
|
||||
*
|
||||
* @access public
|
||||
* @return null
|
||||
*/
|
||||
public function setUp()
|
||||
{
|
||||
$user = $this->getMock('\phpbb\user');
|
||||
$user->expects($this->any())
|
||||
->method('lang')
|
||||
->will($this->returnCallback(array($this, 'return_callback_implode')));
|
||||
|
||||
$request = $this->getMock('\phpbb\request\request');
|
||||
$template = $this->getMock('\phpbb\template\template');
|
||||
|
||||
$this->cp = new \phpbb\profilefields\type\type_int(
|
||||
$request,
|
||||
$template,
|
||||
$user
|
||||
);
|
||||
|
||||
$this->field_options = array(
|
||||
'field_type' => '\phpbb\profilefields\type\type_int',
|
||||
'field_name' => 'field',
|
||||
'field_id' => 1,
|
||||
'lang_id' => 1,
|
||||
'lang_name' => 'field',
|
||||
'field_required' => false,
|
||||
);
|
||||
}
|
||||
|
||||
public function profile_value_data()
|
||||
{
|
||||
return array(
|
||||
array(
|
||||
'10',
|
||||
array('field_show_novalue' => true),
|
||||
10,
|
||||
'Field should output integer value of given input',
|
||||
),
|
||||
array(
|
||||
'0',
|
||||
array('field_show_novalue' => true),
|
||||
0,
|
||||
'Field should output integer value of given input',
|
||||
),
|
||||
array(
|
||||
'',
|
||||
array('field_show_novalue' => true),
|
||||
0,
|
||||
'Field should translate empty value to 0 as integer',
|
||||
false,
|
||||
),
|
||||
array(
|
||||
null,
|
||||
array('field_show_novalue' => true),
|
||||
0,
|
||||
'Field should translate null value to 0 as integer',
|
||||
),
|
||||
array(
|
||||
'10',
|
||||
array('field_show_novalue' => false),
|
||||
10,
|
||||
'Field should output integer value of given input',
|
||||
),
|
||||
array(
|
||||
'0',
|
||||
array('field_show_novalue' => false),
|
||||
0,
|
||||
'Field should output integer value of given input',
|
||||
),
|
||||
array(
|
||||
'',
|
||||
array('field_show_novalue' => false),
|
||||
null,
|
||||
'Field should leave empty value as is',
|
||||
),
|
||||
array(
|
||||
null,
|
||||
array('field_show_novalue' => false),
|
||||
null,
|
||||
'Field should leave empty value as is',
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider profile_value_data
|
||||
*/
|
||||
public function test_get_profile_value($value, $field_options, $expected, $description)
|
||||
{
|
||||
$field_options = array_merge($this->field_options, $field_options);
|
||||
|
||||
$result = $this->cp->get_profile_value($value, $field_options);
|
||||
|
||||
$this->assertSame($expected, $result, $description);
|
||||
}
|
||||
|
||||
public function validate_profile_field_data()
|
||||
{
|
||||
return array(
|
||||
array(
|
||||
'15',
|
||||
array('field_minlen' => 10, 'field_maxlen' => 20, 'field_required' => true),
|
||||
false,
|
||||
'Field should accept input of correct boundaries',
|
||||
),
|
||||
array(
|
||||
'556476',
|
||||
array('field_maxlen' => 50000, 'field_required' => true),
|
||||
'FIELD_TOO_LARGE-50000-field',
|
||||
'Field should reject value of greater value than max',
|
||||
),
|
||||
array(
|
||||
'9',
|
||||
array('field_minlen' => 10, 'field_required' => true),
|
||||
'FIELD_TOO_SMALL-10-field',
|
||||
'Field should reject value which is less than defined minimum',
|
||||
),
|
||||
array(
|
||||
true,
|
||||
array('field_maxlen' => 20),
|
||||
false,
|
||||
'Field should accept correct boolean value',
|
||||
),
|
||||
array(
|
||||
'string',
|
||||
array('field_maxlen' => 10, 'field_required' => true),
|
||||
false,
|
||||
'Field should accept correct string value',
|
||||
),
|
||||
array(
|
||||
null,
|
||||
array('field_minlen' => 1, 'field_maxlen' => 10, 'field_required' => true),
|
||||
'FIELD_TOO_SMALL-1-field',
|
||||
'Field should not accept an empty value',
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider validate_profile_field_data
|
||||
*/
|
||||
public function test_validate_profile_field($value, $field_options, $expected, $description)
|
||||
{
|
||||
$field_options = array_merge($this->field_options, $field_options);
|
||||
|
||||
$result = $this->cp->validate_profile_field($value, $field_options);
|
||||
|
||||
$this->assertSame($expected, $result, $description);
|
||||
}
|
||||
|
||||
public function return_callback_implode()
|
||||
{
|
||||
return implode('-', func_get_args());
|
||||
}
|
||||
}
|
208
tests/profilefields/type_string_test.php
Normal file
208
tests/profilefields/type_string_test.php
Normal file
@ -0,0 +1,208 @@
|
||||
<?php
|
||||
/**
|
||||
*
|
||||
* This file is part of the phpBB Forum Software package.
|
||||
*
|
||||
* @copyright (c) phpBB Limited <https://www.phpbb.com>
|
||||
* @license GNU General Public License, version 2 (GPL-2.0)
|
||||
*
|
||||
* For full copyright and license information, please see
|
||||
* the docs/CREDITS.txt file.
|
||||
*
|
||||
*/
|
||||
|
||||
require_once dirname(__FILE__) . '/../../phpBB/includes/functions.php';
|
||||
require_once dirname(__FILE__) . '/../../phpBB/includes/functions_content.php';
|
||||
require_once dirname(__FILE__) . '/../../phpBB/includes/utf/utf_tools.php';
|
||||
|
||||
class phpbb_profilefield_type_string_test extends phpbb_test_case
|
||||
{
|
||||
protected $cp;
|
||||
protected $field_options;
|
||||
|
||||
/**
|
||||
* Sets up basic test objects
|
||||
*
|
||||
* @access public
|
||||
* @return null
|
||||
*/
|
||||
public function setUp()
|
||||
{
|
||||
global $request, $user, $cache;
|
||||
|
||||
$user = $this->getMock('\phpbb\user');
|
||||
$cache = new phpbb_mock_cache;
|
||||
$user->expects($this->any())
|
||||
->method('lang')
|
||||
->will($this->returnCallback(array($this, 'return_callback_implode')));
|
||||
|
||||
$request = $this->getMock('\phpbb\request\request');
|
||||
$template = $this->getMock('\phpbb\template\template');
|
||||
|
||||
$this->cp = new \phpbb\profilefields\type\type_string(
|
||||
$request,
|
||||
$template,
|
||||
$user
|
||||
);
|
||||
|
||||
$this->field_options = array(
|
||||
'field_type' => '\phpbb\profilefields\type\type_string',
|
||||
'field_name' => 'field',
|
||||
'field_id' => 1,
|
||||
'lang_id' => 1,
|
||||
'lang_name' => 'field',
|
||||
'field_required' => false,
|
||||
'field_validation' => '.*',
|
||||
);
|
||||
}
|
||||
|
||||
public function validate_profile_field_data()
|
||||
{
|
||||
return array(
|
||||
array(
|
||||
'',
|
||||
array('field_required' => true),
|
||||
'FIELD_REQUIRED-field',
|
||||
'Field should not accept empty values for required fields',
|
||||
),
|
||||
array(
|
||||
null,
|
||||
array('field_required' => true),
|
||||
'FIELD_REQUIRED-field',
|
||||
'Field should not accept empty values for required field',
|
||||
),
|
||||
array(
|
||||
0,
|
||||
array('field_required' => true),
|
||||
false,
|
||||
'Field should accept a non-empty input',
|
||||
),
|
||||
array(
|
||||
'false',
|
||||
array('field_required' => true),
|
||||
false,
|
||||
'Field should accept a non-empty input',
|
||||
),
|
||||
array(
|
||||
10,
|
||||
array('field_required' => true),
|
||||
false,
|
||||
'Field should accept a non-empty input',
|
||||
),
|
||||
array(
|
||||
'tas',
|
||||
array('field_minlen' => 2, 'field_maxlen' => 5),
|
||||
false,
|
||||
'Field should accept value of correct length',
|
||||
),
|
||||
array(
|
||||
't',
|
||||
array('field_minlen' => 2, 'field_maxlen' => 5),
|
||||
'FIELD_TOO_SHORT-2-field',
|
||||
'Field should reject value of incorrect length',
|
||||
),
|
||||
array(
|
||||
'this is a long string',
|
||||
array('field_minlen' => 2, 'field_maxlen' => 5),
|
||||
'FIELD_TOO_LONG-5-field',
|
||||
'Field should reject value of incorrect length',
|
||||
),
|
||||
array(
|
||||
'H3110',
|
||||
array('field_validation' => '[0-9]+'),
|
||||
'FIELD_INVALID_CHARS_NUMBERS_ONLY-field',
|
||||
'Required field should reject characters in a numbers-only field',
|
||||
),
|
||||
array(
|
||||
'<>"&%&><>',
|
||||
array('field_maxlen' => 10, 'field_minlen' => 2),
|
||||
false,
|
||||
'Optional field should accept html entities',
|
||||
),
|
||||
array(
|
||||
'ö ä ü ß',
|
||||
array(),
|
||||
false,
|
||||
'Required field should accept UTF-8 string',
|
||||
),
|
||||
array(
|
||||
'This ö ä string has to b',
|
||||
array('field_maxlen' => 10),
|
||||
'FIELD_TOO_LONG-10-field',
|
||||
'Required field should reject an UTF-8 string which is too long',
|
||||
),
|
||||
array(
|
||||
'ö äö äö ä',
|
||||
array('field_validation' => '[\w]+'),
|
||||
'FIELD_INVALID_CHARS_ALPHA_ONLY-field',
|
||||
'Required field should reject UTF-8 in alpha only field',
|
||||
),
|
||||
array(
|
||||
'Hello',
|
||||
array('field_validation' => '[\w]+'),
|
||||
false,
|
||||
'Required field should accept a characters only field',
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider validate_profile_field_data
|
||||
*/
|
||||
public function test_validate_profile_field($value, $field_options, $expected, $description)
|
||||
{
|
||||
$field_options = array_merge($this->field_options, $field_options);
|
||||
|
||||
$result = $this->cp->validate_profile_field($value, $field_options);
|
||||
|
||||
$this->assertSame($expected, $result, $description);
|
||||
}
|
||||
|
||||
public function profile_value_data()
|
||||
{
|
||||
return array(
|
||||
array(
|
||||
'test',
|
||||
array('field_show_novalue' => true),
|
||||
'test',
|
||||
'Field should output the given value',
|
||||
),
|
||||
array(
|
||||
'test',
|
||||
array('field_show_novalue' => false),
|
||||
'test',
|
||||
'Field should output the given value',
|
||||
),
|
||||
array(
|
||||
'',
|
||||
array('field_show_novalue' => true),
|
||||
'',
|
||||
'Field should output nothing for empty value',
|
||||
),
|
||||
array(
|
||||
'',
|
||||
array('field_show_novalue' => false),
|
||||
null,
|
||||
'Field should simply output null for empty vlaue',
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @dataProvider profile_value_data
|
||||
*/
|
||||
public function test_get_profile_value($value, $field_options, $expected, $description)
|
||||
{
|
||||
$field_options = array_merge($this->field_options, $field_options);
|
||||
|
||||
$result = $this->cp->get_profile_value($value, $field_options);
|
||||
|
||||
$this->assertSame($expected, $result, $description);
|
||||
}
|
||||
|
||||
public function return_callback_implode()
|
||||
{
|
||||
return implode('-', func_get_args());
|
||||
}
|
||||
}
|
111
tests/profilefields/type_url_test.php
Normal file
111
tests/profilefields/type_url_test.php
Normal file
@ -0,0 +1,111 @@
|
||||
<?php
|
||||
/**
|
||||
*
|
||||
* This file is part of the phpBB Forum Software package.
|
||||
*
|
||||
* @copyright (c) phpBB Limited <https://www.phpbb.com>
|
||||
* @license GNU General Public License, version 2 (GPL-2.0)
|
||||
*
|
||||
* For full copyright and license information, please see
|
||||
* the docs/CREDITS.txt file.
|
||||
*
|
||||
*/
|
||||
|
||||
require_once dirname(__FILE__) . '/../../phpBB/includes/functions.php';
|
||||
|
||||
class phpbb_profilefield_type_url_test extends phpbb_test_case
|
||||
{
|
||||
protected $cp;
|
||||
protected $field_options;
|
||||
|
||||
/**
|
||||
* Sets up basic test objects
|
||||
*
|
||||
* @access public
|
||||
* @return null
|
||||
*/
|
||||
public function setUp()
|
||||
{
|
||||
$user = $this->getMock('\phpbb\user');
|
||||
$user->expects($this->any())
|
||||
->method('lang')
|
||||
->will($this->returnCallback(array($this, 'return_callback_implode')));
|
||||
|
||||
$request = $this->getMock('\phpbb\request\request');
|
||||
$template = $this->getMock('\phpbb\template\template');
|
||||
|
||||
$this->cp = new \phpbb\profilefields\type\type_url(
|
||||
$request,
|
||||
$template,
|
||||
$user
|
||||
);
|
||||
|
||||
$this->field_options = array(
|
||||
'field_type' => '\phpbb\profilefields\type\type_url',
|
||||
'field_name' => 'field',
|
||||
'field_id' => 1,
|
||||
'lang_id' => 1,
|
||||
'lang_name' => 'field',
|
||||
'field_required' => false,
|
||||
);
|
||||
}
|
||||
|
||||
public function validate_profile_field_data()
|
||||
{
|
||||
return array(
|
||||
array(
|
||||
'',
|
||||
array('field_required' => true),
|
||||
'FIELD_INVALID_URL-field',
|
||||
'Field should reject empty field that is required',
|
||||
),
|
||||
array(
|
||||
'invalidURL',
|
||||
array(),
|
||||
'FIELD_INVALID_URL-field',
|
||||
'Field should reject invalid input',
|
||||
),
|
||||
array(
|
||||
'http://onetwothree.example.io',
|
||||
array(),
|
||||
false,
|
||||
'Field should accept valid URL',
|
||||
),
|
||||
array(
|
||||
'http://example.com/index.html?param1=test¶m2=awesome',
|
||||
array(),
|
||||
false,
|
||||
'Field should accept valid URL',
|
||||
),
|
||||
array(
|
||||
'http://example.com/index.html/test/path?document=get',
|
||||
array(),
|
||||
false,
|
||||
'Field should accept valid URL',
|
||||
),
|
||||
array(
|
||||
'http://example.com/index.html/test/path?document[]=DocType%20test&document[]=AnotherDoc',
|
||||
array(),
|
||||
'FIELD_INVALID_URL-field',
|
||||
'Field should reject invalid URL having multi value parameters',
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider validate_profile_field_data
|
||||
*/
|
||||
public function test_validate_profile_field($value, $field_options, $expected, $description)
|
||||
{
|
||||
$field_options = array_merge($this->field_options, $field_options);
|
||||
|
||||
$result = $this->cp->validate_profile_field($value, $field_options);
|
||||
|
||||
$this->assertSame($expected, $result, $description);
|
||||
}
|
||||
|
||||
public function return_callback_implode()
|
||||
{
|
||||
return implode('-', func_get_args());
|
||||
}
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user