2 /* vim: set expandtab sw=4 ts=4 sts=4: */
4 * Selenium TestCase for table related tests
6 * @package PhpMyAdmin-test
10 require_once 'TestBase.php';
13 * PmaSeleniumDbProceduresTest class
15 * @package PhpMyAdmin-test
16 * @subpackage Selenium
19 class PMA_SeleniumDbProceduresTest
extends PMA_SeleniumBase
22 * Setup the browser environment to run the selenium test case
26 public function setUp()
30 "CREATE TABLE `test_table` ("
31 . " `id` int(11) NOT NULL AUTO_INCREMENT,"
32 . " `name` varchar(20) NOT NULL,"
33 . " `datetimefield` datetime NOT NULL,"
34 . " PRIMARY KEY (`id`)"
41 * setUp function that can use the selenium session (called before each test)
45 public function setUpPage()
48 $this->waitForElement('byLinkText', $this->database_name
)->click();
49 $this->waitForElement(
50 "byXPath", "//a[contains(., 'test_table')]"
56 * Creates procedure for tests
60 private function _procedureSQL()
63 "CREATE PROCEDURE `test_procedure`(IN `inp` VARCHAR(10), OUT `outp` INT)"
64 . " NOT DETERMINISTIC READS SQL DATA SQL SECURITY DEFINER SELECT char_"
65 . "length(inp) + count(*) FROM test_table INTO outp"
76 public function testAddProcedure()
78 $ele = $this->waitForElement("byPartialLinkText", "Routines");
81 $ele = $this->waitForElement("byLinkText", "Add routine");
84 $this->waitForElement("byClassName", "rte_form");
86 $this->byName("item_name")->value("test_procedure");
88 $this->byName("item_param_name[0]")->value("inp");
90 $this->byName("item_param_type[0]")
91 )->selectOptionByLabel("VARCHAR");
92 $this->byName("item_param_length[0]")->value("10");
94 $this->byCssSelector("input[value='Add parameter']")->click();
97 $this->byName("item_param_dir[1]")
98 )->selectOptionByLabel("OUT");
99 $ele = $this->waitForElement("byName", "item_param_name[1]");
102 $proc = "SELECT char_length(inp) + count(*) FROM test_table INTO outp";
103 $this->typeInTextArea($proc);
106 $this->byName("item_sqldataaccess")
107 )->selectOptionByLabel("READS SQL DATA");
109 $this->byXPath("//button[contains(., 'Go')]")->click();
111 $ele = $this->waitForElement(
113 "//div[@class='success' and contains(., "
114 . "'Routine `test_procedure` has been created')]"
117 $result = $this->dbQuery(
118 "SHOW PROCEDURE STATUS WHERE Db='" . $this->database_name
. "'"
121 $this->assertEquals(1, $result->num_rows
);
122 $this->_executeProcedure("abcabcabcabcabcabcabc", 10);
126 * Test for editing procedure
132 public function testEditProcedure()
134 $this->_procedureSQL();
135 $ele = $this->waitForElement("byPartialLinkText", "Routines");
138 $this->waitForElement(
140 "//legend[contains(., 'Routines')]"
143 $this->byLinkText("Edit")->click();
144 $this->waitForElement("byClassName", "rte_form");
145 $this->byName("item_param_length[0]")->clear();
146 $this->byName("item_param_length[0]")->value("12");
148 $this->byXPath("//button[contains(., 'Go')]")->click();
150 $ele = $this->waitForElement(
152 "//div[@class='success' and contains(., "
153 . "'Routine `test_procedure` has been modified')]"
156 $this->_executeProcedure("abcabcabcabcabcabcabc", 12);
160 * Test for dropping procedure
166 public function testDropProcedure()
168 $this->_procedureSQL();
169 $ele = $this->waitForElement("byPartialLinkText", "Routines");
172 $this->waitForElement(
174 "//legend[contains(., 'Routines')]"
177 $this->byLinkText("Drop")->click();
178 $this->waitForElement(
179 "byXPath", "//button[contains(., 'OK')]"
182 $this->waitForElement("byId", "nothing2display");
185 $result = $this->dbQuery(
186 "SHOW PROCEDURE STATUS WHERE Db='" . $this->database_name
. "'"
188 $this->assertEquals(0, $result->num_rows
);
194 * @param string $text String to pass as inp param
195 * @param int $length Expected output length
199 private function _executeProcedure($text, $length)
201 $this->waitForElement("byLinkText", "Execute")->click();
202 $this->waitForElement("byName", "params[inp]")->value($text);
203 $this->byCssSelector("div.ui-dialog-buttonset button:nth-child(1)")->click();
204 $this->waitForElement(
206 "span#PMA_slidingMessage table tbody"
208 $head = $this->byCssSelector("span#PMA_slidingMessage table tbody")->text();
209 $this->assertEquals("outp\n$length", $head);