diff --git a/.github/workflows/trigger-bedrock-updates.yml b/.github/workflows/tests.yml similarity index 56% rename from .github/workflows/trigger-bedrock-updates.yml rename to .github/workflows/tests.yml index 38b2bb6..bf06891 100644 --- a/.github/workflows/trigger-bedrock-updates.yml +++ b/.github/workflows/tests.yml @@ -1,14 +1,28 @@ -name: Trigger Bedrock Updates ๐Ÿš€ +name: Run Tests ๐Ÿงช on: push: - branches: [ dev ] + branches: + - dev + pull_request: + branches: + - dev + workflow_dispatch: jobs: + plugin-tests: + uses: pressbooks/reusable-workflows/.github/workflows/pb-plugin-tests.yml@test-tag-release + secrets: inherit + with: + requires_pressbooks: true + use_mariadb: true + requires_private_repo: 'pressbooks-lti-provider-1p3' trigger_bedrock_updates: + needs: plugin-tests runs-on: ubuntu-latest steps: - name: Trigger Bedrock Updates + if: github.ref == 'refs/heads/dev' uses: pressbooks/composer-autoupdate-bedrock@chore/add-tag-in-sns-message env: AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} @@ -17,3 +31,5 @@ jobs: AWS_SNS_ARN_STAGING: ${{ secrets.AWS_SNS_ARN_STAGING }} INPUT_TRIGGERED_BY: ${{ github.repository }} REF: ${{ github.ref }} + + diff --git a/.github/workflows/update-pot.yml b/.github/workflows/update-pot.yml index 9014e03..3172474 100644 --- a/.github/workflows/update-pot.yml +++ b/.github/workflows/update-pot.yml @@ -1,4 +1,4 @@ -name: Update POT file +name: Update .pot file on: push: @@ -10,26 +10,11 @@ on: workflow_dispatch: jobs: - update-pot: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - with: - token: ${{ secrets.PAT_FOR_GITHUB_ACTIONS }} - - name: Setup PHP with tools - uses: shivammathur/setup-php@v2 - with: - php-version: '8.1' - tools: composer, wp-cli/wp-cli-bundle - - name: Update POT file - run: wp i18n make-pot . languages/fake-plugin.pot --domain=pressbooks-fake-plugin --slug=fake-plugin --package-name="Fake Plugin" --headers="{\"Report-Msgid-Bugs-To\":\"https://github.com/pressbooks/pressbooks/issues\"}" - - name: Create Pull Request for POT file - id: cprpot - uses: peter-evans/create-pull-request@v6 - with: - token: ${{ secrets.PAT_FOR_GITHUB_ACTIONS }} - labels: automerge-pot - commit-message: 'chore(l10n): update pot file' - title: 'chore(l10n): update pot file' - body: 'Update the POT file for this plugin.' - branch: chore/update-pot-file + update-pot-file: + uses: pressbooks/reusable-workflows/.github/workflows/update-pot.yml@test-tag-release + secrets: inherit + with: + domain: 'pressbooks-fake-plugin' + slug: 'pressbooks-fake-plugin' + package_name: 'Pressbooks Fake Plugin' + headers: '{"Report-Msgid-Bugs-To": "https://github.com/pressbooks/fake-plugin/issues"}' diff --git a/bin/install-wp-tests.sh b/bin/install-wp-tests.sh new file mode 100755 index 0000000..9e8749e --- /dev/null +++ b/bin/install-wp-tests.sh @@ -0,0 +1,125 @@ +#!/usr/bin/env bash + +if [ $# -lt 3 ]; then + echo "usage: $0 [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} + +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 + 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 diff --git a/composer.json b/composer.json index 15e2da4..f132502 100644 --- a/composer.json +++ b/composer.json @@ -1,23 +1,46 @@ { - "name": "pressbooks/fake-plugin", - "description": "Fake plugin", - "type": "library", - "autoload": { - "psr-4": { - "Pressbooks\\FakePlugin\\": "src/" - } - }, - "authors": [ - { - "name": "arzola", - "email": "oscararzola@gmail.com" - }, - { - "name": "ho-man-chan", - "email": "homan98@gmail.com" - } - ], - "require": { - "ext-gettext": "*" - } + "name": "pressbooks/fake-plugin", + "description": "Fake plugin", + "type": "library", + "autoload": { + "psr-4": { + "Pressbooks\\FakePlugin\\": "src/" + } + }, + "autoload-dev": { + "psr-4": { + "Tests\\": "tests/" + } + }, + "authors": [ + { + "name": "arzola", + "email": "oscararzola@gmail.com" + }, + { + "name": "ho-man-chan", + "email": "homan98@gmail.com" + } + ], + "require": { + "ext-gettext": "*" + }, + "scripts": { + "fix": [ + "vendor/bin/pint" + ], + "standards": [ + "vendor/bin/pint --test" + ], + "test": [ + "vendor/bin/phpunit --configuration phpunit.xml" + ], + "test-coverage": [ + "vendor/bin/phpunit --configuration phpunit.xml --coverage-clover coverage.xml --coverage-html=./coverage-reports" + ] + }, + "require-dev": { + "laravel/pint": "^1.15", + "yoast/phpunit-polyfills": "^1.0.5" + } } diff --git a/composer.lock b/composer.lock deleted file mode 100644 index 338e7df..0000000 --- a/composer.lock +++ /dev/null @@ -1,18 +0,0 @@ -{ - "_readme": [ - "This file locks the dependencies of your project to a known state", - "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", - "This file is @generated automatically" - ], - "content-hash": "a16c4b9088dec21ec014ec65ff2ddaa3", - "packages": [], - "packages-dev": [], - "aliases": [], - "minimum-stability": "stable", - "stability-flags": [], - "prefer-stable": false, - "prefer-lowest": false, - "platform": [], - "platform-dev": [], - "plugin-api-version": "2.0.0" -} diff --git a/phpunit.xml b/phpunit.xml new file mode 100644 index 0000000..546e9fc --- /dev/null +++ b/phpunit.xml @@ -0,0 +1,25 @@ + + + + + ./src + + + + + ./tests/ + + + + + + diff --git a/pint.json b/pint.json new file mode 100644 index 0000000..5ace327 --- /dev/null +++ b/pint.json @@ -0,0 +1,13 @@ +{ + "preset": "psr12", + "rules": { + "simplified_null_return": true, + "new_with_braces": { + "anonymous_class": false, + "named_class": false + } + }, + "exclude": [ + "wp-content" + ] +} diff --git a/src/App.php b/src/App.php index c971924..5c11a75 100644 --- a/src/App.php +++ b/src/App.php @@ -14,7 +14,7 @@ public function __toString() return __('Hello, world!', 'pressbooks-fake-plugin'); } - public function hi() + public function hi() { return __('Hello, bye!', 'pressbooks-fake-plugin'); } diff --git a/src/compatibility.php b/src/compatibility.php index dafcf24..ee933cd 100644 --- a/src/compatibility.php +++ b/src/compatibility.php @@ -2,4 +2,4 @@ // x-release-please-start-version const pluginVersion = '1.8.1'; -// x-release-please-end \ No newline at end of file +// x-release-please-end diff --git a/tests/FakeTest.php b/tests/FakeTest.php new file mode 100644 index 0000000..17ef774 --- /dev/null +++ b/tests/FakeTest.php @@ -0,0 +1,13 @@ +assertTrue(true); + } +} diff --git a/tests/bootstrap.php b/tests/bootstrap.php new file mode 100644 index 0000000..9c3fb9f --- /dev/null +++ b/tests/bootstrap.php @@ -0,0 +1,12 @@ +