PMA_VERSION, 'db' => 'pmadb', 'tracking' => 'tracking', 'trackingwork' => true ); $_SESSION['PMA_Theme'] = new Theme(); $GLOBALS['cfg']['Server']['tracking_default_statements'] = 'DELETE'; $dbi = $this->getMockBuilder('PMA\libraries\DatabaseInterface') ->disableOriginalConstructor() ->getMock(); $fetchArray = array('version' => "10"); $dbi->expects($this->any()) ->method('fetchArray') ->will($this->returnValue($fetchArray)); $dbi->expects($this->any()) ->method('query') ->will($this->returnValue(true)); $dbi->expects($this->any()) ->method('tryQuery') ->will($this->returnValue(true)); $GLOBALS['dbi'] = $dbi; } /** * Tests for PMA_filterTracking() method. * * @return void * @test */ public function testPMAFilterTracking() { $data = array( array( "date" => "20120102", "username"=> "username1", "statement"=>"statement1" ), array( "date" => "20130102", "username"=> "username2", "statement"=>"statement2" ), ); $filter_ts_from = 0; $filter_ts_to = 999999999999; $filter_users = array("username1"); $ret = PMA_filterTracking( $data, $filter_ts_from, $filter_ts_to, $filter_users ); $this->assertEquals( 'username1', $ret[0]['username'] ); $this->assertEquals( 'statement1', $ret[0]['statement'] ); } /** * Tests for PMA_getHtmlForDataDefinitionAndManipulationStatements() method. * * @return void * @test */ public function testPMAGetHtmlForDataDefinitionAndManipulationStatements() { $url_query = "url_query"; $last_version = 10; $html = PMA_getHtmlForDataDefinitionAndManipulationStatements( $url_query, $last_version, $GLOBALS['db'], array($GLOBALS['table']) ); $this->assertContains( '
', $html ); $this->assertContains( $url_query, $html ); $this->assertContains( PMA_URL_getHiddenInputs($GLOBALS['db']), $html ); $item = sprintf( __('Create version %1$s of %2$s'), ($last_version + 1), htmlspecialchars($GLOBALS['db'] . '.' . $GLOBALS['table']) ); $this->assertContains( $item, $html ); $item = ' DELETE
'; $this->assertContains( $item, $html ); $this->assertContains( __('Create version'), $html ); } /** * Tests for PMA_getHtmlForActivateDeactivateTracking() method. * * @return void * @test */ public function testPMAGetHtmlForActivateDeactivateTracking() { $url_query = "url_query"; $last_version = "10"; $html = PMA_getHtmlForActivateDeactivateTracking( 'activate', $url_query, $last_version ); $this->assertContains( $url_query, $html ); $item = sprintf( __('Activate tracking for %s'), htmlspecialchars($GLOBALS['db'] . '.' . $GLOBALS['table']) ); $this->assertContains( $item, $html ); $this->assertContains( $last_version, $html ); $this->assertContains( __('Activate now'), $html ); $html = PMA_getHtmlForActivateDeactivateTracking( 'deactivate', $url_query, $last_version ); $this->assertContains( $url_query, $html ); $item = sprintf( __('Deactivate tracking for %s'), htmlspecialchars($GLOBALS['db'] . '.' . $GLOBALS['table']) ); $this->assertContains( $item, $html ); $this->assertContains( $last_version, $html ); $this->assertContains( __('Deactivate now'), $html ); } /** * Tests for PMA_getTableLastVersionNumber() method. * * @return void * @test */ public function testPMAGetTableLastVersionNumber() { $sql_result = "sql_result"; $last_version = PMA_getTableLastVersionNumber($sql_result); $this->assertEquals( "10", $last_version ); } /** * Tests for PMA_getSQLResultForSelectableTables() method. * * @return void * @test */ public function testPMAGetSQLResultForSelectableTables() { $ret = PMA_getSQLResultForSelectableTables(); $this->assertEquals( true, $ret ); } /** * Tests for PMA_getHtmlForColumns() method. * * @return void * @test */ public function testPMAGetHtmlForColumns() { $columns = array( array( 'Field'=>'Field1', 'Type'=>'Type1', 'Collation'=>'Collation1', "Null"=>'YES', 'Extra'=>'Extra1', 'Key'=>'PRI', 'Comment'=>'Comment1' ), array( 'Field'=>'Field2', 'Type'=>'Type2', 'Collation'=>'Collation2', "Null"=>'No', 'Extra'=>'Extra2', 'Key'=>'Key2', 'Comment'=>'Comment2' ), ); $html = PMA_getHtmlForColumns($columns); $this->assertContains( __('Column'), $html ); $this->assertContains( __('Type'), $html ); $this->assertContains( __('Collation'), $html ); $this->assertContains( __('Default'), $html ); $this->assertContains( __('Comment'), $html ); //column1 $item1= $columns[0]; $this->assertContains( htmlspecialchars($item1['Field']), $html ); $this->assertContains( htmlspecialchars($item1['Type']), $html ); $this->assertContains( htmlspecialchars($item1['Collation']), $html ); $this->assertContains( 'NULL', $html ); $this->assertContains( htmlspecialchars($item1['Comment']), $html ); //column2 $item1= $columns[1]; $this->assertContains( htmlspecialchars($item1['Field']), $html ); $this->assertContains( htmlspecialchars($item1['Type']), $html ); $this->assertContains( htmlspecialchars($item1['Collation']), $html ); $this->assertContains( _pgettext('None for default', 'None'), $html ); $this->assertContains( htmlspecialchars($item1['Comment']), $html ); } /** * Tests for PMA_getListOfVersionsOfTable() method. * * @return void * @test */ public function testPMAGetListOfVersionsOfTable() { $ret = PMA_getListOfVersionsOfTable(); $this->assertEquals( true, $ret ); } /** * Tests for PMA_getHtmlForTableVersionDetails() method. * * @return void * @test */ public function testPMAGetHtmlForTableVersionDetails() { $sql_result = true; $last_version = "10"; $url_params = array(); $url_query = "select * from PMA"; $pmaThemeImage = "themePath/img"; $text_dir = "ltr"; $dbi_old = $GLOBALS['dbi']; $dbi = $this->getMockBuilder('PMA\libraries\DatabaseInterface') ->disableOriginalConstructor() ->getMock(); $fetchArray = array( 'tracking_active' => 1, 'version' => "10", 'db_name' => 'db_name', 'table_name' => 'table_name', 'date_created' => 'date_created', 'date_updated' => 'date_updated' ); $dbi->expects($this->at(0)) ->method('fetchArray') ->will($this->returnValue($fetchArray)); $dbi->expects($this->at(1)) ->method('fetchArray') ->will($this->returnValue($fetchArray)); $dbi->expects($this->at(2)) ->method('fetchArray') ->will($this->returnValue(false)); $GLOBALS['dbi'] = $dbi; $ret = PMA_getHtmlForTableVersionDetails( $sql_result, $last_version, $url_params, $url_query, $pmaThemeImage, $text_dir ); $this->assertContains( __('Version'), $ret ); $this->assertContains( __('Created'), $ret ); $this->assertContains( __('Updated'), $ret ); $this->assertContains( __('Status'), $ret ); $this->assertContains( __('Action'), $ret ); $this->assertContains( __('Show'), $ret ); $this->assertContains( $fetchArray['version'], $ret ); $this->assertContains( $fetchArray['date_created'], $ret ); $this->assertContains( $fetchArray['date_updated'], $ret ); $this->assertContains( __('Tracking report'), $ret ); $this->assertContains( __('Structure snapshot'), $ret ); $html = sprintf( __('Deactivate tracking for %s'), htmlspecialchars($GLOBALS['db'] . '.' . $GLOBALS['table']) ); $this->assertContains( $html, $ret ); //restore DBI $GLOBALS['dbi'] = $dbi_old; } /** * Tests for PMA_getHtmlForSelectableTables() method. * * @return void * @test */ public function testPMAGetHtmlForSelectableTables() { $selectable_tables_sql_result = true; $url_query = "select * from PMA"; $dbi_old = $GLOBALS['dbi']; $dbi = $this->getMockBuilder('PMA\libraries\DatabaseInterface') ->disableOriginalConstructor() ->getMock(); $fetchArray = array( 'tracking_active' => 1, 'version' => "10", 'db_name' => 'db_name', 'table_name' => 'table_name', 'date_created' => 'date_created', 'date_updated' => 'date_updated' ); $dbi->expects($this->at(0)) ->method('fetchArray') ->will($this->returnValue($fetchArray)); $dbi->expects($this->at(1)) ->method('fetchArray') ->will($this->returnValue($fetchArray)); $dbi->expects($this->at(2)) ->method('fetchArray') ->will($this->returnValue(false)); $GLOBALS['dbi'] = $dbi; $ret = PMA_getHtmlForSelectableTables( $selectable_tables_sql_result, $url_query ); $this->assertContains( htmlspecialchars($fetchArray['table_name']), $ret ); $this->assertContains( htmlspecialchars($fetchArray['db_name']), $ret ); //restore DBI $GLOBALS['dbi'] = $dbi_old; } /** * Tests for PMA_getHtmlForTrackingReport() method. * * @return void * @test */ public function testPMAGetHtmlForTrackingReportr() { $_REQUEST['version'] = 10; $_REQUEST['date_from'] = "date_from"; $_REQUEST['date_to'] = "date_to"; $_REQUEST['users'] = "users"; $_REQUEST['logtype'] = 'logtype'; $url_query = "select * from PMA"; $data = array( 'tracking'=>'tracking', 'ddlog' => array('ddlog'), 'dmlog' => array('dmlog') ); $url_params = array(); $selection_schema = array(); $selection_data = array(); $selection_both = array(); $filter_ts_to = array(); $filter_ts_from = array(); $filter_users = array(); $html = PMA_getHtmlForTrackingReport( $url_query, $data, $url_params, $selection_schema, $selection_data, $selection_both, $filter_ts_to, $filter_ts_from, $filter_users ); $this->assertContains( __('Tracking report'), $html ); $this->assertContains( $url_query, $html ); $this->assertContains( __('Tracking statements'), $html ); $this->assertContains( $data['tracking'], $html ); $version = '
'tracking', 'dmlog' => array( array( 'statement' => 'statement', 'date' => 'date', 'username' => 'username', ) ), 'ddlog' => array('ddlog') ); $url_params = array(); $ddlog_count = 10; $drop_image_or_text = "text"; $filter_ts_to = 9999999999; $filter_ts_from = 0; $filter_users = array("*"); $html = PMA_getHtmlForDataManipulationStatements( $data, $filter_users, $filter_ts_from, $filter_ts_to, $url_params, $ddlog_count, $drop_image_or_text ); $this->assertContains( __('Date'), $html ); $this->assertContains( __('Username'), $html ); $this->assertContains( __('Data manipulation statement'), $html ); $this->assertContains( $data['dmlog'][0]['date'], $html ); $this->assertContains( $data['dmlog'][0]['username'], $html ); } /** * Tests for PMA_getHtmlForDataDefinitionStatements() method. * * @return void * @test */ public function testPMAGetHtmlForDataDefinitionStatements() { $_REQUEST['version'] = "10"; $data = array( 'tracking'=>'tracking', 'ddlog' => array( array( 'statement' => 'statement', 'date' => 'date', 'username' => 'username', ) ), 'dmlog' => array('dmlog') ); $filter_users = array("*"); $filter_ts_to = 9999999999; $filter_ts_from = 0; $url_params = array(); $drop_image_or_text = "text"; list($html, $count) = PMA_getHtmlForDataDefinitionStatements( $data, $filter_users, $filter_ts_from, $filter_ts_to, $url_params, $drop_image_or_text ); $this->assertContains( __('Date'), $html ); $this->assertContains( __('Username'), $html ); $this->assertContains( __('Data definition statement'), $html ); $this->assertContains( __('Action'), $html ); //PMA_getHtmlForDataDefinitionStatement $this->assertContains( htmlspecialchars($data['ddlog'][0]['username']), $html ); $this->assertEquals( 2, $count ); } /** * Tests for PMA_getHtmlForIndexes() method. * * @return void * @test */ public function testPMAGetHtmlForIndexes() { $indexs = array( array( 'Non_unique' => 0, 'Packed' => '', 'Key_name' => 'Key_name1', 'Index_type' => 'BTREE', 'Column_name' => 'Column_name', 'Cardinality' => 'Cardinality', 'Collation' => 'Collation', 'Null' => 'Null', 'Comment' => 'Comment', ), ); $html = PMA_getHtmlForIndexes($indexs); $this->assertContains( __('Indexes'), $html ); $this->assertContains( __('Keyname'), $html ); $this->assertContains( __('Type'), $html ); $this->assertContains( __('Unique'), $html ); $this->assertContains( __('Packed'), $html ); $this->assertContains( __('Column'), $html ); $this->assertContains( __('Cardinality'), $html ); // items $this->assertContains( htmlspecialchars($indexs[0]['Key_name']), $html ); $this->assertContains( htmlspecialchars($indexs[0]['Index_type']), $html ); $this->assertContains( htmlspecialchars($indexs[0]['Column_name']), $html ); $this->assertContains( htmlspecialchars($indexs[0]['Cardinality']), $html ); $this->assertContains( htmlspecialchars($indexs[0]['Collation']), $html ); } /** * Tests for PMA_getTrackingSet() method. * * @return void * @test */ public function testPMAGetTrackingSet() { $_REQUEST['alter_table'] = false; $_REQUEST['rename_table'] = true; $_REQUEST['create_table'] = true; $_REQUEST['drop_table'] = true; $_REQUEST['create_index'] = false; $_REQUEST['drop_index'] = true; $_REQUEST['insert'] = true; $_REQUEST['update'] = false; $_REQUEST['delete'] = true; $_REQUEST['truncate'] = true; $tracking_set = PMA_getTrackingSet(); $this->assertEquals( 'RENAME TABLE,CREATE TABLE,DROP TABLE,DROP INDEX,INSERT,DELETE,TRUNCATE', $tracking_set ); //other set to true $_REQUEST['alter_table'] = true; $_REQUEST['rename_table'] = false; $_REQUEST['create_table'] = false; $_REQUEST['drop_table'] = false; $_REQUEST['create_index'] = true; $_REQUEST['drop_index'] = false; $_REQUEST['insert'] = false; $_REQUEST['update'] = true; $_REQUEST['delete'] = false; $_REQUEST['truncate'] = false; $tracking_set = PMA_getTrackingSet(); $this->assertEquals( 'ALTER TABLE,CREATE INDEX,UPDATE', $tracking_set ); } /** * Tests for PMA_getEntries() method. * * @return void * @test */ public function testPMAGetEntries() { $_REQUEST['logtype'] = 'schema'; $data = array( 'tracking'=>'tracking', 'ddlog' => array( array( 'statement' => 'statement1', 'date' => 'date2', 'username' => 'username3', ) ), 'dmlog' => array( array( 'statement' => 'statement1', 'date' => 'date2', 'username' => 'username3', ) ), ); $filter_users = array("*"); $filter_ts_to = 9999999999; $filter_ts_from = 0; $entries = PMA_getEntries( $data, $filter_ts_from, $filter_ts_to, $filter_users ); $this->assertEquals( 'username3', $entries[0]['username'] ); $this->assertEquals( 'statement1', $entries[0]['statement'] ); } }