#!/usr/bin/env bash

SRC=$(cd $(dirname "$0"); pwd)
source "${SRC}/include.sh"

echo -e "\033[1mRunning tests:\033[0m"

cd $file_path

$pm2 interact kill

#
# Testing pull,forward,backward methods
#

if [ $TRAVIS ]
then
    git config --global user.email "jshkurti@student.42.fr"
    git config --global user.name "jshkurti"
fi

rm -rf ./app-playground

git clone https://github.com/keymetrics/app-playground.git

cd app-playground

git checkout hotfix

# set max_memory_restart to 160M by default. MAC does not support `sed -i`
echo `sed -e 's/"160"/"160M"/' process.json` >| process.json

$pm2 start ./process.json --name app
sleep 5


OUT=`$pm2 ls | grep errored | wc -l`
[ $OUT -eq 1 ] || fail "Process should be errored because node_modules are missing"
success "Process should be errored because node_modules are missing"

OUT=`$pm2 info 0 | grep remote | egrep -oh 'https://([^ ]+)'`
[ $OUT = "https://github.com/keymetrics/app-playground.git" ] || fail "Remote URL should be right"
success "Remote URL should be right"

OUT=`$pm2 backward app | wc -l`
[ $OUT -eq 13 ] || fail "Backward method should work properly and print adequate output"
success "Backward method should work properly and print adequate output"

OUT=`$pm2 forward app | wc -l`
[ $OUT -eq 13 ] || fail "Forward method should work properly and print adequate output"
success "Forward method should work properly and print adequate output"

OUT=`$pm2 forward app | wc -l`
[ $OUT -eq 2 ] || fail "Forward method should fail and thus print 2-lined output"
success "Forward method should fail and thus print 2-lined output"

OUT=`$pm2 pull app | wc -l`
[ $OUT -eq 2 ] || fail "Pull method should 'fail' because it is already up-to-date"
success "Pull method should 'fail' because it is already up-to-date"

export PM2_WORKER_INTERVAL=1000

$pm2 kill

$pm2 start ./process.json --name app
sleep 5

#
# Testing refresh-versioning worker
#

OUT=`$pm2 jlist | egrep -oh '"unstaged":true' | wc -c`
[ $OUT -eq 16 ] || fail "Worker: unstaged flag should be true"
success "Worker: unstaged flag should be true"

git add --all
git commit -m 'staged now'
sleep 5
OUT=`$pm2 jlist | egrep -oh '"unstaged":false' | wc -c`
[ $OUT -eq 17 ] || fail "Worker: unstaged flag should be false this time"
success "Worker: unstaged flag should be false this time"

OUT=`$pm2 jlist | egrep -oh '"ahead":true' | wc -c`
[ $OUT -eq 13 ] || fail "Worker: ahead flag should be true"
success "Worker: ahead flag should be true"

OUT=`$pm2 pull app 83dfc32383a84e146005d8981bcae2c52a5b123b | egrep -oh 'Current commit 83dfc32383a84e146005d8981bcae2c52a5b123b' | wc -c`
[ $OUT -eq 56 ] || fail "Commit ID should be correct"
success "Commit ID should be correct"

$pm2 kill
cd ..
rm -rf ./app-playground
