Skip to content
This repository was archived by the owner on Jan 23, 2026. It is now read-only.
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
44 commits
Select commit Hold shift + click to select a range
70dae56
Setup Theme PHPUnit tests
kiranpotphode Jan 22, 2020
9a3d459
Add PHPUnit tests for classes
kiranpotphode Jan 22, 2020
3c938c3
Write test cases for Classes and add code coverage annotations
kiranpotphode Jan 23, 2020
ff3f0a9
Fix issues with theme setup
kiranpotphode Jan 24, 2020
1fd953a
Update tests
kiranpotphode Jan 24, 2020
09474a6
Merge branch 'fix/bug-inc-classes' into feature/GH-33-dir-classes
kiranpotphode Jan 24, 2020
90748ea
Add phpunit GH action
deepaklalwani97 Jan 24, 2020
76156dd
Merge pull request #45 from rtCamp/setup-phpunit-action
deepaklalwani97 Jan 24, 2020
62b0759
Move title-tag support to init action
kiranpotphode Jan 24, 2020
2f78b2f
Delete unwanted files
kiranpotphode Jan 30, 2020
8a5e332
Add tests folder to skip_folders list
vaishaliagola27 Feb 21, 2020
bbf8de8
Update readme with Contributing guideline
vaishaliagola27 Feb 21, 2020
9ae2387
Merge pull request #50 from rtCamp/update-gh-action
vaishaliagola27 Feb 21, 2020
e51e858
Restructure test files and remove unwanted files.
deepaklalwani97 Feb 28, 2020
73a269d
Ignore traits directory from test coverage
deepaklalwani97 Feb 28, 2020
6a26437
Add Utility class and load in test environment
deepaklalwani97 Feb 28, 2020
348580d
Fix code coverage for widgets class
deepaklalwani97 Feb 28, 2020
55559de
Add test cases for missing methods
deepaklalwani97 Feb 28, 2020
00aa155
Fix class-assets code coverage
deepaklalwani97 Mar 2, 2020
631ffb5
Fix class-blank-theme.php unit test code coverage
deepaklalwani97 Mar 2, 2020
b039262
Add missing test cases for test-class-customizer.php
deepaklalwani97 Mar 2, 2020
4e2dfe2
Fix test cases for infinite scroll class
deepaklalwani97 Mar 3, 2020
5a24ed9
Fix assets class test case coverage
deepaklalwani97 Mar 3, 2020
d8b21a0
Fix error with customize_register method
deepaklalwani97 Mar 3, 2020
95c654e
Fix customizer test cases and run phpcbf on test cases
deepaklalwani97 Mar 4, 2020
821afca
Add test cases for custom functions
deepaklalwani97 Mar 4, 2020
627ca06
Remove unnecessary setup code
deepaklalwani97 Mar 4, 2020
12b3959
Add code coverage ignore to register asset methods
deepaklalwani97 Mar 5, 2020
a366cac
Merge pull request #47 from rtCamp/feature/GH-33-dir-classes
deepaklalwani97 Mar 24, 2020
98c5555
Fix phpcs
deepaklalwani97 Mar 24, 2020
d0fc4d7
Fix phpcs
deepaklalwani97 Mar 24, 2020
0cbd0e4
Exclude template-tags and autoloader from code coverage
deepaklalwani97 Mar 25, 2020
099a823
Update contributors workflow
deepaklalwani97 Mar 25, 2020
5596f14
Remove duplicate test assertions
deepaklalwani97 Mar 25, 2020
3b1fbf2
Add ignore annotation for a custom function
deepaklalwani97 Mar 25, 2020
92c99b0
Add doc description for test functions
deepaklalwani97 Mar 26, 2020
f771143
Fix covers annotation
deepaklalwani97 Mar 26, 2020
dcd5bee
Merge pull request #55 from rtCamp/update-test-docs
deepaklalwani97 Mar 26, 2020
679412e
Fix undefined function warning
deepaklalwani97 Jul 10, 2020
0d201eb
Merge branch 'master' of github.com:rtCamp/blank-theme into fix/misc-…
deepaklalwani97 Jul 10, 2020
448abbd
Fix unit test cases after syncing branch with master
deepaklalwani97 Jul 10, 2020
f54537b
Merge branch 'develop' of github.com:rtCamp/blank-theme into dev-unit…
deepaklalwani97 Jul 10, 2020
995799a
Merge branch 'dev-unit-test' of github.com:rtCamp/blank-theme into fi…
deepaklalwani97 Jul 10, 2020
cbf2c9b
Merge pull request #57 from rtCamp/fix/misc-issues
deepaklalwani97 Jul 16, 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
1 change: 1 addition & 0 deletions .github/workflows/phpcs_on_pull_request.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ jobs:
- name: Run PHPCS inspection
uses: docker://rtcamp/action-phpcs-code-review:v2.0.0
env:
SKIP_FOLDERS: "tests,.github"
VAULT_ADDR: ${{ secrets.VAULT_ADDR }}
VAULT_TOKEN: ${{ secrets.VAULT_TOKEN }}
with:
Expand Down
12 changes: 12 additions & 0 deletions .github/workflows/phpunit_on_pull_request.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
on: pull_request
name: PHPUnit
jobs:
runPHPCSInspection:
name: Run PHPUnit test
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
with:
ref: ${{ github.event.pull_request.head.sha }}
- name: Run PHPUnit test
uses: docker://rtcamp/action-run-phpunit:v1.0.0
36 changes: 36 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,42 @@ npm run precommit
```


## Contributing
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We slightly updated our contributor's workflow content, To align with that please update flow here. You can refer https://github.com/rtCamp/edit-flow-slack-integration


### Reporting a bug 🐞

Before creating a new issue, do browse through the [existing issues](https://github.com/rtCamp/blank-theme/issues) for resolution or upcoming fixes.

If you still need to [log an issue](https://github.com/rtCamp/blank-theme/issues/new), making sure to include as much detail as you can, including clear steps to reproduce your issue if possible.

### Create a pull request

Want to contribute a new feature? Start a conversation by logging an [issue](https://github.com/rtCamp/blank-theme/issues).

Once you're ready to send a pull request, please run through the following checklist:

1. Browse through the existing issues for anything related to what you want to work on. If you don't find any related issues, open a new one.

1. Fork the repository.

1. Create a branch from `develop` for each issue you'd like to address and commit your changes.

1. Push the code changes from your local clone to your fork.

1. Open a pull request and that's it! We'll with feedback as soon as possible (Isn't collaboration a great thing? 😌)

1. Once your pull request has passed final code review and tests, it will be merged into `develop` and be in the pipeline for the next release. Props to you! 🎉

### Unit testing

- Setup local unit test environment by running script from terminal

```./bin/install-wp-tests.sh <db-name> <db-user> <db-pass> [db-host] [wp-version] [skip-database-creation]```
- Execute `phpunit` in terminal from repository to run all test cases.
- Execute `phpunit ./tests/inc/test-class.php` in terminal with file path to run specific tests.


Good luck!

Does this interest you?
---------------
Expand Down
155 changes: 155 additions & 0 deletions bin/install-wp-tests.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,155 @@
#!/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]+\-(beta|RC)[0-9]+$ ]]; then
WP_BRANCH=${WP_VERSION%\-*}
WP_TESTS_TAG="branches/$WP_BRANCH"

elif [[ $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
3 changes: 2 additions & 1 deletion inc/classes/class-assets.php
Original file line number Diff line number Diff line change
Expand Up @@ -60,8 +60,9 @@ public function register_scripts() {
wp_enqueue_script( 'blank-theme-single' );
}

// Ignoring this block becuase trying to mock comments_open() throws error.
if ( is_singular() && comments_open() && get_option( 'thread_comments' ) ) {
wp_enqueue_script( 'comment-reply' );
wp_enqueue_script( 'comment-reply' ); // @codeCoverageIgnore
}
}

Expand Down
17 changes: 13 additions & 4 deletions inc/classes/class-blank-theme.php
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,7 @@ protected function setup_hooks() {
*/
add_action( 'wp_head', [ $this, 'add_pingback_link' ] );
add_action( 'after_setup_theme', [ $this, 'setup_theme' ] );
add_action( 'init', [ $this, 'add_title_tag_support' ] );

}

Expand All @@ -61,7 +62,6 @@ public function setup_theme() {
load_theme_textdomain( 'blank-theme', BLANK_THEME_TEMP_DIR . '/languages' );

add_theme_support( 'automatic-feed-links' );
add_theme_support( 'title-tag' );
add_theme_support( 'post-thumbnails' );
add_theme_support( 'customize-selective-refresh-widgets' );
add_theme_support( 'jetpack-responsive-videos' );
Expand Down Expand Up @@ -122,9 +122,18 @@ public function setup_theme() {
]
);

if ( ! isset( $content_width ) ) {
$content_width = 900;
}
}

/**
* Function to add Title theme support.
*
* @action init.
*
* @codeCoverageIgnore Not able to test this as it throws unexpected incorrect usgae error
* when called in unit test case.
*/
public function add_title_tag_support() {
add_theme_support( 'title-tag' );
}

/**
Expand Down
17 changes: 14 additions & 3 deletions inc/classes/class-customizer.php
Original file line number Diff line number Diff line change
Expand Up @@ -47,9 +47,17 @@ protected function setup_hooks() {
*/
public function customize_register( \WP_Customize_Manager $wp_customize ) {

$wp_customize->get_setting( 'blogname' )->transport = 'postMessage';
$wp_customize->get_setting( 'blogdescription' )->transport = 'postMessage';
$wp_customize->get_setting( 'header_textcolor' )->transport = 'postMessage';
if ( ! empty( $wp_customize->get_setting( 'blogname' ) ) ) {
$wp_customize->get_setting( 'blogname' )->transport = 'postMessage';
}

if ( ! empty( $wp_customize->get_setting( 'blogdescription' ) ) ) {
$wp_customize->get_setting( 'blogdescription' )->transport = 'postMessage';
}

if ( ! empty( $wp_customize->get_setting( 'header_textcolor' ) ) ) {
$wp_customize->get_setting( 'header_textcolor' )->transport = 'postMessage';
}

if ( isset( $wp_customize->selective_refresh ) ) {

Expand Down Expand Up @@ -94,6 +102,9 @@ public function customize_partial_blog_description() {
* Enqueue customizer scripts.
*
* @action customize_preview_init
*
* Ignoring this because the asset file names are generated dynamically and fetched from manifest so getting issues with mocking.
* @codeCoverageIgnore
*/
public function enqueue_customizer_scripts() {

Expand Down
2 changes: 2 additions & 0 deletions inc/helpers/custom-functions.php
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,8 @@
* @param string $slug file slug like you use in get_template_part without php extension.
* @param array $variables pass an array of variables you want to use in array keys.
*
* @codeCoverageIgnore Ignoring becuase not able to mock output for locate_template
*
* @return void
*/
function blank_theme_get_template_part( $slug, $variables = [] ) {
Expand Down
11 changes: 11 additions & 0 deletions phpcs.xml
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,7 @@
<property name="text_domain" type="array" value="blank-theme"/>
</properties>
</rule>


<!-- Allow for theme specific exceptions to the file name rules based
on the theme hierarchy. -->
Expand All @@ -53,6 +54,10 @@
<property name="is_theme" value="true"/>
</properties>
</rule>
<rule ref="WordPress">
<exclude name="WordPress.Files.FileName.NotHyphenatedLowercase" />
<exclude name="WordPress.Files.FileName.InvalidClassFileName" />
</rule>

<!-- Set the minimum supported WP version. This is used by several sniffs.
The minimum version set here should be in line with the minimum WP version
Expand Down Expand Up @@ -89,4 +94,10 @@
<config name="testVersion" value="5.6-"/>
<rule ref="PHPCompatibilityWP"/>

<rule ref="PHPCompatibility">
<exclude name="Generic.Arrays.DisallowShortArraySyntax.Found"/>
</rule>

<!-- Exclude from inspections -->
<exclude-pattern>tests/*</exclude-pattern>
</ruleset>
28 changes: 28 additions & 0 deletions phpunit.xml.dist
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
<?xml version="1.0"?>
<phpunit
bootstrap="tests/bootstrap.php"
backupGlobals="false"
colors="true"
convertErrorsToExceptions="true"
convertNoticesToExceptions="true"
convertWarningsToExceptions="true"
>
<testsuites>
<testsuite name="unit">
<directory prefix="test-" suffix=".php">./tests/</directory>
</testsuite>
</testsuites>
<filter>
<whitelist processUncoveredFilesFromWhitelist="true">
<directory suffix=".php">./inc/</directory>
<exclude>
<file>./inc/helpers/template-tags.php</file>
<file>./inc/helpers/autoloader.php</file>
<directory suffix=".php">./inc/traits</directory>
</exclude>
</whitelist>
</filter>
<logging>
<log type="coverage-text" target="php://stdout" showUncoveredFiles="true"/>
</logging>
</phpunit>
Loading