From c0cb7af9ae70d99e4ff8c4a0ff7a7de2f3f5c681 Mon Sep 17 00:00:00 2001 From: Matthias Pfefferle Date: Mon, 24 Sep 2018 20:53:23 +0200 Subject: [PATCH] basic outbox support --- .svnignore | 31 +++++++++++ .travis.yml | 39 +++++++++++++ bin/deploy.sh | 82 +++++++++++++++++++++++++++ bin/install-wp-tests.sh | 120 ++++++++++++++++++++++++++++++++++++++++ phpunit.xml.dist | 14 +++++ tests/bootstrap.php | 21 +++++++ tests/test.php | 6 ++ 7 files changed, 313 insertions(+) create mode 100644 .svnignore create mode 100644 .travis.yml create mode 100644 bin/deploy.sh create mode 100644 bin/install-wp-tests.sh create mode 100644 phpunit.xml.dist create mode 100644 tests/bootstrap.php create mode 100644 tests/test.php diff --git a/.svnignore b/.svnignore new file mode 100644 index 0000000..be2eb0b --- /dev/null +++ b/.svnignore @@ -0,0 +1,31 @@ +.DS_Store +.editorconfig +.git +.gitignore +.travis.yml +.codeclimate.yml +.data +Gruntfile.js +LINGUAS +Makefile +README.md +readme.md +CODE_OF_CONDUCT.md +LICENSE.md +_site +bin +composer.json +composer.lock +docker-compose.yml +gulpfile.js +package.json +node_modules +npm-debug.log +phpcs.xml +package.json +package-lock.json +phpunit.xml +phpunit.xml.dist +tests +node_modules +vendor diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 0000000..9047d6c --- /dev/null +++ b/.travis.yml @@ -0,0 +1,39 @@ +language: php + +notifications: + email: + on_success: never + on_failure: change + +php: + - 5.6 + - 7 + +after_success: bash bin/deploy.sh + +env: + matrix: + - WP_VERSION=latest WP_MULTISITE=0 + - WP_VERSION=nightly WP_MULTISITE=0 + + global: + - SVN_REPO: https://plugins.svn.wordpress.org/activitystream-extension/ + - GH_REF: https://github.com/pfefferle/wordpress-activitystream-extension.git + - secure: "mNWrMScJrvoABY89j7eWG33cQnaIzvZ5q32bMhZO5kVVqiCI+XVKZuf7vC2DdSeF7BHTgh9PdkkkAzhW/6yhOT1IEXfRMF/5U1JrWbGkN5ByKH0cdxbExmuxKd1sSRC3zxkL7LYoE8vVhR6SXwuqyqa9uBNphJPvV+c6dHNwIjawPbJMlakUXc6a3hZSJbScn5F1a293jgc4Oe2souC1Hds/RTw2igoDdGqY1GC9J6EpXeCETltQcd1HKi+KD2kG47gBWb1B9JTKfkXH7x93wGYUq2JMb0FRzaCe/JzKcEkeyqdZgg/8IkxigY7uRxECF+amu+g5iO4fWPt4KgtoBno1+q4M3T9YHOZ4tv9iJ7Z9jjO/zraeIcXCC0mHP8m3Wqg4D4LWOWtCL+r/iCPIZN/26fQjOtH3MIrpWYEIw6BTrCMRxxYaf7ipc0xzw1rL8IJWRWyMYt21LinuQqAF8K8NMgQPXRbUJ0o6MThyBZuo15otz95cIoXc7ofJcZvEnBe3kwylUKSrO8QCrbfscMzd7wu1KXBDWGWM8jQA0PDN0cYLBIJuqrrLO9w0b3nhsqkuwbmOJG9yIySUkKQMKFIJ6rn7O2qWibNKMGoJWtyM+NOmJ4TlbyOGwSRtjxInUTUlecCZ9WoIwMb1JcB7YH8XAmeMAuRrooPOEx3n8xo=" + +matrix: + include: + - php: 5.6 + env: WP_VERSION=latest WP_MULTISITE=0 WP_PULUGIN_DEPLOY=1 + +before_script: + - export PATH="$HOME/.composer/vendor/bin:$PATH" + - | + if [[ ${TRAVIS_PHP_VERSION:0:2} == "7." ]]; then + composer global require "phpunit/phpunit=5.7.*" + elif [[ ${TRAVIS_PHP_VERSION:0:3} != "5.2" ]]; then + composer global require "phpunit/phpunit=4.8.*" + fi + - bash bin/install-wp-tests.sh wordpress root '' localhost $WP_VERSION + +script: phpunit diff --git a/bin/deploy.sh b/bin/deploy.sh new file mode 100644 index 0000000..5be1897 --- /dev/null +++ b/bin/deploy.sh @@ -0,0 +1,82 @@ +#!/usr/bin/env bash + +set -e + +if [[ "false" != "$TRAVIS_PULL_REQUEST" ]]; then + echo "Not deploying pull requests." + exit +fi + +if [[ ! $WP_PLUGIN_DEPLOY ]]; then + echo "Not deploying." + exit +fi + +if [[ ! $SVN_REPO ]]; then + echo "SVN repo is not specified." + exit +fi + +# Untrailing slash of SVN_REPO path +SVN_REPO=`echo $SVN_REPO | sed -e "s/\/$//"` +# Git repository +GH_REF=https://github.com/${TRAVIS_REPO_SLUG}.git + +echo "Starting deploy..." + +mkdir build + +cd build +BASE_DIR=$(pwd) + +echo "Checking out trunk from $SVN_REPO ..." +svn co -q $SVN_REPO/trunk + +echo "Getting clone from $GH_REF to $SVN_REPO ..." +git clone -q $GH_REF ./git + +cd ./git + +if [ -e "bin/build.sh" ]; then + echo "Starting bin/build.sh." + bash bin/build.sh +fi + +cd $BASE_DIR + +echo "Syncing git repository to svn" +rsync -a --exclude=".svn" --checksum --delete ./git/ ./trunk/ +rm -fr ./git + +cd ./trunk + +if [ -e ".distignore" ]; then + echo "svn propset form .distignore" + svn propset -q -R svn:ignore -F .distignore . + +else + if [ -e ".svnignore" ]; then + echo "svn propset" + svn propset -q -R svn:ignore -F .svnignore . + fi +fi + +echo "Run svn add" +svn st | grep '^!' | sed -e 's/\![ ]*/svn del -q /g' | sh +echo "Run svn del" +svn st | grep '^?' | sed -e 's/\?[ ]*/svn add -q /g' | sh + +# If tag number and credentials are provided, commit to trunk. +if [[ $TRAVIS_TAG && $SVN_USER && $SVN_PASS ]]; then + if [[ ! -d tags/$TRAVIS_TAG ]]; then + echo "Commit to $SVN_REPO." + svn commit -m "commit version $TRAVIS_TAG" --username $SVN_USER --password $SVN_PASS --non-interactive 2>/dev/null + echo "Take snapshot of $TRAVIS_TAG" + svn copy $SVN_REPO/trunk $SVN_REPO/tags/$TRAVIS_TAG -m "Take snapshot of $TRAVIS_TAG" --username $SVN_USER --password $SVN_PASS --non-interactive 2>/dev/null + else + echo "tags/$TRAVIS_TAG already exists." + fi +else + echo "Nothing to commit and check \`svn st\`." + svn st +fi diff --git a/bin/install-wp-tests.sh b/bin/install-wp-tests.sh new file mode 100644 index 0000000..5baa6cb --- /dev/null +++ b/bin/install-wp-tests.sh @@ -0,0 +1,120 @@ +#!/usr/bin/env bash + +if [ $# -lt 3 ]; then + echo "usage: $0 [db-host] [wp-version]" + exit 1 +fi + +DB_NAME=$1 +DB_USER=$2 +DB_PASS=$3 +DB_HOST=${4-localhost} +WP_VERSION=${5-latest} + +WP_TESTS_DIR=${WP_TESTS_DIR-/tmp/wordpress-tests-lib} +WP_CORE_DIR=${WP_CORE_DIR-/tmp/wordpress/} + +download() { + if [ `which curl` ]; then + curl -s "$1" > "$2"; + elif [ `which wget` ]; then + wget -nv -O "$2" "$1" + fi +} + +if [[ $WP_VERSION =~ [0-9]+\.[0-9]+(\.[0-9]+)? ]]; then + WP_TESTS_TAG="tags/$WP_VERSION" +elif [[ $WP_VERSION == 'nightly' || $WP_VERSION == 'trunk' ]]; then + WP_TESTS_TAG="trunk" +else + # http serves a single offer, whereas https serves multiple. we only want one + download http://api.wordpress.org/core/version-check/1.7/ /tmp/wp-latest.json + grep '[0-9]+\.[0-9]+(\.[0-9]+)?' /tmp/wp-latest.json + LATEST_VERSION=$(grep -o '"version":"[^"]*' /tmp/wp-latest.json | sed 's/"version":"//') + if [[ -z "$LATEST_VERSION" ]]; then + echo "Latest WordPress version could not be found" + exit 1 + fi + WP_TESTS_TAG="tags/$LATEST_VERSION" +fi + +set -ex + +install_wp() { + + if [ -d $WP_CORE_DIR ]; then + return; + fi + + mkdir -p $WP_CORE_DIR + + if [[ $WP_VERSION == 'nightly' || $WP_VERSION == 'trunk' ]]; then + mkdir -p /tmp/wordpress-nightly + download https://wordpress.org/nightly-builds/wordpress-latest.zip /tmp/wordpress-nightly/wordpress-nightly.zip + unzip -q /tmp/wordpress-nightly/wordpress-nightly.zip -d /tmp/wordpress-nightly/ + mv /tmp/wordpress-nightly/wordpress/* $WP_CORE_DIR + else + if [ $WP_VERSION == 'latest' ]; then + local ARCHIVE_NAME='latest' + else + local ARCHIVE_NAME="wordpress-$WP_VERSION" + fi + download https://wordpress.org/${ARCHIVE_NAME}.tar.gz /tmp/wordpress.tar.gz + tar --strip-components=1 -zxmf /tmp/wordpress.tar.gz -C $WP_CORE_DIR + fi + + download https://raw.github.com/markoheijnen/wp-mysqli/master/db.php $WP_CORE_DIR/wp-content/db.php +} + +install_test_suite() { + # portable in-place argument for both GNU sed and Mac OSX sed + if [[ $(uname -s) == 'Darwin' ]]; then + local ioption='-i .bak' + else + local ioption='-i' + fi + + # 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 + fi + + cd $WP_TESTS_DIR + + if [ ! -f wp-tests-config.php ]; then + download https://develop.svn.wordpress.org/${WP_TESTS_TAG}/wp-tests-config-sample.php "$WP_TESTS_DIR"/wp-tests-config.php + sed $ioption "s:dirname( __FILE__ ) . '/src/':'$WP_CORE_DIR':" "$WP_TESTS_DIR"/wp-tests-config.php + sed $ioption "s/youremptytestdbnamehere/$DB_NAME/" "$WP_TESTS_DIR"/wp-tests-config.php + sed $ioption "s/yourusernamehere/$DB_USER/" "$WP_TESTS_DIR"/wp-tests-config.php + sed $ioption "s/yourpasswordhere/$DB_PASS/" "$WP_TESTS_DIR"/wp-tests-config.php + sed $ioption "s|localhost|${DB_HOST}|" "$WP_TESTS_DIR"/wp-tests-config.php + fi + +} + +install_db() { + # parse DB_HOST for port or socket references + local PARTS=(${DB_HOST//\:/ }) + local DB_HOSTNAME=${PARTS[0]}; + local DB_SOCK_OR_PORT=${PARTS[1]}; + local EXTRA="" + + if ! [ -z $DB_HOSTNAME ] ; then + if [ $(echo $DB_SOCK_OR_PORT | grep -e '^[0-9]\{1,\}$') ]; then + EXTRA=" --host=$DB_HOSTNAME --port=$DB_SOCK_OR_PORT --protocol=tcp" + elif ! [ -z $DB_SOCK_OR_PORT ] ; then + EXTRA=" --socket=$DB_SOCK_OR_PORT" + elif ! [ -z $DB_HOSTNAME ] ; then + EXTRA=" --host=$DB_HOSTNAME --protocol=tcp" + fi + fi + + # create database + mysqladmin create $DB_NAME --user="$DB_USER" --password="$DB_PASS"$EXTRA +} + +install_wp +install_test_suite +install_db diff --git a/phpunit.xml.dist b/phpunit.xml.dist new file mode 100644 index 0000000..44f0fdb --- /dev/null +++ b/phpunit.xml.dist @@ -0,0 +1,14 @@ + + + + ./tests/ + + + diff --git a/tests/bootstrap.php b/tests/bootstrap.php new file mode 100644 index 0000000..e361db5 --- /dev/null +++ b/tests/bootstrap.php @@ -0,0 +1,21 @@ +assertTrue( true ); + } +}