getMockBuilder('PMA_Table') ->disableOriginalConstructor() ->getMock(); $dbi = $this->getMockBuilder('PMA_DatabaseInterface') ->disableOriginalConstructor() ->getMock(); $dbi->expects($this->any())->method('getTable') ->will($this->returnValue($table)); $GLOBALS['dbi'] = $dbi; $container = Container::getDefaultContainer(); $container->set('db', 'db'); $container->set('table', 'table'); $container->set('dbi', $GLOBALS['dbi']); $this->response = new \PMA\Test\Stubs\PMA_Response(); $container->set('PMA_Response', $this->response); $container->alias('response', 'PMA_Response'); } /** * Tests for getKeyForTablePrimary() * * Case one: there are no primary key in the table * * @return void * @test */ public function testGetKeyForTablePrimaryOne() { $GLOBALS['dbi']->expects($this->any())->method('fetchAssoc') ->will($this->returnValue(null)); $class = new ReflectionClass('\PMA\Controllers\TableStructureController'); $method = $class->getMethod('getKeyForTablePrimary'); $method->setAccessible(true); $container = Container::getDefaultContainer(); $container->set('dbi', $GLOBALS['dbi']); $container->factory('PMA\Controllers\TableStructureController'); $container->alias( 'TableStructureController', 'PMA\Controllers\TableStructureController' ); $ctrl = $container->get('TableStructureController'); // No primary key in db.table2 $this->assertEquals( '', $method->invoke($ctrl) ); } /** * Tests for getKeyForTablePrimary() * * Case two: there are a primary key in the table * * @return void * @test */ public function testGetKeyForTablePrimaryTwo() { $GLOBALS['dbi']->expects($this->any())->method('fetchAssoc') ->will($this->returnCallback( function () { static $callCount = 0; if ($callCount == 0) { $callCount++; return array( 'Key_name' => 'PRIMARY', 'Column_name' => 'column' ); } else { return null; } } )); $class = new ReflectionClass('\PMA\Controllers\TableStructureController'); $method = $class->getMethod('getKeyForTablePrimary'); $method->setAccessible(true); $container = Container::getDefaultContainer(); $container->set('dbi', $GLOBALS['dbi']); $container->factory('PMA\Controllers\TableStructureController'); $container->alias( 'TableStructureController', 'PMA\Controllers\TableStructureController' ); $ctrl = $container->get('TableStructureController'); // With db.table, it has a primary key `column` $this->assertEquals( 'column, ', $method->invoke($ctrl) ); } /** * Tests for adjustColumnPrivileges() * * @return void * @test */ public function testAdjustColumnPrivileges() { $class = new ReflectionClass('\PMA\Controllers\TableStructureController'); $method = $class->getMethod('adjustColumnPrivileges'); $method->setAccessible(true); $container = Container::getDefaultContainer(); $container->set('dbi', $GLOBALS['dbi']); $container->factory('PMA\Controllers\TableStructureController'); $container->alias( 'TableStructureController', 'PMA\Controllers\TableStructureController' ); $ctrl = $container->get('TableStructureController'); $this->assertEquals( false, $method->invokeArgs($ctrl, array(null)) ); } /** * Tests for adjustColumnPrivileges() * For the Drizzle environment * * @return void * @test */ public function testAdjustColumnPrivilegesDrizzle() { if (! PMA_HAS_RUNKIT) { $this->markTestSkipped("Cannot redefine PMA_DRIZZLE constant"); } $class = new ReflectionClass('\PMA\Controllers\TableStructureController'); $method = $class->getMethod('adjustColumnPrivileges'); $method->setAccessible(true); $container = Container::getDefaultContainer(); $container->set('dbi', $GLOBALS['dbi']); $container->factory('PMA\Controllers\TableStructureController'); $container->alias( 'TableStructureController', 'PMA\Controllers\TableStructureController' ); $ctrl = $container->get('TableStructureController'); $this->assertEquals( false, $method->invokeArgs($ctrl, array(null)) ); runkit_constant_redefine('PMA_DRIZZLE', false); $adjust_privileges = array( 'col1' => 'col2' ); $GLOBALS['col_priv'] = true; $GLOBALS['flush_priv'] = true; $this->assertEquals( true, $method->invokeArgs($ctrl, array($adjust_privileges)) ); } /** * Tests for getMultipleFieldCommandType() * * @return void * @test */ public function testGetMultipleFieldCommandType() { $class = new ReflectionClass('\PMA\Controllers\TableStructureController'); $method = $class->getMethod('getMultipleFieldCommandType'); $method->setAccessible(true); $container = Container::getDefaultContainer(); $container->set('dbi', $GLOBALS['dbi']); $container->factory('PMA\Controllers\TableStructureController'); $container->alias( 'TableStructureController', 'PMA\Controllers\TableStructureController' ); $ctrl = $container->get('TableStructureController'); $this->assertEquals( null, $method->invoke($ctrl) ); $_REQUEST['submit_mult_drop_x'] = true; $this->assertEquals( 'drop', $method->invoke($ctrl) ); unset($_REQUEST['submit_mult_drop_x']); $_REQUEST['submit_mult'] = 'create'; $this->assertEquals( 'create', $method->invoke($ctrl) ); unset($_REQUEST['submit_mult']); $_REQUEST['mult_btn'] = __('Yes'); $this->assertEquals( 'row_delete', $method->invoke($ctrl) ); $_REQUEST['selected'] = array('a', 'b'); $method->invoke($ctrl); $this->assertEquals( $_REQUEST['selected'], $_REQUEST['selected_fld'] ); } }