Merge pull request #19552 from kamil-tekiela/Fix-default-values
[phpmyadmin.git] / tests / end-to-end / NormalizationTest.php
blob9234b0855a568a17b7b0bc08d0afb5438d3757be
1 <?php
3 declare(strict_types=1);
5 namespace PhpMyAdmin\Tests\Selenium;
7 use PHPUnit\Framework\Attributes\CoversNothing;
8 use PHPUnit\Framework\Attributes\Large;
10 #[CoversNothing]
11 #[Large]
12 class NormalizationTest extends TestBase
14 /**
15 * Setup the browser environment to run the selenium test case
17 protected function setUp(): void
19 parent::setUp();
21 $this->dbQuery(
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,'
27 . 'PRIMARY KEY(id)'
28 . ');',
31 $this->login();
32 $this->navigateTable('test_table');
33 $this->waitForElement('xpath', "(//a[contains(., 'Structure')])")->click();
35 $this->waitAjax();
37 $this->waitForElement('id', 'tablestructure');
38 $this->byPartialLinkText('Normalize')->click();
39 $this->waitForElement('id', 'normalizeTable');
42 /**
43 * Test for normalization to 1NF
45 public function testNormalizationTo1NF(): void
47 self::assertSame(
48 'First step of normalization (1NF)',
49 $this->byCssSelector('label[for=normalizeToRadio1]')->getText(),
51 self::assertTrue(
52 $this->isElementPresent(
53 'cssSelector',
54 'input[id=normalizeToRadio1][type=radio]:checked',
57 $this->byCssSelector('input[name=submit_normalize]')->click();
58 $this->waitForElement('id', 'mainContent');
59 $this->assert1NFSteps();
62 /**
63 * assertions in 1NF steps 1.1, 1.2, 1.3
65 private function assert1NFSteps(): void
67 self::assertSame(
68 'First step of normalization (1NF)',
69 $this->byCssSelector('#page_content h3')->getText(),
71 self::assertTrue(
72 $this->isElementPresent(
73 'cssSelector',
74 '#mainContent h4',
77 self::assertTrue(
78 $this->isElementPresent(
79 'cssSelector',
80 '#mainContent #newCols',
83 self::assertTrue(
84 $this->isElementPresent(
85 'cssSelector',
86 '#selectNonAtomicCol option[value=val2]',
89 self::assertFalse(
90 $this->isElementPresent(
91 'cssSelector',
92 '#selectNonAtomicCol option[value=val]',
95 self::assertTrue(
96 $this->isElementPresent(
97 'cssSelector',
98 '#selectNonAtomicCol option[value=no_such_col]',
102 $this->selectByValue(
103 $this->byId('selectNonAtomicCol'),
104 'no_such_col',
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')]");
113 self::assertTrue(
114 $this->isElementPresent(
115 'cssSelector',
116 '#mainContent #extra',
119 self::assertTrue(
120 $this->isElementPresent(
121 'cssSelector',
122 '#extra input[value=val2][type=checkbox]',
125 self::assertTrue(
126 $this->isElementPresent(
127 'cssSelector',
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(),