3 declare(strict_types
=1);
5 namespace PhpMyAdmin\Tests\Selenium
;
7 use PHPUnit\Framework\Attributes\CoversNothing
;
8 use PHPUnit\Framework\Attributes\Large
;
12 class NormalizationTest
extends TestBase
15 * Setup the browser environment to run the selenium test case
17 protected function setUp(): void
22 'USE `' . $this->databaseName
. '`;'
23 . 'CREATE TABLE `test_table` ('
24 . ' `id` int(11) NOT NULL AUTO_INCREMENT,'
25 . ' `val` int(11) NOT NULL,'
26 . ' `val2` varchar(64) NOT NULL,'
32 $this->navigateTable('test_table');
33 $this->waitForElement('xpath', "(//a[contains(., 'Structure')])")->click();
37 $this->waitForElement('id', 'tablestructure');
38 $this->byPartialLinkText('Normalize')->click();
39 $this->waitForElement('id', 'normalizeTable');
43 * Test for normalization to 1NF
45 public function testNormalizationTo1NF(): void
48 'First step of normalization (1NF)',
49 $this->byCssSelector('label[for=normalizeToRadio1]')->getText(),
52 $this->isElementPresent(
54 'input[id=normalizeToRadio1][type=radio]:checked',
57 $this->byCssSelector('input[name=submit_normalize]')->click();
58 $this->waitForElement('id', 'mainContent');
59 $this->assert1NFSteps();
63 * assertions in 1NF steps 1.1, 1.2, 1.3
65 private function assert1NFSteps(): void
68 'First step of normalization (1NF)',
69 $this->byCssSelector('#page_content h3')->getText(),
72 $this->isElementPresent(
78 $this->isElementPresent(
80 '#mainContent #newCols',
84 $this->isElementPresent(
86 '#selectNonAtomicCol option[value=val2]',
90 $this->isElementPresent(
92 '#selectNonAtomicCol option[value=val]',
96 $this->isElementPresent(
98 '#selectNonAtomicCol option[value=no_such_col]',
102 $this->selectByValue(
103 $this->byId('selectNonAtomicCol'),
107 $this->waitForElement('xpath', "//div[contains(., 'Step 1.2 Have a primary key')]");
108 $text = $this->byCssSelector('#mainContent h4')->getText();
109 self
::assertStringContainsString('Primary key already exists.', $text);
110 $this->waitForElement('xpath', "//div[contains(., 'Step 1.3 Move repeating groups')]");
111 $this->byCssSelector('input[value="No repeating group"]')->click();
112 $this->waitForElement('xpath', "//div[contains(., 'Step 1.4 Remove redundant columns')]");
114 $this->isElementPresent(
116 '#mainContent #extra',
120 $this->isElementPresent(
122 '#extra input[value=val2][type=checkbox]',
126 $this->isElementPresent(
128 '#extra input[value=id][type=checkbox]',
131 $this->byCssSelector('#extra input[value=val][type=checkbox]')->click();
132 $this->byCssSelector('#removeRedundant')->click();
133 $this->waitForElement('xpath', "//div[contains(., 'End of step')]");
134 self
::assertStringContainsString(
135 "The first step of normalization is complete for table 'test_table'.",
136 $this->byCssSelector('#mainContent h4')->getText(),