* Use str_starts_with() Signed-off-by: Kamil Tekiela <tekiela246@gmail.com> * Remove redundant !empty() !empty() on a declared variable is redundant. Signed-off-by: Kamil Tekiela <tekiela246@gmail.com> * Replace loop with array_column() Signed-off-by: Kamil Tekiela <tekiela246@gmail.com> * Simpify assignment by removing temporary variable Signed-off-by: Kamil Tekiela <tekiela246@gmail.com> * Remove redundant if statements and array_merge Signed-off-by: Kamil Tekiela <tekiela246@gmail.com> * Remove temporary variable Signed-off-by: Kamil Tekiela <tekiela246@gmail.com> * Unindent code Signed-off-by: Kamil Tekiela <tekiela246@gmail.com> * Add helper method fetchByMode() This is done to avoid calling methods through variables. It is the same in terms of performance. Signed-off-by: Kamil Tekiela <tekiela246@gmail.com> * Move if statements to where they are relevant I had a choice to either move the while loop out of the if statements or move the if statements inside. I decided it made more sense to move them inside. Signed-off-by: Kamil Tekiela <tekiela246@gmail.com> * Add NULL to phpdoc for the two parameters that can be null Signed-off-by: Kamil Tekiela <tekiela246@gmail.com> * Simplify return statement Signed-off-by: Kamil Tekiela <tekiela246@gmail.com> * Improve performance and simplify code Since we are always using STORE mode then we can use data_seek() method. This will allow us to get rid of the loop and use fetchByMode() method. Signed-off-by: Kamil Tekiela <tekiela246@gmail.com> * Inline value defaulting Signed-off-by: Kamil Tekiela <tekiela246@gmail.com> * Remove redundant check Signed-off-by: Kamil Tekiela <tekiela246@gmail.com> * [bugfix] getColumnNames() should return an array of strings There were multiple issues here. If we are selecting only a certain column from the SQL then let's use the handy function instead of array_keys. We will never get anything other than an array so checking if it is not an array makes no sense. Returning null only to cast it to an array is pointless. If really necessary, we could still check for an empty array. The ColumnController returned the value without even casting it to an array. I am not sure how jQuery/JavaScript dealt with it. Signed-off-by: Kamil Tekiela <tekiela246@gmail.com> * Refactor getColumnMapFromSql and add type hint Signed-off-by: Kamil Tekiela <tekiela246@gmail.com> * Refactor getVirtualTables Signed-off-by: Kamil Tekiela <tekiela246@gmail.com> * Remove redundant loop Signed-off-by: Kamil Tekiela <tekiela246@gmail.com> * Remove redundant usage of freeResult() If there was no chance for the object to leak the scope and it is the end of the scope then there's no reason to call this method. Signed-off-by: Kamil Tekiela <tekiela246@gmail.com> * Replace dynamic variable with declare one It's always the same name. If we were creating more than one, we could use associative array, but in this case there seems to be absolutely no need for any of this. Dynamic variables make it harder to debug the code. Signed-off-by: Kamil Tekiela <tekiela246@gmail.com> * Update psalm-baseline.xml Signed-off-by: Kamil Tekiela <tekiela246@gmail.com> * Widen the condition per williamdes suggestion This will allow value such as '' and '0' to pass through. Previously `if(! empty($database))` and `if($database)` dissallowed them. Signed-off-by: Kamil Tekiela <tekiela246@gmail.com> * fetchResult() should return only arrays Tests fixed to return arrays. Non-empty in case of true, empty in case of false. Fixed a lot of Psalm issues where the condition was always true. Signed-off-by: Kamil Tekiela <tekiela246@gmail.com> |
||
|---|---|---|
| .. | ||
| classes | ||
| javascript | ||
| jest | ||
| selenium | ||
| test_data | ||
| bootstrap-dist.php | ||
| bootstrap-static.php | ||
| ci-phplint | ||
| config.e2e.inc.php | ||
| doctum-config.php | ||
| nginx.conf | ||
| php-fpm.conf | ||
| php.ini | ||
| phpstan-constants.php | ||
| phpunit-php-nightly.xml | ||
| README.rst | ||
| start-local-server | ||
| stop-local-server | ||
PhpMyAdmin test suite
=====================
This directory is protected from web visitors by a .htaccess file.
For more information on allowing http access to this directory see:
https://httpd.apache.org/docs/current/mod/mod_authz_host.html#allow
Please visit the wiki for more information on unit testing:
https://wiki.phpmyadmin.net/pma/Unit_Testing
Selenium tests
--------------
To be able to run Selenium tests, you need to have webserver, database
and Selenium running. Following environment variables configure where
testsuite connects:
TESTSUITE_USER
Username to connect on the interface located at TESTSUITE_URL
TESTSUITE_PASSWORD
Password to connect on the interface located at TESTSUITE_URL
TESTSUITE_DATABASE_PREFIX
Database prefix to use for testing (Avoid database grouping characters like _).
TESTSUITE_URL
URL where tested phpMyAdmin is available.
Additionally you need to configure link to Selenium and browsers. You
can either setup Selenium locally or use BrowserStack automated testing.
For local setup, define following:
TESTSUITE_SELENIUM_HOST
Host where Selenium is running.
TESTSUITE_SELENIUM_PORT
Port where to connect.
TESTSUITE_SELENIUM_BROWSER
Browser to use for testing inside Selenium.
With BrowserStack, set following:
TESTSUITE_BROWSERSTACK_USER
BrowserStack username.
TESTSUITE_BROWSERSTACK_KEY
BrowserStack access key.
For example you can use following setup in ``phpunit.xml``::
<php>
<env name="TESTSUITE_USER" value="root"/>
<env name="TESTSUITE_PASSWORD" value="root"/>
<env name="TESTSUITE_DATABASE_PREFIX" value="test"/>
<env name="TESTSUITE_URL" value="http://localhost/phpmyadmin/" />
<env name="TESTSUITE_SELENIUM_HOST" value="127.0.0.1" />
<env name="TESTSUITE_SELENIUM_PORT" value="4444" />
</php>
Using BrowserStack
------------------
We're using our selenium tests on the GitHub CI.
To run tests locally, you need to install BrowserStack tool to enable local
testing, see their website for instructions:
https://www.browserstack.com/local-testing#command-line
Following instructions use PHP's built in server for the testing::
# Export BrowserStack credentials in the environment:
export TESTSUITE_BROWSERSTACK_USER=your_username
export TESTSUITE_BROWSERSTACK_KEY=your_key
# Port where tests will be running
export TESTSUITE_PORT=9000
export TESTSUITE_URL=http://127.0.0.1:$TESTSUITE_PORT/
# Start PHP built in server
php --server 127.0.0.1:$TESTSUITE_PORT > php.log &
# Start BrowserStack Local client to forward the traffic
~/browserstack/BrowserStackLocal -localIdentifier Manual "$TESTSUITE_BROWSERSTACK_KEY" 127.0.0.1,$TESTSUITE_PORT,0 &
# Stop BrowserStack Local
~/browserstack/BrowserStackLocal --daemon stop