update unit test doc & PHP 8 fixes

having had to re-do all of these steps on a new environment, I noticed
some inconsistencies and updated the doc:
- moved unit testing doc into common doc folder, so it is easier to find
- removed no longer supported Janitor reference
- removed note regarding generated test duration, current version takes
  less than a minute
- addressed each function removal & phpunit deprecations
This commit is contained in:
El RIDO 2023-12-03 13:40:04 +01:00
parent c895c511c1
commit 8c1310c334
No known key found for this signature in database
GPG key ID: 0F5C940A6BD81F92
3 changed files with 20 additions and 27 deletions

View file

@ -18,7 +18,7 @@ coverage-js: ## Run JS unit tests and generate code coverage reports.
coverage-php: ## Run PHP unit tests and generate code coverage reports. coverage-php: ## Run PHP unit tests and generate code coverage reports.
cd tst && phpunit 2> /dev/null cd tst && phpunit 2> /dev/null
cd tst/log/php-coverage-report && sed -i "s#$(CURDIR)##g" *.html */*.html cd tst/log/php-coverage-report && sed -i "s#$(CURDIR)/##g" *.html */*.html
doc: doc-js doc-php ## Generate all code documentation. doc: doc-js doc-php ## Generate all code documentation.

View file

@ -23,7 +23,7 @@ new ConfigurationTestGenerator(array(
'tests' => array( 'tests' => array(
array( array(
'conditions' => array('steps' => $vd), 'conditions' => array('steps' => $vd),
'type' => 'RegExp', 'type' => 'MatchesRegularExpression',
'args' => array( 'args' => array(
'#<div[^>]*id="opendiscussionoption"[^>]*>#', '#<div[^>]*id="opendiscussionoption"[^>]*>#',
'$content', '$content',
@ -53,7 +53,7 @@ new ConfigurationTestGenerator(array(
'setting' => false, 'setting' => false,
'tests' => array( 'tests' => array(
array( array(
'type' => 'NotRegExp', 'type' => 'DoesNotMatchRegularExpression',
'args' => array( 'args' => array(
'#<div[^>]*id="opendiscussionoption"[^>]*>#', '#<div[^>]*id="opendiscussionoption"[^>]*>#',
'$content', '$content',
@ -70,7 +70,7 @@ new ConfigurationTestGenerator(array(
'tests' => array( 'tests' => array(
array( array(
'conditions' => array('main/discussion' => true), 'conditions' => array('main/discussion' => true),
'type' => 'RegExp', 'type' => 'MatchesRegularExpression',
'args' => array( 'args' => array(
'#<input[^>]+id="opendiscussion"[^>]*checked="checked"[^>]*>#', '#<input[^>]+id="opendiscussion"[^>]*checked="checked"[^>]*>#',
'$content', '$content',
@ -84,7 +84,7 @@ new ConfigurationTestGenerator(array(
'tests' => array( 'tests' => array(
array( array(
'conditions' => array('main/discussion' => true), 'conditions' => array('main/discussion' => true),
'type' => 'NotRegExp', 'type' => 'DoesNotMatchRegularExpression',
'args' => array( 'args' => array(
'#<input[^>]+id="opendiscussion"[^>]*checked="checked"[^>]*>#', '#<input[^>]+id="opendiscussion"[^>]*checked="checked"[^>]*>#',
'$content', '$content',
@ -100,7 +100,7 @@ new ConfigurationTestGenerator(array(
'setting' => true, 'setting' => true,
'tests' => array( 'tests' => array(
array( array(
'type' => 'RegExp', 'type' => 'MatchesRegularExpression',
'args' => array( 'args' => array(
'#<input[^>]+id="burnafterreading"[^>]*checked="checked"[^>]*>#', '#<input[^>]+id="burnafterreading"[^>]*checked="checked"[^>]*>#',
'$content', '$content',
@ -113,7 +113,7 @@ new ConfigurationTestGenerator(array(
'setting' => false, 'setting' => false,
'tests' => array( 'tests' => array(
array( array(
'type' => 'NotRegExp', 'type' => 'DoesNotMatchRegularExpression',
'args' => array( 'args' => array(
'#<input[^>]+id="burnafterreading"[^>]*checked="checked"[^>]*>#', '#<input[^>]+id="burnafterreading"[^>]*checked="checked"[^>]*>#',
'$content', '$content',
@ -129,7 +129,7 @@ new ConfigurationTestGenerator(array(
'setting' => true, 'setting' => true,
'tests' => array( 'tests' => array(
array( array(
'type' => 'RegExp', 'type' => 'MatchesRegularExpression',
'args' => array( 'args' => array(
'#<div[^>]*id="password"[^>]*>#', '#<div[^>]*id="password"[^>]*>#',
'$content', '$content',
@ -143,7 +143,7 @@ new ConfigurationTestGenerator(array(
'tests' => array( 'tests' => array(
array( array(
'conditions' => array('main/discussion' => true), 'conditions' => array('main/discussion' => true),
'type' => 'NotRegExp', 'type' => 'DoesNotMatchRegularExpression',
'args' => array( 'args' => array(
'#<div[^>]*id="password"[^>]*>#', '#<div[^>]*id="password"[^>]*>#',
'$content', '$content',
@ -159,14 +159,14 @@ new ConfigurationTestGenerator(array(
'setting' => 'page', 'setting' => 'page',
'tests' => array( 'tests' => array(
array( array(
'type' => 'RegExp', 'type' => 'MatchesRegularExpression',
'args' => array( 'args' => array(
'#<link[^>]+type="text/css"[^>]+rel="stylesheet"[^>]+href="css/privatebin\.css\\?\d[\d\.]+\d+"[^>]*/>#', '#<link[^>]+type="text/css"[^>]+rel="stylesheet"[^>]+href="css/privatebin\.css\\?\d[\d\.]+\d+"[^>]*/>#',
'$content', '$content',
'outputs "page" stylesheet correctly', 'outputs "page" stylesheet correctly',
), ),
), array( ), array(
'type' => 'NotRegExp', 'type' => 'DoesNotMatchRegularExpression',
'args' => array( 'args' => array(
'#<link[^>]+type="text/css"[^>]+rel="stylesheet"[^>]+href="css/bootstrap/bootstrap-\d[\d\.]+\d\.css"[^>]*/>#', '#<link[^>]+type="text/css"[^>]+rel="stylesheet"[^>]+href="css/bootstrap/bootstrap-\d[\d\.]+\d\.css"[^>]*/>#',
'$content', '$content',
@ -179,14 +179,14 @@ new ConfigurationTestGenerator(array(
'setting' => 'bootstrap', 'setting' => 'bootstrap',
'tests' => array( 'tests' => array(
array( array(
'type' => 'NotRegExp', 'type' => 'DoesNotMatchRegularExpression',
'args' => array( 'args' => array(
'#<link[^>]+type="text/css"[^>]+rel="stylesheet"[^>]+href="css/privatebin\.css\\?\d[\d\.]+\d+"[^>]*/>#', '#<link[^>]+type="text/css"[^>]+rel="stylesheet"[^>]+href="css/privatebin\.css\\?\d[\d\.]+\d+"[^>]*/>#',
'$content', '$content',
'removes "page" stylesheet correctly', 'removes "page" stylesheet correctly',
), ),
), array( ), array(
'type' => 'RegExp', 'type' => 'MatchesRegularExpression',
'args' => array( 'args' => array(
'#<link[^>]+type="text/css"[^>]+rel="stylesheet"[^>]+href="css/bootstrap/bootstrap-\d[\d\.]+\d\.css"[^>]*/>#', '#<link[^>]+type="text/css"[^>]+rel="stylesheet"[^>]+href="css/bootstrap/bootstrap-\d[\d\.]+\d\.css"[^>]*/>#',
'$content', '$content',
@ -361,7 +361,7 @@ class ConfigurationTestGenerator
} }
// skip if not all test conditions are met // skip if not all test conditions are met
if (array_key_exists('conditions', $test)) { if (array_key_exists('conditions', $test)) {
while (list($path, $setting) = each($test['conditions'])) { foreach ($test['conditions'] as $path => $setting) {
if ($path == 'steps' && !in_array($step, $setting)) { if ($path == 'steps' && !in_array($step, $setting)) {
continue 2; continue 2;
} elseif ($path != 'steps') { } elseif ($path != 'steps') {
@ -591,8 +591,9 @@ EOT;
return $this->_configurations; return $this->_configurations;
} }
echo "generateConfigurations: iteration $this->_iterationCount", PHP_EOL; echo "generateConfigurations: iteration $this->_iterationCount", PHP_EOL;
$continue = list($path, $settings) = each($this->_options); $path = key($this->_options);
if ($continue === false) { $settings = current($this->_options);
if (next($this->_options) === false) {
return $this->_configurations; return $this->_configurations;
} }
list($section, $option) = explode('/', $path); list($section, $option) = explode('/', $path);

View file

@ -28,11 +28,6 @@ docker run --rm --read-only -v ~/PrivateBin:/srv:ro privatebin/unit-testing phpu
docker run --rm --read-only -v ~/PrivateBin:/srv:ro privatebin/unit-testing mocha docker run --rm --read-only -v ~/PrivateBin:/srv:ro privatebin/unit-testing mocha
``` ```
We also provide a Janitor image that includes the Cloud9 and Theia WebIDEs as
well as the integrated unit testing utilities. See our [docker wiki
page](https://github.com/PrivateBin/PrivateBin/wiki/Docker#janitor-image-with-cloud9-and-theia-webide-janitortechnologyprivatebin)
for further details on this.
## Running PHP Unit Tests ## Running PHP Unit Tests
In order to run these tests, you will need to install the following packages In order to run these tests, you will need to install the following packages
@ -61,18 +56,15 @@ configurations defined in its constructor, it generates the unit test file
of these configurations and tests for (most of the) valid combinations. Some of of these configurations and tests for (most of the) valid combinations. Some of
combinations can't be tested with this method, i.e. a valid option combined with combinations can't be tested with this method, i.e. a valid option combined with
an invalid one. Other very specific test cases (i.e. to trigger multiple errors) an invalid one. Other very specific test cases (i.e. to trigger multiple errors)
are covered in `tst/PrivateBinTest.php`. Here is how to generate the are covered in `tst/ControllerTest.php`. Here is how to generate the
configuration test and run it: configuration test and run it:
```console ```console
$ cd PrivateBin/tst $ cd PrivateBin/tst
$ php ConfigurationTestGenerator.php $ ../bin/configuration-test-generator
$ phpunit ConfigurationCombinationsTest.php $ phpunit ConfigurationCombinationsTest.php
``` ```
Note that it can take an hour or longer to run the several thousand tests.
## Running JavaScript Unit Tests ## Running JavaScript Unit Tests
In order to run these tests, you will need to install the following packages In order to run these tests, you will need to install the following packages
@ -134,7 +126,7 @@ associated random number generator (RNG) state, so you can reproduce it easily:
1 failing 1 failing
1) Helper getCookie returns the requested cookie: 1) Helper getCookie returns the requested cookie:
Error: Failed after 30 tests and 11 shrinks. rngState: 88caf85079d32e416b; Counterexample: ["{", "9", "9", "YD8%fT"]; [" ", "_|K:"]; Error: Failed after 30 tests and 11 shrinks. rngState: 88caf85079d32e416b; Counterexample: ["{", "9", "9", "YD8%fT"]; [" ", "_|K:"];
[...] [...]
``` ```