#!/usr/bin/env bash if [ $# -lt 2 ]; then echo "usage: $0 " exit 1 fi DB_USER=$1 DB_PASS=$2 WP_TESTS_TAG="tags/4.9.7" # Get temp directory TMPDIR=${TMPDIR-/tmp} TMPDIR=$(echo $TMPDIR | sed -e "s/\/$//") # Evaluate current directory DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" # Evaluate application root directory WEB_ROOT_DIR="$( dirname "$( dirname "$( dirname "$( dirname "$( dirname "$DIR" )" )" )" )" )" WP_CORE_DIR="$WEB_ROOT_DIR"/wp # Location where wordpress testing suite will be installed WP_TESTS_DIR=${WP_TESTS_DIR-$TMPDIR/wordpress-tests-lib} WP_TEST_APPLICATION_DIR=${WP_TEST_APPLICATION_DIR-$TMPDIR/wiaas-backend-test} download() { if [ `which curl` ]; then curl -s "$1" > "$2"; elif [ `which wget` ]; then wget -nv -O "$2" "$1" fi } set -ex # Since test enviroment needs to start with fresh setup # we will install application in /tmp/ folder and execute all migrations setup_test_application() { rm -rf "$WP_TEST_APPLICATION_DIR" mkdir "$WP_TEST_APPLICATION_DIR" mkdir "$WP_TEST_APPLICATION_DIR"/app cp -r "$WEB_ROOT_DIR/app/mu-plugins" "$WP_TEST_APPLICATION_DIR/app/mu-plugins" mkdir "$WP_TEST_APPLICATION_DIR"/app/plugins cp -r "$WEB_ROOT_DIR"/app/plugins/wiaas "$WP_TEST_APPLICATION_DIR"/app/plugins/wiaas cp -r "$WEB_ROOT_DIR"/app/plugins/gravityflow "$WP_TEST_APPLICATION_DIR"/app/plugins/gravityflow cp -r "$WEB_ROOT_DIR"/app/plugins/gravityforms "$WP_TEST_APPLICATION_DIR"/app/plugins/gravityforms mkdir "$WP_TEST_APPLICATION_DIR"/app/themes mkdir "$WP_TEST_APPLICATION_DIR"/app/uploads cp -r "$WEB_ROOT_DIR"/config "$WP_TEST_APPLICATION_DIR"/config sed -i "s|define('WP_ENV', env('WP_ENV') ?: 'development');|define('WP_ENV', 'test');|" "$WP_TEST_APPLICATION_DIR"/config/application.php cp "$WEB_ROOT_DIR/composer.json" "$WP_TEST_APPLICATION_DIR/composer.json" cp "$WEB_ROOT_DIR/composer.lock" "$WP_TEST_APPLICATION_DIR/composer.lock" cp "$WEB_ROOT_DIR/index.php" "$WP_TEST_APPLICATION_DIR/index.php" cp "$WEB_ROOT_DIR/wp-config.php" "$WP_TEST_APPLICATION_DIR/wp-config.php" cp "$WEB_ROOT_DIR/wp-cli.yml" "$WP_TEST_APPLICATION_DIR/wp-cli.yml" { echo "MYSQL_DATABASE=wordpress_test" echo "MYSQL_USER=wp_admin_test" echo "MYSQL_PASSWORD=wp_admin_test_password" echo "WP_AUTH_KEY=test" echo "WP_SECURE_AUTH_KEY=test" echo "WP_LOGGED_IN_KEY=test" echo "WP_NONCE_KEY=test" echo "WP_AUTH_SALT=test" echo "WP_SECURE_AUTH_SALT=test" echo "WP_LOGGED_IN_SALT=test" echo "WP_NONCE_SALT=test" echo "WP_JWT_AUTH_SECRET_KEY=test" } >> "$WP_TEST_APPLICATION_DIR/.env" } install_test_suite() { # set up testing suite if it doesn't yet exist if [ ! -d $WP_TESTS_DIR ]; then # set up testing suite mkdir -p $WP_TESTS_DIR svn co --quiet https://develop.svn.wordpress.org/${WP_TESTS_TAG}/tests/phpunit/includes/ $WP_TESTS_DIR/includes svn co --quiet https://develop.svn.wordpress.org/${WP_TESTS_TAG}/tests/phpunit/data/ $WP_TESTS_DIR/data fi # set up testing environment wp-config entry point file if it does not exist if [ ! -f "$WP_TESTS_DIR"/wp-tests-config.php ]; then # init testing suite entry point settings file { echo "> "$WP_TESTS_DIR"/wp-tests-config.php fi } setup_test_db() { # create db user if not exists mysql -u "$DB_USER" -p"$DB_PASS" --execute="CREATE USER IF NOT EXISTS wp_admin_test@localhost IDENTIFIED BY 'wp_admin_test_password';" # delete database if it exists mysql -u "$DB_USER" -p"$DB_PASS" --execute="DROP DATABASE IF EXISTS wordpress_test;" # create database mysql -u "$DB_USER" -p"$DB_PASS" --execute="CREATE DATABASE wordpress_test;GRANT ALL PRIVILEGES ON wordpress_test.* TO wp_admin_test@localhost;" # seed database mysql -u "$DB_USER" -p"$DB_PASS" wordpress_test < "$WEB_ROOT_DIR/../database/clean-dump.sql" } migrate_test_db() { cd "$WP_TEST_APPLICATION_DIR" composer install # Run this so ony pending database schema can be loaded composer update-db } setup_test_application install_test_suite setup_test_db migrate_test_db