insertEdit = new InsertEdit($GLOBALS['dbi']);
}
/**
* Call protected functions by setting visibility to public.
*
* @param string $name method name
* @param array $params parameters for the invocation
* @param InsertEdit $object InsertEdit instance object
*
* @return mixed the output from the protected method.
*/
private function callProtectedMethod(
$name,
array $params = [],
InsertEdit $object = null
) {
$class = new ReflectionClass(InsertEdit::class);
$method = $class->getMethod($name);
$method->setAccessible(true);
return $method->invokeArgs(
$object ?? $this->insertEdit,
$params
);
}
/**
* Test for getFormParametersForInsertForm
*
* @return void
*/
public function testGetFormParametersForInsertForm()
{
$where_clause = ['foo' => 'bar ', '1' => ' test'];
$_REQUEST['clause_is_unique'] = false;
$_POST['sql_query'] = 'SELECT a';
$GLOBALS['goto'] = 'index.php';
$result = $this->insertEdit->getFormParametersForInsertForm(
'dbname',
'tablename',
[],
$where_clause,
'localhost'
);
$this->assertEquals(
[
'db' => 'dbname',
'table' => 'tablename',
'goto' => 'index.php',
'err_url' => 'localhost',
'sql_query' => 'SELECT a',
'where_clause[foo]' => 'bar',
'where_clause[1]' => 'test',
'clause_is_unique' => false
],
$result
);
}
/**
* Test for getWhereClauseArray
*
* @return void
*/
public function testGetWhereClauseArray()
{
$this->assertEquals(
[],
$this->callProtectedMethod('getWhereClauseArray', [null])
);
$this->assertEquals(
[1, 2, 3],
$this->callProtectedMethod('getWhereClauseArray', [[1, 2, 3]])
);
$this->assertEquals(
['clause'],
$this->callProtectedMethod('getWhereClauseArray', ['clause'])
);
}
/**
* Test for analyzeWhereClauses
*
* @return void
*/
public function testAnalyzeWhereClause()
{
$clauses = ['a=1', 'b="fo\o"'];
$dbi = $this->getMockBuilder('PhpMyAdmin\DatabaseInterface')
->disableOriginalConstructor()
->getMock();
$dbi->expects($this->exactly(2))
->method('query')
->willReturnOnConsecutiveCalls(
'result1',
'result2'
);
$dbi->expects($this->exactly(2))
->method('fetchAssoc')
->willReturnOnConsecutiveCalls(
['assoc1'],
['assoc2']
);
$dbi->expects($this->exactly(2))
->method('getFieldsMeta')
->willReturnOnConsecutiveCalls(
[],
[]
);
$GLOBALS['dbi'] = $dbi;
$this->insertEdit = new InsertEdit($GLOBALS['dbi']);
$result = $this->callProtectedMethod('analyzeWhereClauses', [
$clauses,
'table',
'db'
]);
$this->assertEquals(
[
['a=1', 'b="fo\\\\o"'],
['result1', 'result2'],
[
['assoc1'],
['assoc2']
],
''
],
$result
);
}
/**
* Test for showEmptyResultMessageOrSetUniqueCondition
*
* @return void
*/
public function testShowEmptyResultMessageOrSetUniqueCondition()
{
$temp = new stdClass();
$temp->orgname = 'orgname';
$temp->table = 'table';
$temp->type = 'real';
$temp->primary_key = 1;
$meta_arr = [$temp];
$dbi = $this->getMockBuilder('PhpMyAdmin\DatabaseInterface')
->disableOriginalConstructor()
->getMock();
$dbi->expects($this->at(0))
->method('getFieldsMeta')
->with('result1')
->will($this->returnValue($meta_arr));
$GLOBALS['dbi'] = $dbi;
$this->insertEdit = new InsertEdit($GLOBALS['dbi']);
$result = $this->callProtectedMethod('showEmptyResultMessageOrSetUniqueCondition', [
['1' => ['1' => 1]], 1, [],
'SELECT', ['1' => 'result1']
]);
$this->assertTrue($result);
// case 2
$GLOBALS['cfg']['ShowSQL'] = false;
$responseMock = $this->getMockBuilder('PhpMyAdmin\Response')
->disableOriginalConstructor()
->setMethods(['addHtml'])
->getMock();
$restoreInstance = Response::getInstance();
$response = new ReflectionProperty('PhpMyAdmin\Response', '_instance');
$response->setAccessible(true);
$response->setValue($responseMock);
$result = $this->callProtectedMethod('showEmptyResultMessageOrSetUniqueCondition', [
[false], 0, ['1'], 'SELECT', ['1' => 'result1']
]);
$response->setValue($restoreInstance);
$this->assertFalse($result);
}
/**
* Test for loadFirstRow
*
* @return void
*/
public function testLoadFirstRow()
{
$GLOBALS['cfg']['InsertRows'] = 2;
$dbi = $this->getMockBuilder('PhpMyAdmin\DatabaseInterface')
->disableOriginalConstructor()
->getMock();
$dbi->expects($this->at(0))
->method('query')
->with(
'SELECT * FROM `db`.`table` LIMIT 1;',
DatabaseInterface::CONNECT_USER,
DatabaseInterface::QUERY_STORE
)
->will($this->returnValue('result1'));
$GLOBALS['dbi'] = $dbi;
$this->insertEdit = new InsertEdit($GLOBALS['dbi']);
$result = $this->callProtectedMethod('loadFirstRow', ['table', 'db']);
$this->assertEquals(
['result1', [false, false]],
$result
);
}
/**
* Test for urlParamsInEditMode
*
* @return void
*/
public function testUrlParamsInEditMode()
{
$where_clause_array = ['foo=1', 'bar=2'];
$_POST['sql_query'] = 'SELECT 1';
$result = $this->insertEdit->urlParamsInEditMode([1], $where_clause_array, '');
$this->assertEquals(
[
'0' => 1,
'where_clause' => 'bar=2',
'sql_query' => 'SELECT 1'
],
$result
);
}
/**
* Test for showTypeOrFunction
*
* @return void
*/
public function testShowTypeOrFunction()
{
$GLOBALS['cfg']['ShowFieldTypesInDataEditView'] = true;
$GLOBALS['cfg']['ServerDefault'] = 1;
$url_params = ['ShowFunctionFields' => 2];
$result = $this->insertEdit->showTypeOrFunction('function', $url_params, false);
$this->assertEquals(
' : '
. 'Function',
$result
);
// case 2
$result = $this->insertEdit->showTypeOrFunction('function', $url_params, true);
$this->assertEquals(
'
Function | ',
$result
);
// case 3
$result = $this->insertEdit->showTypeOrFunction('type', $url_params, false);
$this->assertEquals(
' : '
. 'Type',
$result
);
// case 4
$result = $this->insertEdit->showTypeOrFunction('type', $url_params, true);
$this->assertEquals(
'Type | ',
$result
);
}
/**
* Test for analyzeTableColumnsArray
*
* @return void
*/
public function testAnalyzeTableColumnsArray()
{
$column = [
'Field' => '1<2',
'Field_md5' => 'pswd',
'Type' => 'float(10, 1)'
];
$result = $this->callProtectedMethod('analyzeTableColumnsArray', [
$column, [], false
]);
$this->assertEquals(
$result['Field_html'],
'1<2'
);
$this->assertEquals(
$result['Field_md5'],
'4342210df36bf2ff2c4e2a997a6d4089'
);
$this->assertEquals(
$result['True_Type'],
'float'
);
$this->assertEquals(
$result['len'],
100
);
$this->assertEquals(
$result['Field_title'],
'1<2'
);
$this->assertEquals(
$result['is_binary'],
false
);
$this->assertEquals(
$result['is_blob'],
false
);
$this->assertEquals(
$result['is_char'],
false
);
$this->assertEquals(
$result['pma_type'],
'float(10, 1)'
);
$this->assertEquals(
$result['wrap'],
' nowrap'
);
$this->assertEquals(
$result['Field'],
'1<2'
);
}
/**
* Test for getColumnTitle
*
* @return void
*/
public function testGetColumnTitle()
{
$column = [];
$column['Field'] = 'f1<';
$column['Field_html'] = 'f1<';
$this->assertEquals(
$this->callProtectedMethod('getColumnTitle', [
$column, []
]),
'f1<'
);
$comments = [];
$comments['f1<'] = 'comment>';
$result = $this->callProtectedMethod('getColumnTitle', [
$column, $comments
]);
$this->assertContains(
'title="comment>"',
$result
);
$this->assertContains(
'f1<',
$result
);
}
/**
* Test for isColumn
*
* @return void
*/
public function testIsColumn()
{
$column = [];
$types = ['binary', 'varbinary'];
$column['Type'] = 'binaryfoo';
$this->assertTrue($this->insertEdit->isColumn($column, $types));
$column['Type'] = 'Binaryfoo';
$this->assertTrue($this->insertEdit->isColumn($column, $types));
$column['Type'] = 'varbinaryfoo';
$this->assertTrue($this->insertEdit->isColumn($column, $types));
$column['Type'] = 'barbinaryfoo';
$this->assertFalse($this->insertEdit->isColumn($column, $types));
$types = ['char', 'varchar'];
$column['Type'] = 'char(10)';
$this->assertTrue($this->insertEdit->isColumn($column, $types));
$column['Type'] = 'VarChar(20)';
$this->assertTrue($this->insertEdit->isColumn($column, $types));
$column['Type'] = 'foochar';
$this->assertFalse($this->insertEdit->isColumn($column, $types));
$types = ['blob', 'tinyblob', 'mediumblob', 'longblob'];
$column['Type'] = 'blob';
$this->assertTrue($this->insertEdit->isColumn($column, $types));
$column['Type'] = 'bloB';
$this->assertTrue($this->insertEdit->isColumn($column, $types));
$column['Type'] = 'mediumBloB';
$this->assertTrue($this->insertEdit->isColumn($column, $types));
$column['Type'] = 'tinyblobabc';
$this->assertTrue($this->insertEdit->isColumn($column, $types));
$column['Type'] = 'longblob';
$this->assertTrue($this->insertEdit->isColumn($column, $types));
$column['Type'] = 'foolongblobbar';
$this->assertFalse($this->insertEdit->isColumn($column, $types));
}
/**
* Test for getEnumSetAndTimestampColumns
*
* @return void
*/
public function testGetEnumAndTimestampColumns()
{
$column = [];
$column['True_Type'] = 'set';
$this->assertEquals(
['set', '', false],
$this->callProtectedMethod('getEnumSetAndTimestampColumns', [
$column, false
])
);
$column['True_Type'] = 'enum';
$this->assertEquals(
['enum', '', false],
$this->callProtectedMethod('getEnumSetAndTimestampColumns', [
$column, false
])
);
$column['True_Type'] = 'timestamp';
$column['Type'] = 'date';
$this->assertEquals(
['date', ' nowrap', true],
$this->callProtectedMethod('getEnumSetAndTimestampColumns', [
$column, false
])
);
$column['True_Type'] = 'timestamp';
$column['Type'] = 'date';
$this->assertEquals(
['date', ' nowrap', false],
$this->callProtectedMethod('getEnumSetAndTimestampColumns', [
$column, true
])
);
$column['True_Type'] = 'SET';
$column['Type'] = 'num';
$this->assertEquals(
['num', ' nowrap', false],
$this->callProtectedMethod('getEnumSetAndTimestampColumns', [
$column, false
])
);
$column['True_Type'] = '';
$column['Type'] = 'num';
$this->assertEquals(
['num', ' nowrap', false],
$this->callProtectedMethod('getEnumSetAndTimestampColumns', [
$column, false
])
);
}
/**
* Test for getFunctionColumn
*
* @return void
*/
public function testGetFunctionColumn()
{
$GLOBALS['cfg']['ProtectBinary'] = 'blob';
$column = [];
$column['is_blob'] = true;
$this->assertContains(
'Binary | ',
$this->callProtectedMethod('getFunctionColumn', [
$column, false, '', '', [], 0, 0, 0, false, false, []
])
);
$GLOBALS['cfg']['ProtectBinary'] = 'all';
$column['is_binary'] = true;
$this->assertContains(
'Binary | ',
$this->callProtectedMethod('getFunctionColumn', [
$column, true, '', '', [], 0, 0, 0, false, false, []
])
);
$GLOBALS['cfg']['ProtectBinary'] = 'noblob';
$column['is_blob'] = false;
$this->assertContains(
'Binary | ',
$this->callProtectedMethod('getFunctionColumn', [
$column, true, '', '', [], 0, 0, 0, false, false, []
])
);
$GLOBALS['cfg']['ProtectBinary'] = false;
$column['True_Type'] = 'enum';
$this->assertContains(
'-- | ',
$this->callProtectedMethod('getFunctionColumn', [
$column, true, '', '', [], 0, 0, 0, false, false, []
])
);
$column['True_Type'] = 'set';
$this->assertContains(
'-- | ',
$this->callProtectedMethod('getFunctionColumn', [
$column, true, '', '', [], 0, 0, 0, false, false, []
])
);
$column['True_Type'] = '';
$column['pma_type'] = 'int';
$this->assertContains(
'-- | ',
$this->callProtectedMethod('getFunctionColumn', [
$column, true, '', '', ['int'], 0, 0, 0, false, false, []
])
);
$column['Field'] = 'num';
$this->assertContains(
'