Start for testing feature/Testing
authorSteve Sutton <steve@gaslightmedia.com>
Wed, 24 Aug 2016 18:36:21 +0000 (14:36 -0400)
committerSteve Sutton <steve@gaslightmedia.com>
Wed, 24 Aug 2016 18:36:21 +0000 (14:36 -0400)
Setting up PHPUnit test.

.travis.yml [new file with mode: 0644]
bin/install-wp-tests.sh [new file with mode: 0755]
models/block.php
phpunit.xml [new file with mode: 0644]
tests/bootstrap.php [new file with mode: 0644]
tests/test-blocks.php [new file with mode: 0644]

diff --git a/.travis.yml b/.travis.yml
new file mode 100644 (file)
index 0000000..375e59e
--- /dev/null
@@ -0,0 +1,23 @@
+language: php
+
+notifications:
+  email:
+    on_success: never
+    on_failure: change
+
+php:
+  - 5.3
+  - 5.6
+
+env:
+  - WP_VERSION=latest WP_MULTISITE=0
+
+matrix:
+  include:
+    - php: 5.3
+      env: WP_VERSION=latest WP_MULTISITE=1
+
+before_script:
+  - bash bin/install-wp-tests.sh wordpress_test root '' localhost $WP_VERSION
+
+script: phpunit
diff --git a/bin/install-wp-tests.sh b/bin/install-wp-tests.sh
new file mode 100755 (executable)
index 0000000..5baa6cb
--- /dev/null
@@ -0,0 +1,120 @@
+#!/usr/bin/env bash
+
+if [ $# -lt 3 ]; then
+       echo "usage: $0 <db-name> <db-user> <db-pass> [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
index 2fd4649..1190e7a 100644 (file)
@@ -420,4 +420,24 @@ class glm_models_block
 
         return $wpdb->get_results( $sql, ARRAY_A );
     }
+
+    /**
+     * Get Events from GlmAssociate
+     */
+    public function get_glm_assoc_events()
+    {
+        global $wpdb;
+        $results = array();
+        if ( !defined('GLM_BLOCK_POST_TYPE') ) {
+            return $results;
+        }
+        return $wpdb->get_results(
+            $wpdb->prepare(
+                "SELECT e.id,e.name,
+                        DATE_FORMAT( )
+                "
+            )
+        );
+    }
+
 }
diff --git a/phpunit.xml b/phpunit.xml
new file mode 100644 (file)
index 0000000..44f0fdb
--- /dev/null
@@ -0,0 +1,14 @@
+<phpunit
+       bootstrap="tests/bootstrap.php"
+       backupGlobals="false"
+       colors="true"
+       convertErrorsToExceptions="true"
+       convertNoticesToExceptions="true"
+       convertWarningsToExceptions="true"
+       >
+       <testsuites>
+               <testsuite>
+                       <directory prefix="test-" suffix=".php">./tests/</directory>
+               </testsuite>
+       </testsuites>
+</phpunit>
diff --git a/tests/bootstrap.php b/tests/bootstrap.php
new file mode 100644 (file)
index 0000000..4f9e87e
--- /dev/null
@@ -0,0 +1,15 @@
+<?php
+
+$_tests_dir = getenv( 'WP_TESTS_DIR' );
+if ( ! $_tests_dir ) {
+       $_tests_dir = '/tmp/wordpress-tests-lib';
+}
+
+require_once $_tests_dir . '/includes/functions.php';
+
+function _manually_load_plugin() {
+       require dirname( dirname( __FILE__ ) ) . '/glm-blocks.php';
+}
+tests_add_filter( 'muplugins_loaded', '_manually_load_plugin' );
+
+require $_tests_dir . '/includes/bootstrap.php';
diff --git a/tests/test-blocks.php b/tests/test-blocks.php
new file mode 100644 (file)
index 0000000..9e9e603
--- /dev/null
@@ -0,0 +1,44 @@
+<?php
+
+class BlockTest extends WP_UnitTestCase
+{
+
+    function test_add_block()
+    {
+        $b = $this->factory->post->create(
+            array(
+                'post_title' => 'Block One',
+                'post_type'  => GLM_BLOCK_POST_TYPE,
+            )
+        );
+
+        $query = new WP_Query(
+            array(
+                's' => 'Block One Two'
+            )
+        );
+
+        $posts = $query->query(
+            array(
+                'post_type' => GLM_BLOCK_POST_TYPE
+            )
+        );
+
+        $this->assertEqualSets( array( $b ), wp_list_pluck( $posts, 'ID' ) );
+
+       }
+
+    function test_get_ten_blocks()
+    {
+        $b = $this->factory->post->create_many(
+            10,
+            array(
+                'post_type' => GLM_BLOCK_POST_TYPE
+            )
+        );
+
+        $post_count = fetch_all_glm_blocks();
+        $this->assertEquals( 10, count( $post_count ) );
+    }
+}
+