wip draft how to do integration tests for event plugins
This commit is contained in:
parent
cc3b8e4a91
commit
04b0e69af6
6 changed files with 63 additions and 14 deletions
|
@ -68,11 +68,11 @@ jobs:
|
||||||
|
|
||||||
- name: Setup Test Environment
|
- name: Setup Test Environment
|
||||||
if: steps.cache-wordpress.outputs.cache-hit != 'true'
|
if: steps.cache-wordpress.outputs.cache-hit != 'true'
|
||||||
run: bash tests/install-wp-tests.sh wordpress_test root root 127.0.0.1 6.6 false false false false
|
run: bash bin/install-wp-tests.sh wordpress_test root root 127.0.0.1 6.6 false false false false
|
||||||
|
|
||||||
- name: Initialize WordPress test database
|
- name: Initialize WordPress test database
|
||||||
if: steps.cache-wordpress.outputs.cache-hit != 'false'
|
if: steps.cache-wordpress.outputs.cache-hit != 'false'
|
||||||
run: bash tests/install-wp-tests.sh wordpress_test root root 127.0.0.1 6.6 false true true true
|
run: bash bin/install-wp-tests.sh wordpress_test root root 127.0.0.1 6.6 false true true true
|
||||||
|
|
||||||
- name: Run PHPUnit
|
- name: Run PHPUnit
|
||||||
run: cd /workspace/Event-Federation/wordpress-activitypub-event-extensions/ && ./vendor/bin/phpunit
|
run: cd /workspace/Event-Federation/wordpress-activitypub-event-extensions/ && ./vendor/bin/phpunit
|
||||||
|
|
|
@ -202,7 +202,9 @@ install_db() {
|
||||||
install_wp_plugin() {
|
install_wp_plugin() {
|
||||||
PLUGIN_NAME=$1
|
PLUGIN_NAME=$1
|
||||||
|
|
||||||
if [ -d "$WP_CORE_DIR/wp-content/mu-plugins/$PLUGIN_NAME" ]; then
|
mkdir -p "$WP_CORE_DIR/wp-content/plugins/"
|
||||||
|
|
||||||
|
if [ -d "$WP_CORE_DIR/wp-content/plugins/$PLUGIN_NAME" ]; then
|
||||||
return;
|
return;
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
@ -217,7 +219,7 @@ install_wp_plugin() {
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Unzip the plugin into the WordPress must-use plugins directory
|
# Unzip the plugin into the WordPress must-use plugins directory
|
||||||
unzip -o "$TMPDIR/$PLUGIN_FILE" -d "$WP_CORE_DIR/wp-content/mu-plugins/"
|
unzip -o "$TMPDIR/$PLUGIN_FILE" -d "$WP_CORE_DIR/wp-content/plugins/"
|
||||||
}
|
}
|
||||||
|
|
||||||
install_wp_plugins() {
|
install_wp_plugins() {
|
|
@ -151,6 +151,10 @@ final class The_Events_Calendar extends Event {
|
||||||
// We currently only support a single venue.
|
// We currently only support a single venue.
|
||||||
$event_venue = $this->wp_object->venues[0];
|
$event_venue = $this->wp_object->venues[0];
|
||||||
|
|
||||||
|
if ( is_null( $event_venue ) ) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
$address = array(
|
$address = array(
|
||||||
'addressCountry' => $event_venue->country,
|
'addressCountry' => $event_venue->country,
|
||||||
'addressLocality' => $event_venue->city,
|
'addressLocality' => $event_venue->city,
|
||||||
|
|
|
@ -59,14 +59,14 @@ class Setup {
|
||||||
* @since 1.0.0
|
* @since 1.0.0
|
||||||
*/
|
*/
|
||||||
protected function __construct() {
|
protected function __construct() {
|
||||||
$this->activitypub_plugin_is_active = is_plugin_active( 'activitypub/activitypub.php' );
|
$this->activitypub_plugin_is_active = defined( 'ACTIVITYPUB_PLUGIN_VERSION' );
|
||||||
// BeforeFirstRelease: 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;
|
||||||
// }.
|
// }.
|
||||||
$this->active_event_plugins = self::detect_active_event_plugins();
|
$this->active_event_plugins = self::detect_active_event_plugins();
|
||||||
$this->activitypub_plugin_version = get_file_data( WP_PLUGIN_DIR . '/activitypub/activitypub.php', array( 'Version' ) )[0];
|
$this->activitypub_plugin_version = defined( 'ACTIVITYPUB_PLUGIN_VERSION' ) ? constant( 'ACTIVITYPUB_PLUGIN_VERSION' ): '0';
|
||||||
$this->setup_hooks();
|
$this->setup_hooks();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -166,7 +166,7 @@ class Setup {
|
||||||
);
|
);
|
||||||
|
|
||||||
// Check if the minimum required version of the ActivityPub plugin is installed.
|
// Check if the minimum required version of the ActivityPub plugin is installed.
|
||||||
if ( version_compare( $this->activitypub_plugin_version, ACTIVITYPUB_EVENT_EXTENSIONS_ACTIVITYPUB_PLUGIN_MIN_VERSION ) ) {
|
if ( ! version_compare( $this->activitypub_plugin_version, ACTIVITYPUB_EVENT_EXTENSIONS_ACTIVITYPUB_PLUGIN_MIN_VERSION ) ) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -256,8 +256,8 @@ class Setup {
|
||||||
// If someone installs this plugin, we simply enable ActivityPub support for all currently active event post types.
|
// If someone installs this plugin, we simply enable ActivityPub support for all currently active event post types.
|
||||||
$activitypub_supported_post_types = get_option( 'activitypub_support_post_types', array() );
|
$activitypub_supported_post_types = get_option( 'activitypub_support_post_types', array() );
|
||||||
foreach ( $this->active_event_plugins as $event_plugin ) {
|
foreach ( $this->active_event_plugins as $event_plugin ) {
|
||||||
if ( ! in_array( $event_plugin['post_type'], $activitypub_supported_post_types, true ) ) {
|
if ( ! in_array( $event_plugin->get_post_type(), $activitypub_supported_post_types, true ) ) {
|
||||||
$activitypub_supported_post_types[] = $event_plugin['post_type'];
|
$activitypub_supported_post_types[] = $event_plugin->get_post_type();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
update_option( 'activitypub_support_post_types', $activitypub_supported_post_types );
|
update_option( 'activitypub_support_post_types', $activitypub_supported_post_types );
|
||||||
|
|
|
@ -26,15 +26,22 @@ if ( ! file_exists( "{$_tests_dir}/includes/functions.php" ) ) {
|
||||||
require_once "{$_tests_dir}/includes/functions.php";
|
require_once "{$_tests_dir}/includes/functions.php";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Manually load the plugin being tested.
|
* Manually load the plugin being tested and its integrations.
|
||||||
*/
|
*/
|
||||||
function _manually_load_plugin() {
|
function _manually_load_plugin() {
|
||||||
require dirname( __DIR__ ) . '/activitypub-event-extensions.php';
|
$plugin_dir = ABSPATH . '/wp-content/plugins/';
|
||||||
|
require_once $plugin_dir . 'activitypub/activitypub.php';
|
||||||
$event_plugin = 'the-events-calendar';
|
$event_plugin = 'the-events-calendar';
|
||||||
switch ( $event_plugin ) {
|
switch ( $event_plugin ) {
|
||||||
case 'the-events-calendar':
|
case 'the-events-calendar':
|
||||||
require ABSPATH . '/wp-content/mu-plugins/the-events-calendar/the-events-calendar.php';
|
$plugin_file = 'the-events-calendar/the-events-calendar.php';
|
||||||
|
require_once $plugin_dir . $plugin_file;
|
||||||
|
$current = get_option( 'active_plugins', array() );
|
||||||
|
$current[] = $plugin_file;
|
||||||
|
sort( $current );
|
||||||
|
update_option( 'active_plugins', $current );
|
||||||
}
|
}
|
||||||
|
require dirname( __DIR__ ) . '/activitypub-event-extensions.php';
|
||||||
}
|
}
|
||||||
|
|
||||||
tests_add_filter( 'muplugins_loaded', '_manually_load_plugin' );
|
tests_add_filter( 'muplugins_loaded', '_manually_load_plugin' );
|
||||||
|
|
|
@ -28,9 +28,45 @@ class Test_Sample extends WP_UnitTestCase {
|
||||||
|
|
||||||
// Get instance of our plugin.
|
// Get instance of our plugin.
|
||||||
$aec = \Activitypub_Event_Extensions\Setup::get_instance();
|
$aec = \Activitypub_Event_Extensions\Setup::get_instance();
|
||||||
$this->assertContains( 'the-events-calendar', $aec->get_active_event_plugins() );
|
|
||||||
|
|
||||||
|
// We only test for one event plugin being active at the same time,
|
||||||
|
// even though we support multiple onces in theory.
|
||||||
|
// But testing all combinations is beyond scope.
|
||||||
|
$active_event_plugins = $aec->get_active_event_plugins();
|
||||||
|
$this->assertEquals( 1, count( $active_event_plugins ) );
|
||||||
|
|
||||||
|
// Enable ActivityPub support for the event plugin.
|
||||||
$aec->activate_activitypub_support_for_active_event_plugins();
|
$aec->activate_activitypub_support_for_active_event_plugins();
|
||||||
$this->assertContains( 'tribe_events', get_option( 'activitypub_support_post_types' ) );
|
$this->assertContains( 'tribe_events', get_option( 'activitypub_support_post_types' ) );
|
||||||
|
|
||||||
|
$wp_object = tribe_events()
|
||||||
|
->set_args(
|
||||||
|
array(
|
||||||
|
'title' => 'My Event',
|
||||||
|
'content' => 'Come to my event. Let\'s connect!',
|
||||||
|
'start_date' => '+10 days 15:00:00',
|
||||||
|
'duration' => HOUR_IN_SECONDS,
|
||||||
|
'status' => 'publish',
|
||||||
|
)
|
||||||
|
)
|
||||||
|
->create();
|
||||||
|
|
||||||
|
$transformer = \Activitypub\Transformer\Factory::get_transformer( $wp_object );
|
||||||
|
|
||||||
|
$event_array = $transformer->to_object()->to_array();
|
||||||
|
|
||||||
|
$this->assertArrayHasKey( 'type', $event_array );
|
||||||
|
$this->assertEquals( 'Event', $event_array['type'] );
|
||||||
|
|
||||||
|
$this->assertEquals( 'My Event', $event_array['name'] );
|
||||||
|
|
||||||
|
$this->assertEquals( '', $event_array['content'] );
|
||||||
|
|
||||||
|
$this->assertEquals( gmdate( 'Y-m-d', strtotime( '+10 days 15:00:00' ) ) . 'T15:00:00Z', $event_array['startTime'] );
|
||||||
|
$this->assertEquals( gmdate( 'Y-m-d', strtotime( '+10 days 16:00:00' ) ) . 'T16:00:00Z', $event_array['endTime'] );
|
||||||
|
|
||||||
|
$this->assertEquals( ) . 'T16:00:00Z', $event_array['commentsEnabled'] );
|
||||||
|
|
||||||
|
$this->assertEquals( gmdate( 'Y-m-d', strtotime( '+10 days 16:00:00' ) ) . 'T16:00:00Z', $event_array['endTime'] );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue