Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add testing tools for better code coverage. #14

Merged
merged 33 commits into from
Sep 15, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
33 commits
Select commit Hold shift + click to select a range
4832ea7
Add testing tools for better code coverage.
thefrosty Sep 12, 2020
195b93f
Update unit tests for test suite.
thefrosty Sep 13, 2020
b7baa2e
Update to the test suite.
thefrosty Sep 13, 2020
60e1c5a
Add Login tests to 💯
thefrosty Sep 13, 2020
a61dfab
Add group to test.
thefrosty Sep 13, 2020
423b8f1
Add NewUserTest.
thefrosty Sep 13, 2020
61dabbf
Add LastLoginColumnsTest.
thefrosty Sep 13, 2020
1a1ef01
Update dependencies, slowing bump test coverage.
thefrosty Sep 13, 2020
feb04da
Build against proper branches.
thefrosty Sep 13, 2020
e8f061d
Remove composer require from travis install as it's in composer requi…
thefrosty Sep 13, 2020
4fb9feb
Add Settings Link to plugin page.
thefrosty Sep 13, 2020
4e571d2
Add asset for testing uploads, and enhancement to base testcase.
thefrosty Sep 13, 2020
bd9b257
Update columns test.
thefrosty Sep 13, 2020
0f5b3cf
Add Login test to max without stubbing multisite.
thefrosty Sep 13, 2020
6d7d9e0
Add missing package for PHP version compatibility in PHPCS.
thefrosty Sep 13, 2020
53b3036
Fix phpcs.
thefrosty Sep 13, 2020
775c6b6
Add package.json and update linter for JS.
thefrosty Sep 13, 2020
ab02036
Add tests.
thefrosty Sep 13, 2020
3c572b6
Change coverage report location.
thefrosty Sep 14, 2020
69bdef6
Keep xdebug.
thefrosty Sep 14, 2020
9cf5d72
Switch exit to wp_die.
thefrosty Sep 14, 2020
3a2926c
Code updates for PHP 7+
thefrosty Sep 14, 2020
72e753c
Change from exit to wp_die and add filter for unit tests.
thefrosty Sep 14, 2020
f8aa30d
Update test.
thefrosty Sep 14, 2020
b7141d3
phpcs cleanup.
thefrosty Sep 14, 2020
8811d86
Add tests for WpSignup.
thefrosty Sep 14, 2020
0bf035d
Fix malformed wpdb query, thanks unit tests.
thefrosty Sep 14, 2020
c54ccc3
Add code coverage report and badge.
thefrosty Sep 15, 2020
d41a4d3
Template cleanup.
thefrosty Sep 15, 2020
7a81e7c
TEst cleanup.
thefrosty Sep 15, 2020
5d6147e
Add more tests.
thefrosty Sep 15, 2020
65a04dd
Add user profile test, which exposed a user access bug.
thefrosty Sep 15, 2020
c2dd930
Add settings test, and set min coverage to 75%.
thefrosty Sep 15, 2020
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .gitattributes
Original file line number Diff line number Diff line change
@@ -1,10 +1,13 @@
/.git export-ignore
/.github export-ignore
/bin export-ignore
/coverage export-ignore
/tests export-ignore
.gitattributes export-ignore
.gitignore export-ignore
.travis.yml export-ignore
package.json export-ignore
package-lock.json export-ignore
phpcs-ruleset.xml export-ignore
phpmd-ruleset.xml export-ignore
phpunit.xml export-ignore
7 changes: 5 additions & 2 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
.DS_Store
/.idea
coverage/
tests/results/
node_modules/
tests/clover.xml
/wordpress
/vendor
composer.lock
composer.lock
54 changes: 39 additions & 15 deletions .travis.yml
Original file line number Diff line number Diff line change
@@ -1,26 +1,50 @@
language: php

php:
- '7.3'
- '7.4'

install: composer install

script:
- ./vendor/bin/phpunit --coverage-html coverage
- ./vendor/bin/phpcs --standard=PSR2 --extensions=php src

after_script:
- composer export-coverage
os: linux
dist: trusty

cache:
directories:
- "$HOME/.composer/cache"
- vendor

language: php
php:
- '7.4'
- '7.3'

branches:
only:
- master
- develop
- "/^.*[Ff]eature\\/.*$/"
- "/^.*[rR]elease\\/.*$/"
- "/^.*[bB]ug\\/.*$/"
- "/^.*[Hh]otfix\\/.*$/"

jobs:
fast_finish: true

