diff --git a/includes/activitypub/transformer/class-event-organiser.php b/includes/activitypub/transformer/class-event-organiser.php index 95b4bea..fbbf1ea 100644 --- a/includes/activitypub/transformer/class-event-organiser.php +++ b/includes/activitypub/transformer/class-event-organiser.php @@ -67,7 +67,7 @@ final class Event_Organiser extends Event { $address = eo_get_venue_address( $venue_id ); - $address['name'] = eo_get_venue_name( $this->wp_object->ID ); + $venue_name = eo_get_venue_name( $venue_id ); $address['streetAddress'] = $address['address']; unset( $address['address'] ); @@ -88,10 +88,12 @@ final class Event_Organiser extends Event { $location = new Place(); $location->set_name( eo_get_venue_name( $this->wp_object->ID ) ); - $location->set_latitude( eo_get_venue_lat( $this->wp_object->ID ) ); - $location->set_longitude( eo_get_venue_lng( $this->wp_object->ID ) ); + $location->set_latitude( eo_get_venue_lat( $this->wp_object->ID ) ?? null ); + $location->set_longitude( eo_get_venue_lng( $this->wp_object->ID ) ?? null ); $location->set_address( $address ); + $location->set_name( $venue_name ); + $location->set_content( eo_get_venue_description( $venue_id ) ); - return $address; + return $location; } } diff --git a/tests/test-class-plugin-event-organiser.php b/tests/test-class-plugin-event-organiser.php index 368443f..55eaf5a 100644 --- a/tests/test-class-plugin-event-organiser.php +++ b/tests/test-class-plugin-event-organiser.php @@ -23,6 +23,7 @@ class Test_Event_Organiser extends WP_UnitTestCase { $aec = \ActivityPub_Event_Bridge\Setup::get_instance(); $aec->activate_activitypub_support_for_active_event_plugins(); + // Run the install script just in time which makes sure the custom tables exist and more. eventorganiser_install(); // Delete all posts afterwards. @@ -65,7 +66,7 @@ class Test_Event_Organiser extends WP_UnitTestCase { } /** - * Test transformation to ActivityPUb for basic event. + * Test transformation to ActivityPub for basic event. */ public function test_transform_of_basic_event() { // Mock Event. @@ -96,4 +97,57 @@ class Test_Event_Organiser extends WP_UnitTestCase { $this->assertEquals( 'external', $event_array['joinMode'] ); $this->assertArrayNotHasKey( 'location', $event_array ); } + + /** + * Test transformation to ActivityPub for event with location. + */ + public function test_transform_of_event_with_location() { + // Create venue. + $venue_args = array( + 'description' => 'This is a test venue for the Fediverse.', + 'address' => 'Fediverse-Street 1337', + 'city' => 'Fediverse-Town', + 'state' => 'Fediverse-Sate', + 'postcode' => '1337', + 'country' => 'Fediverse-Country', + 'latitude' => 7.076668, + 'longitude' => 15.421371, + ); + $venue_name = 'Fediverse Venue'; + $venue = eo_insert_venue( $venue_name, $venue_args ); + + // Mock Event. + $event_data = array( + 'start' => new DateTime( '+10 days 15:00:00', eo_get_blog_timezone() ), + 'end' => new DateTime( '+10 days 16:00:00', eo_get_blog_timezone() ), + 'all_day' => 0, + 'schedule' => 'once', + ); + $post_data = array( + 'post_title' => 'Unit Test Event', + 'post_content' => 'Unit Test description.', + 'post_status' => 'publish', + ); + $post_id = eo_insert_event( $post_data, $event_data ); + wp_set_object_terms( $post_id, $venue['term_id'], 'event-venue' ); + + // Call the transformer Factory. + $event_array = \Activitypub\Transformer\Factory::get_transformer( get_post( $post_id ) )->to_object()->to_array(); + + // Check that the event ActivityStreams representation contains everything as expected. + $this->assertEquals( 'Event', $event_array['type'] ); + $this->assertEquals( 'Unit Test Event', $event_array['name'] ); + $this->assertEquals( 'Unit Test description.', wp_strip_all_tags( $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( 'external', $event_array['joinMode'] ); + $this->assertArrayHasKey( 'location', $event_array ); + $this->assertEquals( $venue_args['description'], wp_strip_all_tags( $event_array['location']['content'] ) ); + $this->assertEquals( $venue_args['address'], $event_array['location']['address']['streetAddress'] ); + $this->assertEquals( $venue_args['city'], $event_array['location']['address']['addressLocality'] ); + $this->assertEquals( $venue_args['state'], $event_array['location']['address']['addressRegion'] ); + $this->assertEquals( $venue_args['country'], $event_array['location']['address']['addressCountry'] ); + $this->assertEquals( $venue_args['postcode'], $event_array['location']['address']['postalCode'] ); + $this->assertEquals( $venue_name, $event_array['location']['name'] ); + } }