#!/bin/bash

DC_SCRIPT=./scripts/example-commit/dc-example.sh
EXPECTED_SERVICES_COUNT=9

build_services() {
    $DC_SCRIPT build authelia
}

start_services() {
    $DC_SCRIPT up -d httpbin mongo redis openldap authelia smtp nginx-authelia nginx-portal nginx-backend
    sleep 3
}

shut_services() {
    containers_exist=`docker ps -aq | wc -l`
    if [ "$containers_exist" -ne "0" ]
    then
        docker rm -f $(docker ps -aq)
    fi
}

expect_services_count() {
  EXPECTED_COUNT=$1
  service_count=`docker ps -a | grep "Up " | wc -l`
  
  if [ "${service_count}" -eq "$EXPECTED_COUNT" ]
  then
    echo "Services are up and running."
  else
    echo "Some services exited..."
    docker ps -a
    exit 1
  fi
}

run_integration_tests() {
  echo "Start services..."
  start_services
  expect_services_count $EXPECTED_SERVICES_COUNT
  
  sleep 5
  ./node_modules/.bin/grunt run:test-int
  shut_services  
}

run_other_tests() {
  echo "Test dev environment deployment (commands in README)"
  # rm -rf node_modules
  # ./scripts/build-dev.sh
  ./scripts/example-commit/deploy-example.sh
  expect_services_count $EXPECTED_SERVICES_COUNT
  ./scripts/example-commit/undeploy-example.sh
}

run_other_tests_docker() {
  echo "Test dev docker deployment (commands in README)"
  ./scripts/example-dockerhub/deploy-example.sh
  expect_services_count $EXPECTED_SERVICES_COUNT
  ./scripts/example-dockerhub/undeploy-example.sh
}





set -e

echo "Make sure services are not already running"
shut_services

# Build the container
build_services

# Prepare & test example from end user perspective
run_integration_tests

# Other tests like executing the deployment script
run_other_tests

# Test example with precompiled container
run_other_tests_docker
