Compare commits

...

50 commits

Author SHA1 Message Date
574f770a65 fix phpcs
All checks were successful
PHP Code Checker / Run PHP Code Checker (pull_request) Successful in 43s
Unit Testing / Run phpunit tests (pull_request) Successful in 4m2s
2024-09-21 10:56:51 +02:00
53a6e267aa fix phpcs tests
Some checks failed
PHP Code Checker / Run PHP Code Checker (pull_request) Failing after 40s
Unit Testing / Run phpunit tests (pull_request) Successful in 3m54s
2024-09-21 10:28:39 +02:00
837d8b13b2 test
All checks were successful
Unit Testing / Run phpunit tests (pull_request) Successful in 4m1s
2024-09-21 09:55:25 +02:00
d4f8e1386d test
Some checks failed
Unit Testing / Run phpunit tests (pull_request) Has been cancelled
2024-09-21 09:53:13 +02:00
81f74fdafb test
All checks were successful
/ test (push) Successful in 1s
Unit Testing / Run phpunit tests (pull_request) Successful in 4m59s
2024-09-21 09:45:49 +02:00
83961dbb52 test
All checks were successful
/ test (push) Successful in 1s
Unit Testing / Run phpunit tests (pull_request) Successful in 4m25s
2024-09-21 09:40:30 +02:00
4fcfa97d0d test
All checks were successful
/ test (push) Successful in 1s
Unit Testing / Run phpunit tests (pull_request) Successful in 4m37s
2024-09-21 09:31:19 +02:00
7acce049e2 test
All checks were successful
/ test (push) Successful in 0s
Unit Testing / Run phpunit tests (pull_request) Successful in 4m41s
2024-09-21 09:21:47 +02:00
811c5a9ec8 test
All checks were successful
/ test (push) Successful in 1s
Unit Testing / Run phpunit tests (pull_request) Successful in 4m11s
2024-09-21 09:21:19 +02:00
b708494389 test
Some checks failed
/ test (push) Successful in 0s
Unit Testing / Run phpunit tests (pull_request) Failing after 4m13s
2024-09-21 09:13:38 +02:00
c300fa8c36 test
Some checks failed
/ test (push) Successful in 0s
Unit Testing / Run phpunit tests (pull_request) Failing after 4m30s
2024-09-21 09:07:27 +02:00
99040231ba test
Some checks failed
/ test (push) Successful in 1s
Unit Testing / Run phpunit tests (pull_request) Failing after 4m13s
2024-09-21 08:52:37 +02:00
67d7c8cf72 test
All checks were successful
/ test (push) Successful in 1s
Unit Testing / Run phpunit tests (pull_request) Successful in 4m14s
2024-09-21 08:44:46 +02:00
1ffd799d6b test
Some checks failed
/ test (push) Successful in 0s
Unit Testing / Run phpunit tests (pull_request) Failing after 4m0s
2024-09-21 08:34:57 +02:00
c1ec8997cc test
Some checks failed
/ test (push) Successful in 1s
Unit Testing / Run phpunit tests (pull_request) Failing after 4m38s
2024-09-21 08:26:57 +02:00
eed3f1897e test
Some checks failed
/ test (push) Successful in 1s
Unit Testing / Run phpunit tests (pull_request) Failing after 4m33s
2024-09-21 08:20:16 +02:00
8e8f4fc964 test
Some checks failed
/ test (push) Successful in 1s
Unit Testing / Run phpunit tests (pull_request) Failing after 4m16s
2024-09-21 08:14:52 +02:00
b6b766a059 test
Some checks failed
/ test (push) Successful in 0s
Unit Testing / Run phpunit tests (pull_request) Failing after 4m8s
2024-09-21 08:09:05 +02:00
97b62577ca test
Some checks failed
/ test (push) Successful in 1s
Unit Testing / Run phpunit tests (pull_request) Failing after 4m11s
2024-09-21 08:01:13 +02:00
13741a4e18 test
All checks were successful
/ test (push) Successful in 0s
Unit Testing / Run phpunit tests (pull_request) Successful in 4m15s
2024-09-21 07:50:33 +02:00
a084db60d1 test
Some checks failed
/ test (push) Successful in 0s
Unit Testing / Run phpunit tests (pull_request) Has been cancelled
2024-09-21 07:48:16 +02:00
0dba6d1127 test
Some checks failed
/ test (push) Successful in 0s
Unit Testing / Run phpunit tests (pull_request) Failing after 4m18s
2024-09-21 07:44:23 +02:00
aa6e816196 test
Some checks failed
/ test (push) Successful in 0s
Unit Testing / Run phpunit tests (pull_request) Failing after 4m23s
2024-09-21 07:36:54 +02:00
1dfbf0e293 test
Some checks failed
/ test (push) Successful in 1s
Unit Testing / Run phpunit tests (pull_request) Failing after 4m14s
2024-09-21 00:55:09 +02:00
337afe84fb test
Some checks failed
/ test (push) Successful in 1s
Unit Testing / Run phpunit tests (pull_request) Failing after 4m15s
2024-09-21 00:49:22 +02:00
f070a2d48d test
Some checks failed
/ test (push) Successful in 2s
Unit Testing / Run phpunit tests (pull_request) Failing after 4m13s
2024-09-21 00:41:02 +02:00
658b65adf1 test
Some checks failed
/ test (push) Successful in 2s
Unit Testing / Run phpunit tests (pull_request) Failing after 4m37s
2024-09-21 00:32:12 +02:00
c0dc94844a test
Some checks failed
/ test (push) Successful in 0s
Unit Testing / Run phpunit tests (pull_request) Failing after 4m56s
2024-09-20 22:52:14 +02:00
34d896d40d test
Some checks failed
/ test (push) Successful in 0s
Unit Testing / Run phpunit tests (pull_request) Failing after 4m29s
2024-09-20 22:38:41 +02:00
3313dfc7f3 test
Some checks failed
/ test (push) Successful in 0s
Unit Testing / Run phpunit tests (pull_request) Failing after 4m18s
2024-09-20 22:25:41 +02:00
5d8915abcc test
Some checks failed
/ test (push) Successful in 1s
Unit Testing / Run phpunit tests (pull_request) Failing after 8m57s
2024-09-20 22:12:42 +02:00
eb16b3173e test
Some checks failed
/ test (push) Successful in 0s
Unit Testing / Run phpunit tests (pull_request) Failing after 9m2s
2024-09-20 21:55:36 +02:00
8834129a0b test
Some checks failed
/ test (push) Successful in 1s
Unit Testing / Run phpunit tests (pull_request) Failing after 9m27s
2024-09-20 21:42:21 +02:00
b478bb51a4 test
Some checks failed
/ test (push) Successful in 1s
Unit Testing / Run phpunit tests (pull_request) Failing after 3m58s
2024-09-20 21:32:12 +02:00
20d965ba27 test
Some checks failed
/ test (push) Waiting to run
Unit Testing / Run phpunit tests (pull_request) Has been cancelled
2024-09-20 21:30:10 +02:00
65bdac1b71 test
Some checks failed
/ test (push) Successful in 1s
Unit Testing / Run phpunit tests (pull_request) Has been cancelled
2024-09-20 21:27:40 +02:00
15b678243d test
Some checks failed
/ test (push) Waiting to run
Unit Testing / Run phpunit tests (pull_request) Has been cancelled
2024-09-20 21:09:16 +02:00
9230f40f13 test
Some checks failed
/ test (push) Waiting to run
Unit Testing / Run phpunit tests (pull_request) Has been cancelled
2024-09-20 21:08:12 +02:00
4aaa8d87cd test
Some checks failed
/ test (push) Successful in 1s
Unit Testing / Run phpunit tests (pull_request) Has been cancelled
2024-09-20 21:03:22 +02:00
69108e3f26 test
Some checks failed
/ test (push) Successful in 0s
Unit Testing / phpunit (8.1) (pull_request) Failing after 4m3s
Unit Testing / phpunit (latest) (pull_request) Failing after 3m53s
2024-09-20 20:58:46 +02:00
658bd62af0 test
Some checks failed
/ test (push) Successful in 1s
Unit Testing / phpunit (8.1) (pull_request) Failing after 3m54s
Unit Testing / phpunit (latest) (pull_request) Failing after 4m4s
2024-09-20 20:51:02 +02:00
a8f06441bd update workflow
Some checks failed
/ test (push) Successful in 0s
Unit Testing / phpunit (8.1) (pull_request) Failing after 4m6s
Unit Testing / phpunit (latest) (pull_request) Failing after 4m3s
2024-09-20 20:36:39 +02:00
543f8a38f6 only test php 8.1 for now
Some checks failed
/ test (push) Successful in 1s
Unit Testing / phpunit (8.1) (pull_request) Has been cancelled
Unit Testing / phpunit (latest) (pull_request) Has been cancelled
Unit Testing / phpunit (latest) (push) Has been cancelled
Unit Testing / phpunit (8.1) (push) Has been cancelled
2024-09-20 20:35:52 +02:00
4ed94f5d60 update phpunit workflow 2024-09-20 20:35:00 +02:00
3d689713ad add more test files 2024-09-20 20:34:47 +02:00
20a05678ba test phpunit workflow
Some checks failed
/ test (push) Successful in 1s
Unit Testing / phpunit (8.1) (push) Successful in 3m27s
Unit Testing / phpunit (8.1) (pull_request) Has been cancelled
Unit Testing / phpunit (8.2) (pull_request) Has been cancelled
Unit Testing / phpunit (8.3) (pull_request) Has been cancelled
Unit Testing / phpunit (latest) (pull_request) Has been cancelled
Unit Testing / phpunit (8.3) (push) Has been cancelled
Unit Testing / phpunit (latest) (push) Has been cancelled
Unit Testing / phpunit (8.2) (push) Has been cancelled
2024-09-20 20:29:31 +02:00
92321bb9f0 fix phpunit test
All checks were successful
/ test (push) Successful in 1s
Unit Testing / phpunit (8.1) (push) Successful in 5s
Unit Testing / phpunit (8.2) (push) Successful in 2s
Unit Testing / phpunit (8.3) (push) Successful in 2s
Unit Testing / phpunit (latest) (push) Successful in 2s
Unit Testing / phpunit (8.1) (pull_request) Successful in 3s
Unit Testing / phpunit (8.2) (pull_request) Successful in 2s
Unit Testing / phpunit (8.3) (pull_request) Successful in 2s
Unit Testing / phpunit (latest) (pull_request) Successful in 3s
2024-09-20 20:28:22 +02:00
626c4d5ffc test runner
Some checks failed
/ test (push) Successful in 1s
Unit Testing / phpunit (push) Failing after 10s
Unit Testing / phpunit (pull_request) Failing after 0s
2024-09-20 20:20:06 +02:00
b0f01cfaf5 fix test
Some checks failed
/ test (push) Successful in 1s
Unit Testing / phpunit (push) Failing after 0s
Unit Testing / phpunit (pull_request) Failing after 0s
2024-09-20 20:18:57 +02:00
161e4fced4 test 2024-09-20 19:22:25 +02:00
18 changed files with 569 additions and 61 deletions

