diff --git a/test/selenium/PmaSeleniumDbEventsTest.php b/test/selenium/PmaSeleniumDbEventsTest.php new file mode 100644 index 0000000000..39ad276c06 --- /dev/null +++ b/test/selenium/PmaSeleniumDbEventsTest.php @@ -0,0 +1,233 @@ +_helper = new Helper($this); + $this->setBrowser($this->_helper->getBrowserString()); + $this->setBrowserUrl(TESTSUITE_PHPMYADMIN_HOST . TESTSUITE_PHPMYADMIN_URL); + $this->_helper->dbConnect(); + $this->_dbname = 'pma_db_test'; + $this->_helper->dbQuery('CREATE DATABASE ' . $this->_dbname); + $this->_helper->dbQuery('USE ' . $this->_dbname); + $this->_helper->dbQuery( + "CREATE TABLE `test_table` (" + . " `id` int(11) NOT NULL AUTO_INCREMENT," + . " `val` int(11) NOT NULL," + . " PRIMARY KEY (`id`)" + . ")" + ); + $this->_helper->dbQuery( + "INSERT INTO `test_table` (val) VALUES (2);" + ); + + } + + /** + * setUp function that can use the selenium session (called before each test) + * + * @return void + */ + public function setUpPage() + { + $this->_helper->login(TESTSUITE_USER, TESTSUITE_PASSWORD); + $this->byLinkText($this->_dbname)->click(); + } + + /** + * Creates procedure for tests + * + * @return void + */ + private function _eventSQL() + { + $start = date('Y-m-d H:i:s', strtotime('-1 day')); + $end = date('Y-m-d H:i:s', strtotime('+1 day')); + + $this->_helper->dbQuery( + "CREATE EVENT `test_event` ON SCHEDULE EVERY 2 MINUTE_SECOND STARTS " + . "'$start' ENDS '$end' ON COMPLETION NOT PRESERVE ENABLE " + . "DO UPDATE `". $this->_dbname. "`.`test_table` SET val = val + 1" + ); + } + + /** + * Create an event + * + * @return void + */ + public function testAddEvent() + { + $more = $this->_helper->waitForElement("byLinkText", "More"); + $this->moveto($more); + $ele = $this->_helper->waitForElement("byPartialLinkText", "Events"); + $ele->click(); + + $ele = $this->_helper->waitForElement("byLinkText", "Add event"); + $ele->click(); + + $this->_helper->waitForElement("byClassName", "rte_form"); + + $this->byName("item_name")->value("test_event"); + + $this->select($this->byName("item_type")) + ->selectOptionByLabel("RECURRING"); + + $this->byName("item_interval_value")->value("1"); + + $this->select($this->byName("item_interval_field")) + ->selectOptionByLabel("MINUTE_SECOND"); + + $this->byName("item_starts") + ->value(date('Y-m-d H:i:s', strtotime('-1 day'))); + + $this->byName("item_ends") + ->value(date('Y-m-d H:i:s', strtotime('+1 day'))); + + $proc = "UPDATE " . $this->_dbname . ".`test_table` SET val=val+1"; + $this->_helper->typeInTextArea($proc); + + $this->byXPath("//button[contains(., 'Go')]")->click(); + + $ele = $this->_helper->waitForElement( + "byXPath", + "//div[@class='success' and contains(., 'Event `test_event` has been created')]" + ); + + $this->assertTrue( + $this->_helper->isElementPresent( + 'byXPath', + "//td[contains(., 'test_event')]" + ) + ); + + $result = $this->_helper->dbQuery( + "SHOW EVENTS WHERE Db='" . $this->_dbname . "' AND Name='test_event'" + ); + $this->assertEquals(1, $result->num_rows); + + usleep(2000000); + $result = $this->_helper->dbQuery( + "SELECT val FROM `" . $this->_dbname . "`.`test_table`" + ); + $row = $result->fetch_assoc(); + $this->assertGreaterThan(2, $row['val']); + } + + /** + * Test for editing events + * + * @return void + */ + public function testEditEvents() + { + $this->_eventSQL(); + $more = $this->_helper->waitForElement("byLinkText", "More"); + $this->moveto($more); + $ele = $this->_helper->waitForElement("byPartialLinkText", "Events"); + $ele->click(); + + $this->_helper->waitForElement( + "byXPath", + "//legend[contains(., 'Events')]" + ); + + $this->byLinkText("Edit")->click(); + + $this->_helper->waitForElement("byClassName", "rte_form"); + $this->byName("item_interval_value")->clear(); + $this->byName("item_interval_value")->value("1"); + $this->_helper->typeInTextArea("00"); + + $this->byXPath("//button[contains(., 'Go')]")->click(); + + $ele = $this->_helper->waitForElement( + "byXPath", + "//div[@class='success' and contains(., 'Event `test_event` has been modified')]" + ); + + usleep(2000000); + $result = $this->_helper->dbQuery( + "SELECT val FROM `" . $this->_dbname . "`.`test_table`" + ); + $row = $result->fetch_assoc(); + $this->assertGreaterThan(100, $row['val']); + } + + /** + * Test for dropping event + * + * @return void + */ + public function testDropEvent() + { + $this->_eventSQL(); + $more = $this->_helper->waitForElement("byLinkText", "More"); + $this->moveto($more); + $ele = $this->_helper->waitForElement("byPartialLinkText", "Events"); + $ele->click(); + + $this->_helper->waitForElement( + "byXPath", + "//legend[contains(., 'Events')]" + ); + + $this->byLinkText("Drop")->click(); + $this->_helper->waitForElement( + "byXPath", "//button[contains(., 'OK')]" + )->click(); + + $this->_helper->waitForElement("byId", "nothing2display"); + + usleep(1000000); + $result = $this->_helper->dbQuery( + "SHOW EVENTS WHERE Db='" . $this->_dbname . "' AND Name='test_event'" + ); + $this->assertEquals(0, $result->num_rows); + } + + /** + * Tear Down function for test cases + * + * @return void + */ + public function tearDown() + { + $this->_helper->dbQuery('DROP DATABASE ' . $this->_dbname); + } +} + \ No newline at end of file diff --git a/test/selenium/PmaSeleniumDbStoredProceduresTest.php b/test/selenium/PmaSeleniumDbStoredProceduresTest.php index b912059db2..b9716990e4 100644 --- a/test/selenium/PmaSeleniumDbStoredProceduresTest.php +++ b/test/selenium/PmaSeleniumDbStoredProceduresTest.php @@ -120,18 +120,13 @@ class PmaSeleniumDbStoredProceduresTest extends PHPUnit_Extensions_Selenium2Test $this->byName("item_sqldataaccess") )->selectOptionByLabel("READS SQL DATA"); - $this->byCssSelector("div.ui-dialog-buttonset button:nth-child(1)")->click(); + $this->byXPath("//button[contains(., 'Go')]")->click(); $ele = $this->_helper->waitForElement( - "byCssSelector", "div#result_query div.success" + "byXPath", + "//div[@class='success' and contains(., 'Routine `test_procedure` has been created')]" ); - $this->assertContains( - "Routine `test_procedure` has been created", - $ele->text() - ); - - $result = $this->_helper->dbQuery( "SHOW PROCEDURE STATUS WHERE Db='" . $this->_dbname . "'" ); @@ -163,15 +158,11 @@ class PmaSeleniumDbStoredProceduresTest extends PHPUnit_Extensions_Selenium2Test $this->byName("item_param_length[0]")->clear(); $this->byName("item_param_length[0]")->value("12"); - $this->byCssSelector("div.ui-dialog-buttonset button:nth-child(1)")->click(); + $this->byXPath("//button[contains(., 'Go')]")->click(); $ele = $this->_helper->waitForElement( - "byCssSelector", "div#result_query div.success" - ); - - $this->assertContains( - "Routine `test_procedure` has been modified", - $ele->text() + "byXPath", + "//div[@class='success' and contains(., 'Routine `test_procedure` has been modified')]" ); $this->_executeProcedure("abcabcabcabcabcabcabc", 12); @@ -196,9 +187,17 @@ class PmaSeleniumDbStoredProceduresTest extends PHPUnit_Extensions_Selenium2Test ); $this->byLinkText("Drop")->click(); - $this->byCssSelector("div.ui-dialog-buttonset button:nth-child(1)")->click(); + $this->_helper->waitForElement( + "byXPath", "//button[contains(., 'OK')]" + )->click(); $this->_helper->waitForElement("byId", "nothing2display"); + + usleep(1000000); + $result = $this->_helper->dbQuery( + "SHOW PROCEDURE STATUS WHERE Db='" . $this->_dbname . "'" + ); + $this->assertEquals(0, $result->num_rows); } /** diff --git a/test/selenium/PmaSeleniumDbTriggersTest.php b/test/selenium/PmaSeleniumDbTriggersTest.php new file mode 100644 index 0000000000..4e9e532e2f --- /dev/null +++ b/test/selenium/PmaSeleniumDbTriggersTest.php @@ -0,0 +1,229 @@ +_helper = new Helper($this); + $this->setBrowser($this->_helper->getBrowserString()); + $this->setBrowserUrl(TESTSUITE_PHPMYADMIN_HOST . TESTSUITE_PHPMYADMIN_URL); + $this->_helper->dbConnect(); + $this->_dbname = 'pma_db_test'; + $this->_helper->dbQuery('CREATE DATABASE ' . $this->_dbname); + $this->_helper->dbQuery('USE ' . $this->_dbname); + $this->_helper->dbQuery( + "CREATE TABLE `test_table` (" + . " `id` int(11) NOT NULL AUTO_INCREMENT," + . " `val` int(11) NOT NULL," + . " PRIMARY KEY (`id`)" + . ")" + ); + $this->_helper->dbQuery( + "CREATE TABLE `test_table2` (" + . " `id` int(11) NOT NULL AUTO_INCREMENT," + . " `val` int(11) NOT NULL," + . " PRIMARY KEY (`id`)" + . ")" + ); + $this->_helper->dbQuery( + "INSERT INTO `test_table2` (val) VALUES (2);" + ); + + } + + /** + * setUp function that can use the selenium session (called before each test) + * + * @return void + */ + public function setUpPage() + { + $this->_helper->login(TESTSUITE_USER, TESTSUITE_PASSWORD); + $this->byLinkText($this->_dbname)->click(); + } + + /** + * Creates procedure for tests + * + * @return void + */ + private function _triggerSQL() + { + $start = date('Y-m-d H:i:s', strtotime('-1 day')); + $end = date('Y-m-d H:i:s', strtotime('+1 day')); + + $this->_helper->dbQuery( + "CREATE TRIGGER `test_trigger` AFTER INSERT ON `test_table` FOR EACH ROW" + . " UPDATE `" . $this->_dbname . "`.`test_table2` SET val = val + 1" + ); + } + + /** + * Create a Trigger + * + * @return void + */ + public function testAddTrigger() + { + $more = $this->_helper->waitForElement("byLinkText", "More"); + $this->moveto($more); + $ele = $this->_helper->waitForElement("byPartialLinkText", "Triggers"); + $ele->click(); + + $ele = $this->_helper->waitForElement("byLinkText", "Add trigger"); + $ele->click(); + + $this->_helper->waitForElement("byClassName", "rte_form"); + + $this->byName("item_name")->value("test_trigger"); + + $this->select($this->byName("item_table")) + ->selectOptionByLabel("test_table"); + + $this->select($this->byName("item_timing")) + ->selectOptionByLabel("AFTER"); + + $this->select($this->byName("item_event")) + ->selectOptionByLabel("INSERT"); + + $proc = "UPDATE " . $this->_dbname . ".`test_table2` SET val=val+1"; + $this->_helper->typeInTextArea($proc); + + $this->byXPath("//button[contains(., 'Go')]")->click(); + + $ele = $this->_helper->waitForElement( + "byXPath", + "//div[@class='success' and contains(., 'Trigger `test_trigger` has been created')]" + ); + + $this->assertTrue( + $this->_helper->isElementPresent( + 'byXPath', + "//td[contains(., 'test_trigger')]" + ) + ); + + $result = $this->_helper->dbQuery( + "SHOW TRIGGERS FROM `" . $this->_dbname . "`;" + ); + $this->assertEquals(1, $result->num_rows); + + // test trigger + $this->_helper->dbQuery("INSERT INTO `test_table` (val) VALUES (1);"); + $result = $this->_helper->dbQuery("SELECT val FROM `test_table2`;"); + $row = $result->fetch_assoc(); + $this->assertEquals(3, $row['val']); + } + + /** + * Test for editing Triggers + * + * @return void + */ + public function testEditTriggers() + { + $this->_triggerSQL(); + $more = $this->_helper->waitForElement("byLinkText", "More"); + $this->moveto($more); + $ele = $this->_helper->waitForElement("byPartialLinkText", "Triggers"); + $ele->click(); + + $this->_helper->waitForElement( + "byXPath", + "//legend[contains(., 'Triggers')]" + ); + + $this->byLinkText("Edit")->click(); + + $this->_helper->waitForElement("byClassName", "rte_form"); + $this->_helper->typeInTextArea("0"); + + $this->byXPath("//button[contains(., 'Go')]")->click(); + + $ele = $this->_helper->waitForElement( + "byXPath", + "//div[@class='success' and contains(., 'Trigger `test_trigger` has been modified')]" + ); + + // test trigger + $this->_helper->dbQuery("INSERT INTO `test_table` (val) VALUES (1);"); + $result = $this->_helper->dbQuery("SELECT val FROM `test_table2`;"); + $row = $result->fetch_assoc(); + $this->assertEquals(12, $row['val']); + } + + /** + * Test for dropping Trigger + * + * @return void + */ + public function testDropTrigger() + { + $this->_triggerSQL(); + $more = $this->_helper->waitForElement("byLinkText", "More"); + $this->moveto($more); + $ele = $this->_helper->waitForElement("byPartialLinkText", "Triggers"); + $ele->click(); + + $this->_helper->waitForElement( + "byXPath", + "//legend[contains(., 'Triggers')]" + ); + + $this->byLinkText("Drop")->click(); + $this->_helper->waitForElement( + "byXPath", "//button[contains(., 'OK')]" + )->click(); + + $this->_helper->waitForElement("byId", "nothing2display"); + + $result = $this->_helper->dbQuery( + "SHOW TRIGGERS FROM `" . $this->_dbname . "`;" + ); + $this->assertEquals(0, $result->num_rows); + } + + /** + * Tear Down function for test cases + * + * @return void + */ + public function tearDown() + { + $this->_helper->dbQuery('DROP DATABASE ' . $this->_dbname); + } +} + \ No newline at end of file