env:
global:
- WORDPRESS_DB_USER=wp
- WORDPRESS_DB_PASS=password
- WORDPRESS_DB_NAME=wp_tests
- WP_VERSION=5.5.1
- WP_MULTISITE=0

install:
- export PATH="$HOME/.composer/vendor/bin:$PATH"
- export DEV_BIN_PATH=bin
- source $DEV_BIN_PATH/create-all-branches.sh
- composer update --prefer-dist --no-interaction --prefer-stable --no-suggest

before_script:
- mysql -u root -e "GRANT ALL PRIVILEGES ON $WORDPRESS_DB_NAME.* TO $WORDPRESS_DB_USER IDENTIFIED BY '$WORDPRESS_DB_PASS';"
- mysql -u root -e "CREATE DATABASE $WORDPRESS_DB_NAME;"

script:
- composer tests

after_success:
- bash <(curl -s https://codecov.io/bash)

notifications:
email:
Expand Down
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
[![Total Downloads](https://img.shields.io/packagist/dt/thefrosty/wp-login-locker.svg)](https://packagist.org/packages/thefrosty/wp-login-locker)
[![License](https://img.shields.io/packagist/l/thefrosty/wp-login-locker.svg)](https://packagist.org/thefrosty/thefrosty/wp-login-locker)
[![Build Status](https://travis-ci.org/thefrosty/wp-login-locker.svg?branch=master)](https://travis-ci.org/thefrosty/wp-login-locker)
[![codecov](https://codecov.io/gh/thefrosty/wp-login-locker/branch/develop/graph/badge.svg)](https://codecov.io/gh/thefrosty/wp-login-locker)

Disable direct access to your sites /wp-login.php script plus user notifications based on actions.

Expand Down
29 changes: 29 additions & 0 deletions bin/create-all-branches.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
#!/usr/bin/env bash

set -e

# https://stackoverflow.com/a/44036486/558561
function create_all_branches() {
# Keep track of where Travis put us.
# We are on a detached head, and we need to be able to go back to it.
local build_head
build_head=$(git rev-parse HEAD)

# Fetch all the remote branches. Travis clones with `--depth`, which
# implies `--single-branch`, so we need to overwrite remote.origin.fetch to
# do that.
git config --replace-all remote.origin.fetch +refs/heads/*:refs/remotes/origin/*
git fetch
# optionally, we can also fetch the tags
git fetch --tags

# create the tacking branches
for branch in $(git branch -r | grep -v HEAD); do
git checkout -qf "${branch#origin/}"
done

# finally, go back to where we were at the beginning
git checkout "${build_head}"
}

create_all_branches
40 changes: 40 additions & 0 deletions bin/eslint.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
#!/usr/bin/env bash

set -e

# Based off: https://gist.github.com/oroce/11282380
# Go to root of the repository
echo 'Checking ESLint'

if [[ $(git rev-parse --verify HEAD) ]]; then
against='HEAD'
elif [[ $(git rev-parse --verify develop) ]]; then
against='develop'
elif [[ $(git rev-parse --verify master) ]]; then
against='master'
else
echo "git can't verify HEAD, develop or master."
exit 1
fi

commitFiles=$(git diff --name-only "$(git merge-base develop ${against})")

jsFiles=""
jsFilesCount=0
for f in ${commitFiles}; do
if [[ ! -e ${f} ]]; then
continue
fi
if [[ ${f} =~ \.(js|jsx)$ ]]; then
jsFilesCount=$((jsFilesCount + 1))
jsFiles="$jsFiles $f"
fi
done
if [[ ${jsFilesCount} == 0 ]]; then
echo "No JS files updated, nothing to check."
exit 0
fi

echo "Checking files: $jsFiles"

npx standard "${jsFiles}"
152 changes: 152 additions & 0 deletions bin/install-wp-tests.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,152 @@
#!/usr/bin/env bash

if [[ $# -lt 3 ]]; then
echo "usage: $0 <db-name> <db-user> <db-pass> [db-host] [wp-version] [skip-database-creation]"
exit 1
fi

DB_NAME=$1
DB_USER=$2
DB_PASS=$3
DB_HOST=${4-localhost}
WP_VERSION=${5-latest}
SKIP_DB_CREATE=${6-false}

TMPDIR=${TMPDIR-/tmp}
TMPDIR=$(echo $TMPDIR | sed -e "s/\/$//")
WP_TESTS_DIR=${WP_TESTS_DIR-$TMPDIR/wordpress-tests-lib}
WP_CORE_DIR=${WP_CORE_DIR-$TMPDIR/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]+$ ]]; then
WP_TESTS_TAG="branches/$WP_VERSION"
elif [[ ${WP_VERSION} =~ [0-9]+\.[0-9]+\.[0-9]+ ]]; then
if [[ ${WP_VERSION} =~ [0-9]+\.[0-9]+\.[0] ]]; then
# version x.x.0 means the first release of the major version, so strip off the .0 and download version x.x
WP_TESTS_TAG="tags/${WP_VERSION%??}"
else
WP_TESTS_TAG="tags/$WP_VERSION"
fi
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 $TMPDIR/wordpress-nightly
download https://wordpress.org/nightly-builds/wordpress-latest.zip $TMPDIR/wordpress-nightly/wordpress-nightly.zip
unzip -q $TMPDIR/wordpress-nightly/wordpress-nightly.zip -d $TMPDIR/wordpress-nightly/
mv $TMPDIR/wordpress-nightly/wordpress/* $WP_CORE_DIR
else
if [[ ${WP_VERSION} == 'latest' ]]; then
local ARCHIVE_NAME='latest'
elif [[ ${WP_VERSION} =~ [0-9]+\.[0-9]+ ]]; then
# https serves multiple offers, whereas http serves single.
download https://api.wordpress.org/core/version-check/1.7/ $TMPDIR/wp-latest.json
if [[ ${WP_VERSION} =~ [0-9]+\.[0-9]+\.[0] ]]; then
# version x.x.0 means the first release of the major version, so strip off the .0 and download version x.x
LATEST_VERSION=${WP_VERSION%??}
else
# otherwise, scan the releases and get the most up to date minor version of the major release
local VERSION_ESCAPED=`echo ${WP_VERSION} | sed 's/\./\\\\./g'`
LATEST_VERSION=$(grep -o '"version":"'${VERSION_ESCAPED}'[^"]*' $TMPDIR/wp-latest.json | sed 's/"version":"//' | head -1)
fi
if [[ -z "$LATEST_VERSION" ]]; then
local ARCHIVE_NAME="wordpress-$WP_VERSION"
else
local ARCHIVE_NAME="wordpress-$LATEST_VERSION"
fi
else
local ARCHIVE_NAME="wordpress-$WP_VERSION"
fi
download https://wordpress.org/${ARCHIVE_NAME}.tar.gz $TMPDIR/wordpress.tar.gz
tar --strip-components=1 -zxmf $TMPDIR/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
svn co --quiet https://develop.svn.wordpress.org/${WP_TESTS_TAG}/tests/phpunit/data/ ${WP_TESTS_DIR}/data
fi

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
# remove all forward slashes in the end
WP_CORE_DIR=$(echo $WP_CORE_DIR | sed "s:/\+$::")
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() {

if [[ ${SKIP_DB_CREATE} = "true" ]]; then
return 0
fi

# 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
45 changes: 45 additions & 0 deletions bin/phpcs.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
#!/usr/bin/env bash

set -e

# Based off: https://gist.github.com/Hounddog/3891872
# Go to root of the repository
echo 'Checking PHPCS'

if [[ $(git rev-parse --verify HEAD) ]]; then
against='HEAD'
elif [[ $(git rev-parse --verify develop) ]]; then
against='develop'
elif [[ $(git rev-parse --verify master) ]]; then
against='master'
else
echo "git can't verify HEAD, develop or master."
exit 1
fi

commitFiles=$(git diff --name-only "$(git merge-base develop ${against})")

args="-s --colors --extensions=php --tab-width=4 --standard=phpcs-ruleset.xml --runtime-set testVersion 7.3-"
phpFiles=""
phpFilesCount=0
for f in ${commitFiles}; do
if [[ ! -e ${f} ]]; then
continue
fi
if [[ ${f} =~ \.(php|ctp)$ ]]; then
phpFilesCount=$((phpFilesCount + 1))
phpFiles="$phpFiles $f"
fi
done
if [[ ${phpFilesCount} == 0 ]]; then
echo "No PHP files updated, nothing to check."
exit 0
fi

echo "Checking files: $phpFiles"

if [[ ${phpFilesCount} -gt 2 ]] && { [[ ${TRAVIS+x} ]] || [[ ${CIRCLECI+x} ]]; }; then
args="$args --report=summary"
fi

./vendor/bin/phpcs ${args} ${phpFiles}
Loading