2 /* vim: set expandtab sw=4 ts=4 sts=4: */
4 * Selenium TestCase for tracking related tests
6 * @package PhpMyAdmin-test
9 require_once 'Helper.php';
12 * PmaSeleniumTrackingTest class
14 * @package PhpMyAdmin-test
15 * @subpackage Selenium
17 class PmaSeleniumTrackingTest
extends PHPUnit_Extensions_Selenium2TestCase
20 * Name of database for the test
34 * Setup the browser environment to run the selenium test case
38 public function setUp()
40 $this->_helper
= new Helper($this);
41 $this->setBrowser($this->_helper
->getBrowserString());
42 $this->setBrowserUrl(TESTSUITE_PHPMYADMIN_HOST
. TESTSUITE_PHPMYADMIN_URL
);
43 $this->_helper
->dbConnect();
44 $this->_dbname
= 'pma_db_' . time();
45 $this->_helper
->dbQuery('CREATE DATABASE ' . $this->_dbname
);
46 $this->_helper
->dbQuery('USE ' . $this->_dbname
);
47 $this->_helper
->dbQuery(
48 "CREATE TABLE `test_table` ("
49 . " `id` int(11) NOT NULL AUTO_INCREMENT,"
50 . " `val` int(11) NOT NULL,"
51 . " PRIMARY KEY (`id`)"
54 $this->_helper
->dbQuery(
55 "CREATE TABLE `test_table_2` ("
56 . " `id` int(11) NOT NULL AUTO_INCREMENT,"
57 . " `val` int(11) NOT NULL,"
58 . " PRIMARY KEY (`id`)"
61 $this->_helper
->dbQuery(
62 "INSERT INTO `test_table` (val) VALUES (2), (3);"
67 * setUp function that can use the selenium session (called before each test)
71 public function setUpPage()
73 $this->_helper
->login(TESTSUITE_USER
, TESTSUITE_PASSWORD
);
74 $this->byLinkText($this->_dbname
)->click();
75 $this->_helper
->waitForElement(
77 "//a[@class='item' and contains(., 'Database: ". $this->_dbname
."')]"
79 $ele = $this->byLinkText("More");
81 $this->byLinkText("Tracking")->click();
82 $this->_helper
->waitForElement("byLinkText", "Track table");
83 $this->byXPath("(//a[contains(., 'Track table')])[1]")->click();
85 $this->_helper
->waitForElement("byName", "delete")->click();
86 $this->byCssSelector("input[value='Create version']")->click();
87 $this->_helper
->waitForElement("byId", "versions");
91 * Tests basic tracking functionality
95 public function testTrackingData()
97 $this->_executeSqlAndReturnToTableTracking();
99 $this->byLinkText("Tracking report")->click();
100 $this->_helper
->waitForElement(
102 "//h3[contains(., 'Tracking report')]"
105 $this->assertContains(
106 "DROP TABLE IF EXISTS `test_table`",
107 $this->_helper
->getTable("ddl_versions.1.4")
110 $this->assertContains(
111 "CREATE TABLE `test_table` (",
112 $this->_helper
->getTable("ddl_versions.2.4")
115 $this->assertContains(
116 "UPDATE test_table SET val = val + 1",
117 $this->_helper
->getTable("dml_versions.1.4")
120 $this->assertNotContains(
121 "DELETE FROM test_table WHERE val = 3",
122 $this->byId("dml_versions")->text()
126 $this->select($this->byName("logtype"))
127 ->selectOptionByLabel("Structure only");
128 $this->byCssSelector("input[value='Go']")->click();
130 $this->_helper
->waitForElementNotPresent("byId", "loading_parent");
133 $this->_helper
->isElementPresent("byId", "dml_versions")
136 $this->assertContains(
137 "DROP TABLE IF EXISTS `test_table`",
138 $this->_helper
->getTable("ddl_versions.1.4")
141 $this->assertContains(
142 "CREATE TABLE `test_table` (",
143 $this->_helper
->getTable("ddl_versions.2.4")
147 $this->select($this->byName("logtype"))
148 ->selectOptionByLabel("Data only");
149 $this->byCssSelector("input[value='Go']")->click();
151 $this->_helper
->waitForElementNotPresent("byId", "loading_parent");
154 $this->_helper
->isElementPresent("byId", "ddl_versions")
157 $this->assertContains(
158 "UPDATE test_table SET val = val + 1",
159 $this->_helper
->getTable("dml_versions.1.4")
162 $this->assertNotContains(
163 "DELETE FROM test_table WHERE val = 3",
164 $this->byId("dml_versions")->text()
169 * Tests deactivation of tracking
173 public function testDeactivateTracking()
175 $this->byCssSelector("input[value='Deactivate now']")->click();
176 $this->_helper
->waitForElement(
177 "byCssSelector", "input[value='Activate now']"
179 $this->_executeSqlAndReturnToTableTracking();
181 $this->_helper
->isElementPresent("byId", "dml_versions")
186 * Tests dropping a tracking
190 public function testDropTracking()
192 $this->byLinkText("Database: " . $this->_dbname
)->click();
193 $this->_helper
->waitForElement("byCssSelector", "table.data");
195 $ele = $this->byLinkText("More");
197 $this->byLinkText("Tracking")->click();
198 $this->_helper
->waitForElement("byId", "versions");
199 $this->byLinkText("Drop")->click();
201 $this->_helper
->waitForElement(
203 "//button[contains(., 'OK')]"
206 $this->_helper
->waitForElement(
208 "//div[@class='success' and contains(., "
209 . "'Your SQL query has been executed')]"
212 $this->assertContains(
214 $this->_helper
->getTable("noversions.1.1")
217 $this->assertContains(
219 $this->_helper
->getTable("noversions.2.1")
224 * Tests structure snapshot of a tracking
228 public function testStructureSnapshot()
230 $this->byLinkText("Structure snapshot")->click();
231 $this->_helper
->waitForElement("byId", "tablestructure");
233 $this->assertContains(
235 $this->_helper
->getTable("tablestructure.1.1")
238 $this->assertContains(
240 $this->_helper
->getTable("tablestructure.2.1")
243 $this->assertContains(
245 $this->_helper
->getTable("tablestructure_indexes.1.1")
248 $this->assertContains(
250 $this->_helper
->getTable("tablestructure_indexes.1.5")
255 * Goes to SQL tab, executes queries, returns to tracking page
259 private function _executeSqlAndReturnToTableTracking()
261 $this->byLinkText("SQL")->click();
262 $this->_helper
->waitForElement("byId", "queryfieldscontainer");
263 $this->_helper
->typeInTextArea(
264 ";UPDATE test_table SET val = val + 1; "
265 . "DELETE FROM test_table WHERE val = 3"
267 $this->byCssSelector("input[value='Go']")->click();
268 $this->_helper
->waitForElement("byClassName", "success");
270 $ele = $this->byLinkText("More");
272 $this->byLinkText("Tracking")->click();
273 $this->_helper
->waitForElement("byId", "versions");
277 * Tear Down function for test cases
281 public function tearDown()
283 $this->_helper
->dbQuery('DROP DATABASE IF EXISTS ' . $this->_dbname
);