Fixed tests for loosened MysqlColumnNameOrAlias validation.
[civicrm-core.git] / tests / phpunit / CRM / Utils / TypeTest.php
1 <?php
2
3 /**
4 * Class CRM_Utils_TypeTest
5 * @group headless
6 */
7 class CRM_Utils_TypeTest extends CiviUnitTestCase {
8
9 public function setUp() {
10 parent::setUp();
11 }
12
13 /**
14 * @dataProvider validateDataProvider
15 * @param $inputData
16 * @param $inputType
17 * @param $expectedResult
18 */
19 public function testValidate($inputData, $inputType, $expectedResult) {
20 $this->assertTrue($expectedResult === CRM_Utils_Type::validate($inputData, $inputType, FALSE));
21 }
22
23 /**
24 * @return array
25 */
26 public function validateDataProvider() {
27 return array(
28 array(10, 'Int', 10),
29 array('145E+3', 'Int', NULL),
30 array('10', 'Integer', 10),
31 array(-10, 'Int', -10),
32 array('-10', 'Integer', -10),
33 array('-10foo', 'Int', NULL),
34 array(10, 'Positive', 10),
35 array('145.0E+3', 'Positive', NULL),
36 array('10', 'Positive', 10),
37 array(-10, 'Positive', NULL),
38 array('-10', 'Positive', NULL),
39 array('-10foo', 'Positive', NULL),
40 array('civicrm_column_name', 'MysqlColumnNameOrAlias', 'civicrm_column_name'),
41 array('table.civicrm_column_name', 'MysqlColumnNameOrAlias', 'table.civicrm_column_name'),
42 array('table.civicrm_column_name.toomanydots', 'MysqlColumnNameOrAlias', NULL),
43 array('Home-street_address', 'MysqlColumnNameOrAlias', 'Home-street_address'),
44 array('`Home-street_address`', 'MysqlColumnNameOrAlias', '`Home-street_address`'),
45 array('`Home-street_address', 'MysqlColumnNameOrAlias', NULL),
46 array('table.`Home-street_address`', 'MysqlColumnNameOrAlias', 'table.`Home-street_address`'),
47 array('`table-alias`.`Home-street_address`', 'MysqlColumnNameOrAlias', '`table-alias`.`Home-street_address`'),
48 array('`table-alias`.column', 'MysqlColumnNameOrAlias', '`table-alias`.column'),
49 array('column_name, sleep(5)', 'MysqlColumnNameOrAlias', NULL),
50 array(str_repeat('a', 64), 'MysqlColumnNameOrAlias', str_repeat('a', 64)),
51 array(str_repeat('a', 65), 'MysqlColumnNameOrAlias', NULL),
52 array(str_repeat('a', 64) . '.' . str_repeat('a', 64), 'MysqlColumnNameOrAlias', str_repeat('a', 64) . '.' . str_repeat('a', 64)),
53 array(str_repeat('a', 64) . '.' . str_repeat('a', 65), 'MysqlColumnNameOrAlias', NULL),
54 array(str_repeat('a', 65) . '.' . str_repeat('a', 64), 'MysqlColumnNameOrAlias', NULL),
55 array('asc', 'MysqlOrderByDirection', 'asc'),
56 array('DESC', 'MysqlOrderByDirection', 'desc'),
57 array('DESCc', 'MysqlOrderByDirection', NULL),
58 array('table.civicrm_column_name desc', 'MysqlOrderBy', 'table.civicrm_column_name desc'),
59 array('table.civicrm_column_name desc,other_column, another_column desc', 'MysqlOrderBy', 'table.civicrm_column_name desc,other_column, another_column desc'),
60 array('table.`Home-street_address` asc, `table-alias`.`Home-street_address` desc,`table-alias`.column', 'MysqlOrderBy', 'table.`Home-street_address` asc, `table-alias`.`Home-street_address` desc,`table-alias`.column'),
61 );
62 }
63
64 /**
65 * @dataProvider escapeDataProvider
66 * @param $inputData
67 * @param $inputType
68 * @param $expectedResult
69 */
70 public function testEscape($inputData, $inputType, $expectedResult) {
71 $this->assertTrue($expectedResult === CRM_Utils_Type::escape($inputData, $inputType, FALSE));
72 }
73
74 /**
75 * @return array
76 */
77 public function escapeDataProvider() {
78 return array(
79 array(10, 'Int', 10),
80 array('145E+3', 'Int', NULL),
81 array('10', 'Integer', 10),
82 array(-10, 'Int', -10),
83 array(array(), 'Integer', NULL),
84 array('-10foo', 'Int', NULL),
85 array(10, 'Positive', 10),
86 array('145.0E+3', 'Positive', NULL),
87 array('10', 'Positive', 10),
88 array(-10, 'Positive', NULL),
89 array('-10', 'Positive', NULL),
90 array('-10foo', 'Positive', NULL),
91 array(array('10', 20), 'Country', array('10', 20)),
92 array(array('10', '-10foo'), 'Country', NULL),
93 array('', 'Timestamp', ''),
94 array('', 'ContactReference', ''),
95 array('3', 'ContactReference', 3),
96 array('-3', 'ContactReference', NULL),
97 // Escape function is meant for sql, not xss
98 array('<p onclick="alert(\'xss\');">Hello</p>', 'Memo', '<p onclick=\\"alert(\\\'xss\\\');\\">Hello</p>'),
99 array('civicrm_column_name', 'MysqlColumnNameOrAlias', '`civicrm_column_name`'),
100 array('table.civicrm_column_name', 'MysqlColumnNameOrAlias', '`table`.`civicrm_column_name`'),
101 array('table.civicrm_column_name.toomanydots', 'MysqlColumnNameOrAlias', NULL),
102 array('Home-street_address', 'MysqlColumnNameOrAlias', '`Home-street_address`'),
103 array('`Home-street_address`', 'MysqlColumnNameOrAlias', '`Home-street_address`'),
104 array('`Home-street_address', 'MysqlColumnNameOrAlias', NULL),
105 array('column_name, sleep(5)', 'MysqlColumnNameOrAlias', NULL),
106 array('asc', 'MysqlOrderByDirection', 'asc'),
107 array('DESC', 'MysqlOrderByDirection', 'desc'),
108 array('DESCc', 'MysqlOrderByDirection', NULL),
109 array('table.civicrm_column_name desc', 'MysqlOrderBy', '`table`.`civicrm_column_name` desc'),
110 array('table.civicrm_column_name desc,other_column,another_column desc', 'MysqlOrderBy', '`table`.`civicrm_column_name` desc, `other_column`, `another_column` desc'),
111 array('table.`Home-street_address` asc, `table-alias`.`Home-street_address` desc,`table-alias`.column', 'MysqlOrderBy', '`table`.`Home-street_address` asc, `table-alias`.`Home-street_address` desc, `table-alias`.`column`'),
112 );
113 }
114
115 }