Translated using Weblate (Portuguese)
[phpmyadmin.git] / tests / unit / SqlQueryFormTest.php
blob56d38a5305675814d14de675997383a9fdf58779
1 <?php
3 declare(strict_types=1);
5 namespace PhpMyAdmin\Tests;
7 use PhpMyAdmin\Bookmarks\BookmarkRepository;
8 use PhpMyAdmin\Config;
9 use PhpMyAdmin\ConfigStorage\Relation;
10 use PhpMyAdmin\ConfigStorage\RelationParameters;
11 use PhpMyAdmin\Current;
12 use PhpMyAdmin\Dbal\DatabaseInterface;
13 use PhpMyAdmin\Encoding;
14 use PhpMyAdmin\Html\MySQLDocumentation;
15 use PhpMyAdmin\SqlQueryForm;
16 use PhpMyAdmin\Template;
17 use PhpMyAdmin\Tests\Stubs\DbiDummy;
18 use PhpMyAdmin\Url;
19 use PhpMyAdmin\UrlParams;
20 use PHPUnit\Framework\Attributes\CoversClass;
21 use ReflectionProperty;
23 use function __;
24 use function htmlspecialchars;
26 #[CoversClass(SqlQueryForm::class)]
27 class SqlQueryFormTest extends AbstractTestCase
29 protected DatabaseInterface $dbi;
31 protected DbiDummy $dummyDbi;
33 private SqlQueryForm $sqlQueryForm;
35 /**
36 * Test for setUp
38 protected function setUp(): void
40 parent::setUp();
42 $this->setLanguage();
44 $this->dummyDbi = $this->createDbiDummy();
45 $this->dummyDbi->addResult(
46 'SHOW FULL COLUMNS FROM `PMA_db`.`PMA_table`',
47 [['field1', '', null, 'NO', '', null, '', '', 'Comment1']],
48 ['Field', 'Type', 'Collation', 'Null', 'Key', 'Default', 'Extra', 'Privileges', 'Comment'],
51 $this->dummyDbi->addResult(
52 'SHOW INDEXES FROM `PMA_db`.`PMA_table`',
53 [],
55 $this->dbi = $this->createDatabaseInterface($this->dummyDbi);
56 DatabaseInterface::$instance = $this->dbi;
57 $relation = new Relation($this->dbi);
58 $bookmarkRepository = new BookmarkRepository($this->dbi, $relation);
59 $this->sqlQueryForm = new SqlQueryForm(new Template(), $this->dbi, $bookmarkRepository);
61 Current::$database = 'PMA_db';
62 Current::$table = 'PMA_table';
64 $config = Config::getInstance();
65 $config->settings['GZipDump'] = false;
66 $config->settings['BZipDump'] = false;
67 $config->settings['ZipDump'] = false;
68 $config->settings['ServerDefault'] = 'default';
69 $config->settings['TextareaAutoSelect'] = true;
70 $config->settings['TextareaRows'] = 100;
71 $config->settings['TextareaCols'] = 11;
72 $config->settings['DefaultTabDatabase'] = '/database/structure';
73 $config->settings['RetainQueryBox'] = true;
74 $config->settings['ActionLinksMode'] = 'both';
75 $config->settings['DefaultTabTable'] = '/sql';
76 $config->settings['CodemirrorEnable'] = true;
77 $config->settings['DefaultForeignKeyChecks'] = 'default';
79 $relationParameters = RelationParameters::fromArray([
80 'table_coords' => 'table_name',
81 'displaywork' => true,
82 'db' => 'information_schema',
83 'table_info' => 'table_info',
84 'relwork' => true,
85 'relation' => 'relation',
86 ]);
87 (new ReflectionProperty(Relation::class, 'cache'))->setValue(null, $relationParameters);
89 $config->selectedServer['user'] = 'user';
90 $config->selectedServer['pmadb'] = 'pmadb';
91 $config->selectedServer['bookmarktable'] = 'bookmarktable';
94 /**
95 * Test for getHtmlForInsert
97 public function testPMAGetHtmlForSqlQueryFormInsert(): void
99 //Call the test function
100 $query = 'select * from PMA';
101 $html = $this->sqlQueryForm->getHtml('PMA_db', 'PMA_table', $query);
103 //validate 1: query
104 self::assertStringContainsString(
105 htmlspecialchars($query),
106 $html,
109 //validate 2: enable auto select text in textarea
110 $autoSel = ' data-textarea-auto-select="true"';
111 self::assertStringContainsString($autoSel, $html);
113 //validate 3: MySQLDocumentation::show
114 self::assertStringContainsString(
115 MySQLDocumentation::show('SELECT'),
116 $html,
119 //validate 4: $fields_list
120 self::assertStringContainsString('<input type="button" value="DELETE" id="delete"', $html);
121 self::assertStringContainsString('<input type="button" value="UPDATE" id="update"', $html);
122 self::assertStringContainsString('<input type="button" value="INSERT" id="insert"', $html);
123 self::assertStringContainsString('<input type="button" value="SELECT" id="select"', $html);
124 self::assertStringContainsString('<input type="button" value="SELECT *" id="selectall"', $html);
126 //validate 5: Clear button
127 self::assertStringContainsString('<input type="button" value="DELETE" id="delete"', $html);
128 self::assertStringContainsString(
129 __('Clear'),
130 $html,
135 * Test for getHtml
137 public function testPMAGetHtmlForSqlQueryForm(): void
139 //Call the test function
140 Current::$lang = 'ja';
141 $query = 'select * from PMA';
142 $html = $this->sqlQueryForm->getHtml('PMA_db', 'PMA_table', $query);
144 //validate 1: query
145 self::assertStringContainsString(
146 htmlspecialchars($query),
147 $html,
150 //validate 2: $enctype
151 $enctype = ' enctype="multipart/form-data">';
152 self::assertStringContainsString($enctype, $html);
154 //validate 3: sqlqueryform
155 self::assertStringContainsString('id="sqlqueryform" name="sqlform"', $html);
157 //validate 4: $db, $table
158 $table = Current::$table;
159 $db = Current::$database;
160 self::assertStringContainsString(
161 Url::getHiddenInputs($db, $table),
162 $html,
165 //validate 5: $goto
166 $goto = UrlParams::$goto === '' ? Url::getFromRoute('/table/sql') : UrlParams::$goto;
167 self::assertStringContainsString(
168 htmlspecialchars($goto),
169 $html,
172 //validate 6: Kanji encoding form
173 self::assertStringContainsString(
174 Encoding::kanjiEncodingForm(),
175 $html,
177 Current::$lang = 'en';