View file

@ -1,6 +0,0 @@
on: [push]
jobs:
test:
runs-on: ubuntu-latest
steps:
- run: echo All Good

41
.forgejo/workflows/phpcs.yml Executable file
View file

@ -0,0 +1,41 @@
name: PHP Code Checker
on:
push:
branches:
- main
pull_request:
jobs:
phpcs:
runs-on: ubuntu-latest
services:
mysql:
image: mariadb
env:
MYSQL_ROOT_PASSWORD: root
strategy:
matrix:
php-versions: ['8.1']
name: Run PHP Code Checker
env:
extensions: mysql
key: cache-v1
steps:
- name: Checkout
uses: https://code.forgejo.org/actions/checkout@v4
- name: Setup PHP
uses: https://github.com/shivammathur/setup-php@v2
with:
php-version: ${{ matrix.php-versions }}
coverage: none
tools: composer, cs2pr
env:
runner: self-hosted
- name: Install Composer dependencies for PHP
uses: ramsey/composer-install@v3
- name: Detect coding standard violations
run: ./vendor/bin/phpcs

View file

@ -1,42 +1,52 @@
name: Unit Testing name: Unit Testing
on: on:
push: push:
branches:
- main
pull_request: pull_request:
env:
WP_TESTS_DIR: /workspace/wordpress-test-lib
WP_CORE_DIR: /workspace/wordpress
jobs: jobs:
phpunit: phpunit:
runs-on: ubuntu-latest runs-on: ubuntu-latest
services: services:
mysql: mysql:
image: mariadb:11.5 image: mariadb
env: env:
MYSQL_ROOT_PASSWORD: root MYSQL_ROOT_PASSWORD: root
ports: strategy:
- 3306:3306 matrix:
options: --health-cmd="mysqladmin ping" --health-interval=10s --health-timeout=10s --health-retries=10 php-versions: ['8.1']
strategy: name: Run phpunit tests
matrix: env:
php-versions: ['8.1', '8.2', '8.3'] extensions: mysql
include: key: cache-v1
- wp-version: latest
steps: steps:
- name: Checkout - name: Checkout
uses: https://code.forgejo.org/actions/checkout@v4 uses: https://code.forgejo.org/actions/checkout@v4
# - name: Setup PHP - name: Setup PHP
# uses: shivammathur/setup-php@v2 uses: https://github.com/shivammathur/setup-php@v2
# with: with:
# php-version: ${{ matrix.php-versions }} php-version: ${{ matrix.php-versions }}
# coverage: none coverage: none
# tools: composer, phpunit-polyfills tools: composer, phpunit-polyfills
# extensions: mysql env:
runner: self-hosted
# - name: Install Composer dependencies for PHP - name: Install Composer dependencies for PHP
# uses: "ramsey/composer-install@v1" uses: ramsey/composer-install@v3
# - name: Setup Test Environment - name: Install mysqladmin
# run: bash bin/install-wp-tests.sh wordpress_test root root 127.0.0.1 ${{ matrix.wp-version }} run: sudo apt update && sudo apt -y upgrade && sudo apt -y install mysql-client
# - name: Unit Testing - name: Setup Test Environment
# run: ./vendor/bin/phpunit run: bash bin/install-wp-tests.sh wordpress_test root root 127.0.0.1 6.6
# env:
# PHP_VERSION: ${{ matrix.php-versions }} - name: Unit Testing
run: cd /workspace/Event-Federation/wordpress-activitypub-event-extensions/ && phpunit
env:
PHP_VERSION: ${{ matrix.php-versions }}

