'foo',
'public' => true,
'supports' => array( 'buddypress-activity' ),
) );
$post_id = self::factory()->post->create( array(
'post_status' => 'publish',
'post_type' => 'foo',
) );
$post = get_post( $post_id );
// 'new' => 'publish'
$this->assertTrue( $this->activity_exists_for_post( $post_id, 'new_foo' ), 'Published post type should have activity' );
_unregister_post_type( 'foo' );
}
/**
* @group bp_activity_catch_transition_post_type_status
* @group activity_tracking
*/
public function test_bp_activity_catch_transition_post_type_status_publish_to_publish() {
register_post_type( 'foo', array(
'label' => 'foo',
'public' => true,
'supports' => array( 'buddypress-activity' ),
) );
$post_id = self::factory()->post->create( array(
'post_status' => 'publish',
'post_type' => 'foo',
) );
$post = get_post( $post_id );
// 'new' => 'publish'
$this->assertTrue( $this->activity_exists_for_post( $post_id, 'new_foo' ), 'Published post type should have activity' );
_unregister_post_type( 'foo' );
}
/**
* @group bp_activity_catch_transition_post_type_status
* @group activity_tracking
*/
public function test_bp_activity_catch_transition_post_type_status_publish_existing_post() {
$u = self::factory()->user->create();
$labels = array(
'bp_activity_admin_filter' => 'New Foo',
'bp_activity_front_filter' => 'Foos',
'bp_activity_new_post' => '%1$s posted a new foo',
'bp_activity_new_post_ms' => '%1$s posted a new foo, on the site %3$s',
);
/**
* 'public' must be set to true, otherwise bp_activity_get_post_types_tracking_args() fails.
*/
register_post_type( 'foo', array(
'labels' => $labels,
'public' => true,
'supports' => array( 'buddypress-activity' ),
'bp_activity' => array(
'action_id' => 'new_foo',
'contexts' => array( 'activity' ),
'position' => 40,
)
) );
// Temporarily remove post type activity hook so activity item isn't created.
remove_action( 'transition_post_status', 'bp_activity_catch_transition_post_type_status', 10 );
// Create the initial post.
$p = self::factory()->post->create( array(
'post_author' => $u,
'post_type' => 'foo',
) );
$this->assertEmpty( bp_activity_get_activity_id( array( 'type' => 'new_foo' ) ) );
// Add the post type activity hook back.
add_action( 'transition_post_status', 'bp_activity_catch_transition_post_type_status', 10, 3 );
// Emulate updating a post; this should create an activity item.
wp_update_post( array(
'ID' => $p,
'post_title' => 'This is an edit',
) );
// Assert!
$this->assertNotEmpty( bp_activity_get_activity_id( array( 'type' => 'new_foo' ) ), 'Activity item was not created during an edit of an existing WordPress post.' );
// Clean up.
_unregister_post_type( 'foo' );
}
/**
* @group bp_activity_catch_transition_post_type_status
* @group activity_tracking
*/
public function test_bp_activity_catch_transition_post_type_status_publish_password() {
register_post_type( 'foo', array(
'label' => 'foo',
'public' => true,
'supports' => array( 'buddypress-activity' ),
) );
$post_id = self::factory()->post->create( array(
'post_status' => 'publish',
'post_type' => 'foo',
) );
$post = get_post( $post_id );
// 'new' => 'publish'
$this->assertTrue( $this->activity_exists_for_post( $post_id, 'new_foo' ), 'Published post type should have activity' );
$post->post_status = 'publish';
$post->post_password = 'foo';
wp_update_post( $post );
// 'publish' => 'publish' (password protected)
$this->assertFalse( $this->activity_exists_for_post( $post_id, 'new_foo' ), 'Password protected post type should not have activity' );
_unregister_post_type( 'foo' );
}
/**
* @group bp_activity_catch_transition_post_type_status
* @group activity_tracking
*/
public function test_bp_activity_catch_transition_post_type_status_publish_trash() {
register_post_type( 'foo', array(
'label' => 'foo',
'public' => true,
'supports' => array( 'buddypress-activity' ),
) );
$post_id = self::factory()->post->create( array(
'post_status' => 'publish',
'post_type' => 'foo',
) );
$post = get_post( $post_id );
// 'new' => 'publish'
$this->assertTrue( $this->activity_exists_for_post( $post_id, 'new_foo' ), 'Published post type should have activity' );
wp_trash_post( $post->ID );
// 'publish' => 'publish' (password protected)
$this->assertFalse( $this->activity_exists_for_post( $post_id, 'new_foo' ), 'Unpublished post type should not have activity' );
_unregister_post_type( 'foo' );
}
/**
* @ticket BP8579
* @group bp_activity_catch_transition_post_type_status
* @group activity_tracking
*/
public function test_bp_activity_catch_transition_post_type_status_publish_publish_author_changed() {
$u1 = self::factory()->user->create(
array(
'role' => 'auhor',
)
);
$u2 = self::factory()->user->create(
array(
'role' => 'auhor',
)
);
$post_id = self::factory()->post->create( array(
'post_status' => 'publish',
'post_author' => $u1,
'post_type' => 'post',
) );
$post = get_post( $post_id );
// 'new' => 'publish'
$this->assertTrue( $this->activity_exists_for_post( $post_id, 'new_post' ), 'Published post type should have activity' );
$post->post_author = $u2;
wp_update_post( $post );
$a = $this->activity_exists_for_post( $post_id, 'new_post', true );
$this->assertSame( $u2, $a->user_id, 'The Activity about a published post type should be updated when the post author has changed.' );
}
/**
* @ticket BP8579
* @group bp_activity_catch_transition_post_type_status
* @group activity_tracking
*/
public function test_bp_activity_catch_transition_post_type_status_publish_publish_content_changed() {
$u1 = self::factory()->user->create(
array(
'role' => 'auhor',
)
);
$u2 = self::factory()->user->create(
array(
'role' => 'auhor',
)
);
$post_id = self::factory()->post->create( array(
'post_status' => 'publish',
'post_author' => $u1,
'post_type' => 'post',
) );
$post = get_post( $post_id );
// 'new' => 'publish'
$this->assertTrue( $this->activity_exists_for_post( $post_id, 'new_post' ), 'Published post type should have activity' );
$post->post_content = "This time {$u2} has not edited the post";
wp_update_post( $post );
$a = $this->activity_exists_for_post( $post_id, 'new_post', true );
$this->assertSame( $post->post_content, $a->content, 'The Activity about a published post type should be updated when the post content has changed.' );
}
protected function activity_exists_for_post( $post_id, $action, $get_object = false ) {
$a = bp_activity_get( array(
'action' => $action,
'item_id' => get_current_blog_id(),
'secondary_item_id' => $post_id,
) );
if ( $get_object ) {
return reset( $a['activities'] );
}
return ! empty( $a['activities'] );
}
}