#!/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 'vcrtf:u:s:a:' 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 echo "./vendor/bin/phpunit $verbalflag --configuration $configfile $featuretestclass $unittestclass $apitestclass $testsuite" ./vendor/bin/phpunit $verbalflag --configuration $configfile $featuretestclass $unittestclass $apitestclass $testsuite fi # restore current config: if [ -f $BACKUPENV ]; then mv $BACKUPENV $ORIGINALENV fi