Replace text_dir global var with LanguageManager::$textDir static
[phpmyadmin.git] / tests / selenium / NormalizationTest.php
blob9fc4dd7724ae35cd4be01c691dbeaa80267debd6
1 <?php
3 declare(strict_types=1);
5 namespace PhpMyAdmin\Tests\Selenium;
7 use PHPUnit\Framework\Attributes\CoversNothing;
8 use PHPUnit\Framework\Attributes\Group;
10 #[CoversNothing]
11 class NormalizationTest extends TestBase
13 /**
14 * Setup the browser environment to run the selenium test case
16 protected function setUp(): void
18 parent::setUp();
20 $this->dbQuery(
21 'USE `' . $this->databaseName . '`;'
22 . 'CREATE TABLE `test_table` ('
23 . ' `id` int(11) NOT NULL AUTO_INCREMENT,'
24 . ' `val` int(11) NOT NULL,'
25 . ' `val2` varchar(64) NOT NULL,'
26 . 'PRIMARY KEY(id)'
27 . ');',
30 $this->login();
31 $this->navigateTable('test_table');
32 $this->waitForElement('xpath', "(//a[contains(., 'Structure')])")->click();
34 $this->waitAjax();
36 $this->waitForElement('id', 'tablestructure');
37 $this->byPartialLinkText('Normalize')->click();
38 $this->waitForElement('id', 'normalizeTable');
41 /**
42 * Test for normalization to 1NF
44 #[Group('large')]
45 public function testNormalizationTo1NF(): void
47 $this->assertEquals(
48 'First step of normalization (1NF)',
49 $this->byCssSelector('label[for=normalizeToRadio1]')->getText(),
51 $this->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 $this->assertEquals(
68 'First step of normalization (1NF)',
69 $this->byCssSelector('#page_content h3')->getText(),
71 $this->assertTrue(
72 $this->isElementPresent(
73 'cssSelector',
74 '#mainContent h4',
77 $this->assertTrue(
78 $this->isElementPresent(
79 'cssSelector',
80 '#mainContent #newCols',
83 $this->assertTrue(
84 $this->isElementPresent(
85 'cssSelector',
86 '#selectNonAtomicCol option[value=val2]',
89 $this->assertFalse(
90 $this->isElementPresent(
91 'cssSelector',
92 '#selectNonAtomicCol option[value=val]',
95 $this->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 $this->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 $this->assertTrue(
114 $this->isElementPresent(
115 'cssSelector',
116 '#mainContent #extra',
119 $this->assertTrue(
120 $this->isElementPresent(
121 'cssSelector',
122 '#extra input[value=val2][type=checkbox]',
125 $this->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 $this->assertStringContainsString(
135 "The first step of normalization is complete for table 'test_table'.",
136 $this->byCssSelector('#mainContent h4')->getText(),