#!/bin/bash

MINETEST_VERSION=5.2.0

# prerequisites
jq --version || exit 1
curl --version || exit 1

# ensure proper current directory
CWD=$(dirname $0)
cd ${CWD}

# setup
unset use_proxy
unset http_proxy
unset https_proxy
unset HTTP_PROXY
unset HTTPS_PROXY

# run mail-server
docker pull minetestmail/mail
docker run --name mail --rm \
 -e WEBMAILKEY=myserverkey \
 -e WEBMAIL_DEBUG=true \
 --network host \
 minetestmail/mail &

# wait for startup
bash -c 'while !</dev/tcp/localhost/8080; do sleep 1; done;'

# start minetest with mail mod
docker pull registry.gitlab.com/minetest/minetest/server:${MINETEST_VERSION}
docker run --rm --name minetest \
  -u root:root \
	-v $(pwd)/minetest.conf:/etc/minetest/minetest.conf:ro \
  -v $(pwd)/world.mt:/root/.minetest/worlds/world/world.mt \
  -v $(pwd)/auth.sqlite:/root/.minetest/worlds/world/auth.sqlite \
  -v $(pwd)/../:/root/.minetest/worlds/world/worldmods/mail \
  -v $(pwd)/test_mod:/root/.minetest/worlds/world/worldmods/mail_test \
  -e use_proxy=false \
  -e http_proxy= \
  -e HTTP_PROXY= \
  --network host \
	registry.gitlab.com/minetest/minetest/server:${MINETEST_VERSION} &

# prepare cleanup
function cleanup {
	# cleanup
	docker stop mail
  docker stop minetest
}

trap cleanup EXIT

# wait for startup
sleep 5

# Execute calls against mail-server

# login
LOGIN_DATA='{"username":"test","password":"enter"}'
RES=$(curl --data "${LOGIN_DATA}" -H "Content-Type: application/json" "http://127.0.0.1:8080/api/login")
echo Login response: $RES
SUCCESS=$(echo $RES | jq -r .success)
TOKEN=$(echo $RES | jq -r .token)

# login succeeded
test "$SUCCESS" == "true" || exit 1
# token extracted
test -n "$TOKEN" || exit 1

# fetch mails
RES=$(curl -H "Authorization: ${TOKEN}" "http://127.0.0.1:8080/api/inbox")
echo Mailbox: ${RES}

# inbox count is 1
test "$(echo $RES | jq '. | length')" == "1" || exit 1

echo "Test complete!"