157
.phpcs.xml.dist Normal file
View file

@ -0,0 +1,157 @@
<?xml version="1.0"?>
<ruleset xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" name="Example Project" xsi:noNamespaceSchemaLocation="https://raw.githubusercontent.com/PHPCSStandards/PHP_CodeSniffer/master/phpcs.xsd">
<description>A custom set of rules to check for a WPized WordPress project</description>
<!--
#############################################################################
COMMAND LINE ARGUMENTS
https://github.com/PHPCSStandards/PHP_CodeSniffer/wiki/Annotated-Ruleset
#############################################################################
-->
<file>.</file>
<!-- Exclude WP Core folders and files from being checked. -->
<exclude-pattern>/docroot/wp-admin/*</exclude-pattern>
<exclude-pattern>/docroot/wp-includes/*</exclude-pattern>
<exclude-pattern>/docroot/wp-*.php</exclude-pattern>
<exclude-pattern>/docroot/index.php</exclude-pattern>
<exclude-pattern>/docroot/xmlrpc.php</exclude-pattern>
<exclude-pattern>/docroot/wp-content/plugins/*</exclude-pattern>
<!-- Exclude the Composer Vendor directory. -->
<exclude-pattern>/vendor/*</exclude-pattern>
<!-- Exclude the Node Modules directory. -->
<exclude-pattern>/node_modules/*</exclude-pattern>
<!-- Exclude minified Javascript files. -->
<exclude-pattern>*.min.js</exclude-pattern>
<!-- Strip the filepaths down to the relevant bit. -->
<arg name="basepath" value="."/>
<!-- Check up to 8 files simultaneously. -->
<arg name="parallel" value="8"/>
<!--
#############################################################################
SET UP THE RULESETS
#############################################################################
-->
<!-- Include the WordPress-Extra standard. -->
<rule ref="WordPress-Extra">
<!--
We may want a middle ground though. The best way to do this is add the
entire ruleset, then rule by rule, remove ones that don't suit a project.
We can do this by running `phpcs` with the '-s' flag, which allows us to
see the names of the sniffs reporting errors.
Once we know the sniff names, we can opt to exclude sniffs which don't
suit our project like so.
The below two examples just show how you can exclude rules/error codes.
They are not intended as advice about which sniffs to exclude.
-->
<!--
<exclude name="WordPress.WhiteSpace.ControlStructureSpacing"/>
<exclude name="Modernize.FunctionCalls.Dirname.Nested"/>
-->
</rule>
<!-- Let's also check that everything is properly documented. -->
<rule ref="WordPress-Docs"/>
<!-- Add in some extra rules from other standards. -->
<rule ref="Generic.Commenting.Todo"/>
<!-- Check for PHP cross-version compatibility. -->
<!--
To enable this, the PHPCompatibilityWP standard needs
to be installed.
See the readme for installation instructions:
https://github.com/PHPCompatibility/PHPCompatibilityWP
For more information, also see:
https://github.com/PHPCompatibility/PHPCompatibility
-->
<!--
<config name="testVersion" value="5.6-"/>
<rule ref="PHPCompatibilityWP">
<include-pattern>*\.php</include-pattern>
</rule>
-->
<!--
#############################################################################
SNIFF SPECIFIC CONFIGURATION
#############################################################################
-->
<!--
To get the optimal benefits of using WordPressCS, we should add a couple of
custom properties.
Adjust the values of these properties to fit our needs.
For information on additional custom properties available, check out
the wiki:
https://github.com/WordPress/WordPress-Coding-Standards/wiki/Customizable-sniff-properties
-->
<config name="minimum_wp_version" value="6.6"/>
<rule ref="WordPress.WP.I18n">
<properties>
<property name="text_domain" type="array">
<element value="activitypub-event-extensions"/>
<element value="activitypub"/>
</property>
</properties>
</rule>
<rule ref="WordPress.NamingConventions.PrefixAllGlobals">
<properties>
<property name="prefixes" type="array">
<element value="ACTIVITYPUB_EVENT_EXTENSIONS"/>
</property>
</properties>
</rule>
<!--
#############################################################################
SELECTIVE EXCLUSIONS
Exclude specific files for specific sniffs and/or exclude sub-groups in sniffs.
#############################################################################
-->
<!--
Sometimes, you may want to exclude a certain directory, like your tests,
for select sniffs.
The below examples demonstrate how to do this.
In the example, the `GlobalVariablesOverride` rule is excluded for test files
as it is sometimes necessary to overwrite WP globals in test situations (just
don't forget to restore them after the test!).
Along the same lines, PHPUnit is getting stricter about using PSR-4 file names,
so excluding test files from the `WordPress.Files.Filename` sniff can be a
legitimate exclusion.
For more information on ruleset configuration options, check out the PHPCS wiki:
https://github.com/PHPCSStandards/PHP_CodeSniffer/wiki/Annotated-Ruleset
-->
<rule ref="WordPress.NamingConventions.PrefixAllGlobals">
<exclude-pattern>tests/*.php</exclude-pattern>
<exclude-pattern>templates/*.php</exclude-pattern>
</rule>
<rule ref="WordPress.WP.GlobalVariablesOverride">
<exclude-pattern>tests/*.php</exclude-pattern>
</rule>
<rule ref="WordPress.Files.FileName">
<exclude-pattern>tests/*.php</exclude-pattern>
</rule>
</ruleset>

19
.woodpecker/test.yml Normal file
View file

@ -0,0 +1,19 @@
when:
- event: push
branch: woodpecker
steps:
- name: build
image: php:8.3
environment:
WP_TESTS_PHPUNIT_POLYFILLS_PATH: vendor/yoast/phpunit-polyfills
commands:
- apt -y update
- apt -y install libonig-dev
- docker-php-ext-install mbstring mysqli pdo_mysql intl gd zip bz2
- docker-php-ext-enable mbstring mysqli pdo_mysql intl gd zip bz2
- composer require --dev yoast/phpunit-polyfills:"^3.0"
- composer install
- bash bin/install-wp-tests.sh wordpress_tests root mysql mysql 6.6 true
- phpunit --configuration phpunit.xml.dist

View file

@ -35,27 +35,23 @@ Activitypub_Event_Extensions\Autoloader::register();
// Initialize the plugin. // Initialize the plugin.
Activitypub_Event_Extensions\Setup::get_instance(); Activitypub_Event_Extensions\Setup::get_instance();
// For local development purposes: TODO. Remove everything after here. // BeforeFirstRelease: Remove everything after this after here.
/** /**
* Add a filter for http_request_host_is_external * Add a filter for http_request_host_is_external
* *
* TODO: Remove this for release. * BeforeFirstRelease: Remove this for release.
*
* @todo This filter is temporary code needed to do local testing.
*/ */
add_filter( 'http_request_host_is_external', 'custom_http_request_host_is_external', 10, 3 ); add_filter( 'http_request_host_is_external', 'activitypub_event_extensions_custom_http_request_host_is_external', 10, 3 );
/** /**
* Add a filter for http_request_host_is_external * Add a filter for http_request_host_is_external
* *
* TODO: Remove this for release. * BeforeFirstRelease: Remove this for release.
* *
* @param bool $is_external Whether the request is external. * @param bool $is_external Whether the request is external.
*
* @todo This filter is temporary code needed to do local testing.
*/ */
function custom_http_request_host_is_external( $is_external ) { function activitypub_event_extensions_custom_http_request_host_is_external( $is_external ) {
$is_external = true; $is_external = true;
return $is_external; return $is_external;
@ -64,15 +60,13 @@ function custom_http_request_host_is_external( $is_external ) {
/** /**
* Don't verify ssl certs for testing. * Don't verify ssl certs for testing.
* *
* TODO: Remove this for release. * BeforeFirstRelease: Remove this for release.
*
* @todo This filter is temporary code needed to do local testing.
*/ */
add_filter( 'https_ssl_verify', 'dont_verify_local_dev_https', 10, 3 ); add_filter( 'https_ssl_verify', 'activitypub_event_extensions_dont_verify_local_dev_https', 10, 3 );
/** /**
* TODO: remove it. * BeforeFirstRelease: remove it.
*/ */
function dont_verify_local_dev_https() { function activitypub_event_extensions_dont_verify_local_dev_https() {
return false; return false;
} }

188
bin/install-wp-tests.sh Normal file
View file

@ -0,0 +1,188 @@
#!/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() {
rm -rf $WP_CORE_DIR
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-trunk
rm -rf $TMPDIR/wordpress-trunk/*
svn export --quiet https://core.svn.wordpress.org/trunk $TMPDIR/wordpress-trunk/wordpress
mv $TMPDIR/wordpress-trunk/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.githubusercontent.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
rm -rf $WP_TESTS_DIR/{includes,data}
svn export --quiet --ignore-externals https://develop.svn.wordpress.org/${WP_TESTS_TAG}/tests/phpunit/includes/ $WP_TESTS_DIR/includes
svn export --quiet --ignore-externals 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:__DIR__ . '/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
}
recreate_db() {
shopt -s nocasematch
if [[ $1 =~ ^(y|yes)$ ]]
then
mysqladmin drop $DB_NAME -f --user="$DB_USER" --password="$DB_PASS"$EXTRA
create_db
echo "Recreated the database ($DB_NAME)."
else
echo "Leaving the existing database ($DB_NAME) in place."
fi
shopt -u nocasematch
}
create_db() {
mysqladmin create $DB_NAME --user="$DB_USER" --password="$DB_PASS"$EXTRA
}
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
if [ $(mysql --user="$DB_USER" --password="$DB_PASS"$EXTRA --execute='show databases;' | grep ^$DB_NAME$) ]
then
echo "Reinstalling will delete the existing test database ($DB_NAME)"
read -p 'Are you sure you want to proceed? [y/N]: ' DELETE_EXISTING_DB
recreate_db $DELETE_EXISTING_DB
else
create_db
fi
}
install_wp_plugins() {
download https://downloads.wordpress.org/plugin/activitypub.3.2.5.zip $TMPDIR/activitypub.zip
unzip $TMPDIR/activitypub.zip -d $WP_CORE_DIR/wp-content/plugins/
}
install_wp
install_wp_plugins
install_test_suite
install_db

26
docker-compose-test.yml Normal file
View file

@ -0,0 +1,26 @@
version: '3'
services:
test-db:
platform: linux/x86_64
image: mariadb
environment:
MYSQL_DATABASE: wordpress
MYSQL_ROOT_PASSWORD: wordpress
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:3306"]
interval: 5s
timeout: 2s
retries: 5
test-php:
build:
context: .
dockerfile: Dockerfile
depends_on:
test-db:
condition: service_healthy
links:
- test-db
volumes:
- .:/app
command: ["composer", "run-script", "test"]

View file

@ -6,7 +6,11 @@
* @license AGPL-3.0-or-later * @license AGPL-3.0-or-later
*/ */
namespace Activitypub_Event_Extensions\Activitypub\Transformer;
use Activitypub_Event_Extensions\Activitypub\Transformer\Event as Event_Transformer; use Activitypub_Event_Extensions\Activitypub\Transformer\Event as Event_Transformer;
use DateTime;
use DateTimeZone;
use EM_Event; use EM_Event;
use Activitypub\Activity\Extended_Object\Event; use Activitypub\Activity\Extended_Object\Event;
use Activitypub\Activity\Extended_Object\Place; use Activitypub\Activity\Extended_Object\Place;
@ -151,7 +155,7 @@ final class Events_Manager extends Event_Transformer {
/** /**
* Return the remaining attendee capacity * Return the remaining attendee capacity
* *
* @todo decide whether to include pending bookings or not! * @return int
*/ */
public function get_remaining_attendee_capacity() { public function get_remaining_attendee_capacity() {
$em_bookings = $this->em_event->get_bookings()->get_bookings(); $em_bookings = $this->em_event->get_bookings()->get_bookings();
@ -164,7 +168,7 @@ final class Events_Manager extends Event_Transformer {
* *
* @return int * @return int
*/ */
public function get_participant_count() { public function get_participant_count(): int {
$em_bookings = $this->em_event->get_bookings()->get_bookings(); $em_bookings = $this->em_event->get_bookings()->get_bookings();
return count( $em_bookings->bookings ); return count( $em_bookings->bookings );
} }

View file

@ -6,6 +6,8 @@
* @license AGPL-3.0-or-later * @license AGPL-3.0-or-later
*/ */
namespace Activitypub_Event_Extensions\Activitypub\Transformer;
use Activitypub_Event_Extensions\Activitypub\Transformer\Event; use Activitypub_Event_Extensions\Activitypub\Transformer\Event;
use Activitypub\Model\Blog; use Activitypub\Model\Blog;
use Activitypub\Activity\Extended_Object\Event as Event_Object; use Activitypub\Activity\Extended_Object\Event as Event_Object;

View file

@ -51,8 +51,6 @@ final class The_Events_Calendar extends Event {
* @return string|null tribe category if it exists * @return string|null tribe category if it exists
*/ */
public function get_tribe_category() { public function get_tribe_category() {
// TODO: make it possible that one event can have multiple categories?
// Using cat_slugs isn't the best way to do this, don't know if it's a good idea.
$categories = tribe_get_event_cat_slugs( $this->wp_object->ID ); $categories = tribe_get_event_cat_slugs( $this->wp_object->ID );
if ( count( $categories ) === 0 ) { if ( count( $categories ) === 0 ) {
@ -133,12 +131,10 @@ final class The_Events_Calendar extends Event {
protected function get_content() { protected function get_content() {
$content = parent::get_content(); $content = parent::get_content();
// TODO: remove link at the end of the content. // /BeforeFirstRelease:
// * remove link at the end of the content.
// TODO: add organizer // * add organizer.
// $this->tribe_event->organizers[0]. // * do add Cancelled reason in the content.s
// TODO: do add Cancelled reason in the content (maybe at the end).
return $content; return $content;
} }

View file

@ -37,7 +37,7 @@ class Settings_Page {
public static function admin_menu(): void { public static function admin_menu(): void {
\add_options_page( \add_options_page(
'Activitypub Event Extension', 'Activitypub Event Extension',
__( 'ActivityPub Events', 'activitypub_event_extensions' ), __( 'ActivityPub Events', 'activitypub-event-extensions' ),
'manage_options', 'manage_options',
self::SETTINGS_SLUG, self::SETTINGS_SLUG,
array( self::STATIC, 'settings_page' ) array( self::STATIC, 'settings_page' )

View file

@ -60,7 +60,7 @@ class Setup {
*/ */
protected function __construct() { protected function __construct() {
$this->activitypub_plugin_is_active = is_plugin_active( 'activitypub/activitypub.php' ); $this->activitypub_plugin_is_active = is_plugin_active( 'activitypub/activitypub.php' );
// TODO: decide whether we want to do anything at all when ActivityPub plugin is note active. // BeforeFirstRelease: decide whether we want to do anything at all when ActivityPub plugin is note active.
// if ( ! $this->activitypub_plugin_is_active ) { // if ( ! $this->activitypub_plugin_is_active ) {
// deactivate_plugins( ACTIVITYPUB_EVENT_EXTENSIONS_PLUGIN_FILE ); // deactivate_plugins( ACTIVITYPUB_EVENT_EXTENSIONS_PLUGIN_FILE );
// return; // return;

View file

@ -46,8 +46,12 @@ final class The_Events_Calendar extends Event_plugin {
* @return string The settings page url. * @return string The settings page url.
*/ */
public static function get_settings_page(): string { public static function get_settings_page(): string {
// TODO: Tribe\Events\Admin\Settings::settings_page_id. if ( class_exists( '\Tribe\Events\Admin\Settings' ) ) {
return 'edit.php?post_type=tribe_events&page=tec-events-settings'; $page = \Tribe\Events\Admin\Settings::$settings_page_id;
} else {
$page = 'tec-events-settings';
}
return sprintf( 'edit.php?post_type=tribe_events&page=%s', $page );
} }
/** /**

15
phpunit.xml Normal file
View file

@ -0,0 +1,15 @@
<?xml version="1.0"?>
<phpunit
bootstrap="tests/bootstrap.php"
backupGlobals="false"
colors="true"
convertErrorsToExceptions="true"
convertNoticesToExceptions="true"
convertWarningsToExceptions="true"
>
<testsuites>
<testsuite name="testing">
<directory prefix="test-" suffix=".php">./tests/</directory>
</testsuite>
</testsuites>
</phpunit>

View file

@ -76,7 +76,7 @@ $current_category_mapping = \get_option( 'activitypub_event_extensions_ev
<div class="box"> <div class="box">
<h2> <?php esc_html_e( 'Default ActivityPub Event Category', 'activitypub-event-extensions' ); ?> </h2> <h2> <?php esc_html_e( 'Default ActivityPub Event Category', 'activitypub-event-extensions' ); ?> </h2>
<p> <?php esc_html_e( 'To help visitors find events more easily, the community created a set of basic event categories. Please select the category that best matches the majority of the events you organize.' ); ?> </p> <p> <?php esc_html_e( 'To help visitors find events more easily, the community created a set of basic event categories. Please select the category that best matches the majority of the events you organize.', 'activitypub-event-extensions' ); ?> </p>
<table class="form-table"> <table class="form-table">
<tr> <tr>
<th scope="row"> <?php esc_html_e( 'Default Category', 'activitypub-event-extensions' ); ?> </th> <th scope="row"> <?php esc_html_e( 'Default Category', 'activitypub-event-extensions' ); ?> </th>
@ -96,7 +96,7 @@ $current_category_mapping = \get_option( 'activitypub_event_extensions_ev
<?php if ( ! empty( $event_terms ) ) : ?> <?php if ( ! empty( $event_terms ) ) : ?>
<div class="box"> <div class="box">
<h2> <?php esc_html_e( 'Advanced Event Category Settings', 'activitypub-event-extensions' ); ?> </h2> <h2> <?php esc_html_e( 'Advanced Event Category Settings', 'activitypub-event-extensions' ); ?> </h2>
<p> <?php esc_html_e( 'Take more control by adjusting how your event categories are mapped to the basic category set used in ActivityPub. This option lets you override the default selection above, ensuring more accurate categorization and better visibility for your events.' ); ?> </p> <p> <?php esc_html_e( 'Take more control by adjusting how your event categories are mapped to the basic category set used in ActivityPub. This option lets you override the default selection above, ensuring more accurate categorization and better visibility for your events.', 'activitypub-event-extensions' ); ?> </p>
<table class="form-table"> <table class="form-table">
<?php foreach ( $event_terms as $event_term ) { ?> <?php foreach ( $event_terms as $event_term ) { ?>
<tr> <tr>

38
tests/bootstrap.php Executable file
View file

@ -0,0 +1,38 @@
<?php
/**
* PHPUnit bootstrap file.
*
* @package Activitypub_Event_Extensions
*/
$_tests_dir = getenv( 'WP_TESTS_DIR' );
if ( ! $_tests_dir ) {
$_tests_dir = rtrim( sys_get_temp_dir(), '/\\' ) . '/wordpress-tests-lib';
}
// Forward custom PHPUnit Polyfills configuration to PHPUnit bootstrap file.
$_phpunit_polyfills_path = getenv( 'WP_TESTS_PHPUNIT_POLYFILLS_PATH' );
if ( false !== $_phpunit_polyfills_path ) {
define( 'WP_TESTS_PHPUNIT_POLYFILLS_PATH', $_phpunit_polyfills_path );
}
if ( ! file_exists( "{$_tests_dir}/includes/functions.php" ) ) {
echo "Could not find {$_tests_dir}/includes/functions.php, have you run bin/install-wp-tests.sh ?" . PHP_EOL; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
exit( 1 );
}
// Give access to tests_add_filter() function.
require_once "{$_tests_dir}/includes/functions.php";
/**
* Manually load the plugin being tested.
*/
function _manually_load_plugin() {
require dirname( __DIR__ ) . '/activitypub-event-extensions.php';
}
tests_add_filter( 'muplugins_loaded', '_manually_load_plugin' );
// Start up the WP testing environment.
require "{$_tests_dir}/includes/bootstrap.php";

View file

@ -0,0 +1,20 @@
<?php
/**
* Class SampleTest
*
* @package Activitypub_Event_Extensions
*/
/**
* Sample test case.
*/
class Test_Sample extends WP_UnitTestCase {
/**
* A single example test.
*/
public function test_sample() {
// Replace this with some actual testing code.
$this->assertTrue( true );
}
}