object = new Qbe(new Relation($GLOBALS['dbi']), new Template(), $GLOBALS['dbi'], 'pma_test'); $GLOBALS['server'] = 0; $GLOBALS['db'] = 'pma_test'; //mock DBI $dbi = $this->getMockBuilder(DatabaseInterface::class) ->disableOriginalConstructor() ->getMock(); $create_table = 'CREATE TABLE `table1` (' . '`id` int(11) NOT NULL,' . '`value` int(11) NOT NULL,' . 'PRIMARY KEY (`id`,`value`),' . 'KEY `value` (`value`)' . ') ENGINE=InnoDB DEFAULT CHARSET=latin1'; $dbi->expects($this->any()) ->method('fetchValue') ->with('SHOW CREATE TABLE `pma_test`.`table1`', 0, 1) ->will($this->returnValue($create_table)); $dbi->expects($this->any()) ->method('getTableIndexes') ->will($this->returnValue([])); $GLOBALS['dbi'] = $dbi; $this->object->dbi = $dbi; } /** * Tears down the fixture, for example, closes a network connection. * This method is called after a test is executed. * * @access protected * @return void */ protected function tearDown(): void { parent::tearDown(); unset($this->object); } /** * Call protected functions by setting visibility to public. * * @param string $name method name * @param array $params parameters for the invocation * * @return mixed the output from the protected method. */ private function _callProtectedFunction($name, $params) { $class = new ReflectionClass(Qbe::class); $method = $class->getMethod($name); $method->setAccessible(true); return $method->invokeArgs($this->object, $params); } /** * Test for _getSortSelectCell * * @return void */ public function testGetSortSelectCell() { $this->assertStringContainsString( 'style="width:12ex" name="criteriaSort[1]"', $this->_callProtectedFunction( '_getSortSelectCell', [1] ) ); $this->assertStringNotContainsString( 'selected="selected"', $this->_callProtectedFunction( '_getSortSelectCell', [1] ) ); $this->assertStringContainsString( 'value="ASC" selected="selected">', $this->_callProtectedFunction( '_getSortSelectCell', [ 1, 'ASC', ] ) ); } /** * Test for _getSortRow * * @return void */ public function testGetSortRow() { $this->assertStringContainsString( 'Sort:', $this->_callProtectedFunction( '_getSortRow', [] ) ); $this->assertStringContainsString( 'name="criteriaSort[0]"', $this->_callProtectedFunction( '_getSortRow', [] ) ); $this->assertStringContainsString( 'name="criteriaSort[1]"', $this->_callProtectedFunction( '_getSortRow', [] ) ); $this->assertStringContainsString( 'name="criteriaSort[2]"', $this->_callProtectedFunction( '_getSortRow', [] ) ); } /** * Test for _getShowRow * * @return void */ public function testGetShowRow() { $this->assertEquals( 'Show:' . '' . '', $this->_callProtectedFunction( '_getShowRow', [] ) ); } /** * Test for _getCriteriaInputboxRow * * @return void */ public function testGetCriteriaInputboxRow() { $this->assertEquals( 'Criteria:' . '' . '' . '' . '' . '' . '', $this->_callProtectedFunction( '_getCriteriaInputboxRow', [] ) ); } /** * Test for _getFootersOptions * * @return void */ public function testGetFootersOptions() { $this->assertStringContainsString( 'Add/Delete criteria rows', $this->_callProtectedFunction( '_getFootersOptions', ['row'] ) ); $this->assertStringContainsString( 'name="criteriaRowAdd"', $this->_callProtectedFunction( '_getFootersOptions', ['row'] ) ); $this->assertStringContainsString( '', $this->_callProtectedFunction( '_getFootersOptions', ['row'] ) ); } /** * Test for _getTableFooters * * @return void */ public function testGetTableFooters() { $this->assertStringContainsString( 'name="criteriaRowAdd"', $this->_callProtectedFunction( '_getTableFooters', [] ) ); $this->assertStringContainsString( 'name="criteriaColumnAdd"', $this->_callProtectedFunction( '_getTableFooters', [] ) ); $this->assertStringContainsString( '', $this->_callProtectedFunction( '_getTableFooters', [] ) ); } /** * Test for _getAndOrColCell * * @return void */ public function testGetAndOrColCell() { $this->assertEquals( 'Or:  And:' . '
Ins  Del', $this->_callProtectedFunction( '_getAndOrColCell', [1] ) ); } /** * Test for _getModifyColumnsRow * * @return void */ public function testGetModifyColumnsRow() { $this->assertEquals( 'Modify:' . 'Or:  And:
Ins' . '  ' . 'DelOr:  And:' . '
Ins  Del
Ins' . '  ' . 'Del' . '', $this->_callProtectedFunction( '_getModifyColumnsRow', [] ) ); } /** * Test for _getInsDelAndOrCell * * @return void */ public function testGetInsDelAndOrCell() { $this->assertEquals( '
Ins:' . 'And:
Del:' . 'Or:
', $this->_callProtectedFunction( '_getInsDelAndOrCell', [ 3, [ 'and' => '', 'or' => ' checked="checked"', ], ] ) ); } /** * Test for _getInputboxRow * * @return void */ public function testGetInputboxRow() { $this->assertEquals( '' . '', $this->_callProtectedFunction( '_getInputboxRow', [2] ) ); } /** * Test for _getInsDelAndOrCriteriaRows * * @return void */ public function testGetInsDelAndOrCriteriaRows() { $this->assertEquals( '' . '
Ins:And:' . '
Del:' . 'Or:' . '
', $this->_callProtectedFunction( '_getInsDelAndOrCriteriaRows', [ 2, 3, ] ) ); } /** * Test for _getSelectClause * * @return void */ public function testGetSelectClause() { $this->assertEquals( '', $this->_callProtectedFunction( '_getSelectClause', [] ) ); } /** * Test for _getWhereClause * * @return void */ public function testGetWhereClause() { $this->assertEquals( '', $this->_callProtectedFunction( '_getWhereClause', [] ) ); } /** * Test for _getOrderByClause * * @return void */ public function testGetOrderByClause() { $this->assertEquals( '', $this->_callProtectedFunction( '_getOrderByClause', [] ) ); } /** * Test for _getIndexes * * @return void */ public function testGetIndexes() { $this->assertEquals( [ 'unique' => [], 'index' => [], ], $this->_callProtectedFunction( '_getIndexes', [ [ '`table1`', 'table2', ], [ 'column1', 'column2', 'column3', ], ['column2'], ] ) ); } /** * Test for _getLeftJoinColumnCandidates * * @return void */ public function testGetLeftJoinColumnCandidates() { $this->assertEquals( [ 0 => 'column2', ], $this->_callProtectedFunction( '_getLeftJoinColumnCandidates', [ [ '`table1`', 'table2', ], [ 'column1', 'column2', 'column3', ], ['column2'], ] ) ); } /** * Test for _getMasterTable * * @return void */ public function testGetMasterTable() { $this->assertEquals( 0, $this->_callProtectedFunction( '_getMasterTable', [ [ 'table1', 'table2', ], [ 'column1', 'column2', 'column3', ], ['column2'], ['qbe_test'], ] ) ); } /** * Test for _getWhereClauseTablesAndColumns * * @return void */ public function testGetWhereClauseTablesAndColumns() { $_POST['criteriaColumn'] = [ 'table1.id', 'table1.value', 'table1.name', 'table1.deleted', ]; $this->assertEquals( [ 'where_clause_tables' => [], 'where_clause_columns' => [], ], $this->_callProtectedFunction( '_getWhereClauseTablesAndColumns', [] ) ); } /** * Test for _getFromClause * * @return void */ public function testGetFromClause() { $_POST['criteriaColumn'] = [ 'table1.id', 'table1.value', 'table1.name', 'table1.deleted', ]; $this->assertEquals( '`table1`', $this->_callProtectedFunction( '_getFromClause', [['`table1`.`id`']] ) ); } /** * Test for _getSQLQuery * * @return void */ public function testGetSQLQuery() { $_POST['criteriaColumn'] = [ 'table1.id', 'table1.value', 'table1.name', 'table1.deleted', ]; $this->assertEquals( 'FROM `table1` ', $this->_callProtectedFunction( '_getSQLQuery', [['`table1`.`id`']] ) ); } }