Compare commits
50 commits
main
...
forgejo_ru
Author | SHA1 | Date | |
---|---|---|---|
574f770a65 | |||
53a6e267aa | |||
837d8b13b2 | |||
d4f8e1386d | |||
81f74fdafb | |||
83961dbb52 | |||
4fcfa97d0d | |||
7acce049e2 | |||
811c5a9ec8 | |||
b708494389 | |||
c300fa8c36 | |||
99040231ba | |||
67d7c8cf72 | |||
1ffd799d6b | |||
c1ec8997cc | |||
eed3f1897e | |||
8e8f4fc964 | |||
b6b766a059 | |||
97b62577ca | |||
13741a4e18 | |||
a084db60d1 | |||
0dba6d1127 | |||
aa6e816196 | |||
1dfbf0e293 | |||
337afe84fb | |||
f070a2d48d | |||
658b65adf1 | |||
c0dc94844a | |||
34d896d40d | |||
3313dfc7f3 | |||
5d8915abcc | |||
eb16b3173e | |||
8834129a0b | |||
b478bb51a4 | |||
20d965ba27 | |||
65bdac1b71 | |||
15b678243d | |||
9230f40f13 | |||
4aaa8d87cd | |||
69108e3f26 | |||
658bd62af0 | |||
a8f06441bd | |||
543f8a38f6 | |||
4ed94f5d60 | |||
3d689713ad | |||
20a05678ba | |||
92321bb9f0 | |||
626c4d5ffc | |||
b0f01cfaf5 | |||
161e4fced4 |
18 changed files with 569 additions and 61 deletions
|
@ -1,6 +0,0 @@
|
||||||
on: [push]
|
|
||||||
jobs:
|
|
||||||
test:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- run: echo All Good
|
|
41
.forgejo/workflows/phpcs.yml
Executable file
41
.forgejo/workflows/phpcs.yml
Executable 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
|
|
@ -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:
|
|
||||||
- 3306:3306
|
|
||||||
options: --health-cmd="mysqladmin ping" --health-interval=10s --health-timeout=10s --health-retries=10
|
|
||||||
strategy:
|
strategy:
|
||||||
matrix:
|
matrix:
|
||||||
php-versions: ['8.1', '8.2', '8.3']
|
php-versions: ['8.1']
|
||||||
include:
|
name: Run phpunit tests
|
||||||
- wp-version: latest
|
env:
|
||||||
|
extensions: mysql
|
||||||
|
key: cache-v1
|
||||||
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
157
.phpcs.xml.dist
Normal 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
19
.woodpecker/test.yml
Normal 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
|
||||||
|
|
|
@ -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
188
bin/install-wp-tests.sh
Normal 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
26
docker-compose-test.yml
Normal 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"]
|
|
@ -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 );
|
||||||
}
|
}
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
@ -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' )
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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
15
phpunit.xml
Normal 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>
|
|
@ -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
38
tests/bootstrap.php
Executable 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";
|
20
tests/test-class-sample.php
Normal file
20
tests/test-class-sample.php
Normal 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 );
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in a new issue