FreshRSS is tested with PHPUnit, PHPStan, PHP_CodeSniffer, and more.
No code should be merged in edge if the tests don’t pass.
As a developer, you can run the test suite on your PC easily with make commands. You can run the test suite with:
cd ./FreshRSS/
make test-all
Some syntax, formatting, whitespace, and i18n conventions can be fixed automatically with:
make fix-all
Some tests can run inside some Docker images, in particular to test against minimum and maximum versions of PHP:
# Prepare
make composer-test
docker build --pull --tag freshrss/freshrss:oldest -f Docker/Dockerfile-Oldest .
docker build --pull --tag freshrss/freshrss:newest -f Docker/Dockerfile-Newest .
# Run
docker run --rm -e FRESHRSS_ENV=development -e TZ=UTC -v $(pwd):/var/www/FreshRSS freshrss/freshrss:oldest bin/composer test
docker run --rm -e FRESHRSS_ENV=development -e TZ=UTC -v $(pwd):/var/www/FreshRSS freshrss/freshrss:newest bin/composer test
Tests are automatically run when you open a pull request on GitHub. They are performed with GitHub Actions. This ensures your code will not introduce some kind of regression. We will not merge a PR if tests fail so we will ask you to fix any bugs before reviewing your code.
If you are interested, you can take a look at the configuration file.
As feed data is volatile, it’s better to work with snapshots when debugging some issues. Check the description to retrieve a snapshot.
To serve those snapshots, you can use a mock server. Here we will demonstrate how to work with WireMock but other solutions exist. Here are the steps to start using the WireMock mock server:
Create the feed.json file in the mappings folder with the following content:
{
"request": {
"method": "GET",
"urlPathPattern": "/.*"
},
"response": {
"status": 200,
"bodyFileName": "{{request.pathSegments.[0]}}",
"transformers": ["response-template"],
"headers": {
"Content-Type": "application/rss+xml"
}
}
}
Launch the containerized server with the following command:
# <PORT> is the port used on the host to communicate with the server
# <NETWORK> is the name of the docker network used (by default, it’s freshrss-network)
docker run -it --rm -p <PORT>:8080 --name wiremock --network <NETWORK> -v $PWD:/home/wiremock wiremock/wiremock:latest-alpine --local-response-templating
You can access the <RSS> mock file directly:
http://localhost:<PORT>/<RSS>,http://wiremock:8080/<RSS>.