#!/bin/zsh
# vim: set shiftwidth=4 softtabstop=4:
#
# This script is used to run tests on a database with demo data installed.
#
# Either provide the name of the database (first argument) or it will default to <project>_test
# Version 2.7
here=$(dirname $0)
project_home=$(cd $here && cd .. && echo $PWD)
tested_modules=$(python -B -c "import ConfigParser ; c = ConfigParser.ConfigParser() ; c.read('${project_home}/setup.cfg') ; print ','.join(c.get('odoo_scripts', 'module_list_tests', '').split())")
if [[ "$tested_modules" != "" ]];
then 
    update="-u $tested_modules"
fi
dbname=$1
if [[ -z "$dbname" ]];
then
    dbname=$(basename $(readlink -f $project_home))_test
else
    shift
fi
echo "Using database $dbname for tests"

ODOO_TYPE=$(python -B -c "import ConfigParser ; c = ConfigParser.ConfigParser() ; c.read('${project_home}/setup.cfg') ; print c.get('odoo_scripts', 'odoo_type', 'odoo8')")
if [ "$ODOO_TYPE" = "odoo8" ];
then
    loglevel="--log-level=info"
else
    loglevel="--log-level=test"
fi
logfile=$(tempfile --suffix=.log)
$here/start $update -d $dbname --test-enable $loglevel --max-cron=0 --stop-after-init $* | tee $logfile | sed -e 's/\(.*\) \(INFO\) \(.*\)/\o033[2m\1\o033[22m \o033[32m\o033[7m\2\o033[27m \3\o033[39m/' -e 's/\(.*\) \(DEBUG\) \(.*\)/\1 \o033[33m\o033[7m\2\o033[27m \2\o033[39m/' -e 's/\(.*\) \(WARNING\) \(.*\)/\o033[2m\1\o033[22m \o033[33m\o033[7m\2\o033[27m \3\o033[39m/' -e 's/\(.*\) \(ERROR\) \(.*\)/\1 \o033[31m\o033[7m\2\o033[27m \3\o033[0m/' -e 's/\(.*\) \(TEST\) \(.*\)/\1 \o033[34m\o033[7m\2\o033[27m \3 \o033[0m/' -e 's/ FAILED/ \o033[41m\o033[97m\o033[1mFAILED\o033[0m/' -e 's/ FAIL\(.*\)/ \o033[41m\o033[97m\o033[1mFAIL\o033[49m\o033[31m\1\o033[0m/'
ok=$(grep ' OK' $logfile -c)
# TODO detect yaml tests failures
failed=$(grep ' FAILED' $logfile -c)
echo ''
echo '\e[2m*****\e[22m \e[1mTest results\e[21m \e[2m*****\e[22m'
echo "$ok modules passing, $failed modules failing"
echo ''
if [[ $ok -gt 0 ]];
then
    echo -e '\033[32mOK:\033[0m'
    grep --color=always ' OK' $logfile || true
fi
if [[ $failed -gt 0 ]];
then
    echo -e '\033[31mFAILED\033[0m:'
    grep --color=always "FAILED\|FAIL:" $logfile
fi
echo ''
rm $logfile
if [[ $failed -gt 0 ]];
then
    exit 1
fi