firefly-iii/test.sh
2018-03-04 09:12:58 +01:00

147 lines
3.2 KiB
Bash
Executable File

#!/bin/bash
DATABASE=./storage/database/database.sqlite
DATABASECOPY=./storage/database/databasecopy.sqlite
ORIGINALENV=./.env
BACKUPENV=./.env.current
TESTINGENV=./.env.testing
# do something with flags:
resetTestFlag=''
testflag=''
coverageflag=''
featureflag=''
featuretestclass=''
unitflag=''
unittestclass=''
apiflag=''
apitestclass=''
verbalflag=''
testsuite=''
configfile='phpunit.xml';
while getopts 'vcratf:u:s:' flag; do
case "${flag}" in
r)
resetTestFlag='true'
;;
t)
testflag='true'
;;
c)
coverageflag='true'
configfile='phpunit.coverage.xml';
;;
v)
verbalflag=' -v --debug'
echo "Will be verbal about it"
;;
f)
featureflag='true'
featuretestclass=./tests/Feature/$OPTARG
echo "Will only run Feature test $OPTARG"
;;
u)
unitflag='true'
unittestclass=./tests/Unit/$OPTARG
echo "Will only run Unit test $OPTARG"
;;
a)
apiflag='true'
apitestclass=./tests/Api/$OPTARG
echo "Will only run Api test $OPTARG"
;;
s)
testsuite="--testsuite $OPTARG"
echo "Will only run test suite '$OPTARG'"
;;
*) error "Unexpected option ${flag}" ;;
esac
done
if [[ $coverageflag == "true" && ($featureflag == "true" || $unitflag == "true" || $apiflag == "true") ]]
then
echo "Use config file specific.xml"
configfile='phpunit.coverage.specific.xml'
fi
# backup current config (if it exists):
if [ -f $ORIGINALENV ]; then
mv $ORIGINALENV $BACKUPENV
fi
# enable testing config
cp $TESTINGENV $ORIGINALENV
# reset database (optional)
if [[ $resetTestFlag == "true" ]]
then
echo "Must reset database"
# touch files to make sure they exist.
touch $DATABASE
touch $DATABASECOPY
# truncate original database file
truncate $DATABASE --size 0
# run migration
php artisan migrate:refresh --seed
# call test data generation script
$(which php) /sites/FF3/test-data/artisan generate:data local sqlite
# also run upgrade routine:
$(which php) /sites/FF3/firefly-iii/artisan firefly:upgrade-database
# copy new database over backup (resets backup)
cp $DATABASE $DATABASECOPY
# copy new database to test-data repository:
cp $DATABASE /sites/FF3/test-data/storage/database.sqlite
fi
# do not reset database (optional)
if [[ $resetTestFlag == "" ]]
then
echo "Will not reset database"
fi
echo "Copy test database over original"
# take database from copy:
cp $DATABASECOPY $DATABASE
echo "clear caches and what-not.."
php artisan cache:clear
# php artisan config:clear
# php artisan route:clear
# php artisan twig:clean
# php artisan view:clear
# run PHPUnit
if [[ $testflag == "" ]]
then
echo "Must not run PHPUnit"
else
echo "Must run PHPUnit"
if [[ $coverageflag == "" ]]
then
echo "Must run PHPUnit without coverage:"
else
echo "Must run PHPUnit with coverage"
fi
fi
echo "./vendor/bin/phpunit $verbalflag --configuration $configfile $featuretestclass $unittestclass $apitestclass $testsuite"
./vendor/bin/phpunit $verbalflag --configuration $configfile $featuretestclass $unittestclass $apitestclass $testsuite
# restore current config:
if [ -f $BACKUPENV ]; then
mv $BACKUPENV $ORIGINALENV
fi