1
0
Fork 0
mirror of https://github.com/buddypress/buddypress.git synced 2026-07-22 20:56:55 +08:00
buddypress/tests/phpunit/testcases/core/bp-rest-api.php
Renato Alves 41802f7709 Include the V2 of the BP REST API in BuddyPress core.
We are officially deprecating the V1 of the BP REST API. And bundling the new, default, V2 of the BP REST API inside BuddyPress core. Previously, the V1 was developed as a plugin in a separate repo (https://github.com/buddypress/BP-REST).

- One of the main differences between the V1 and V2 is how objects are returned. Single items are no longer returned as an `array`;
- We have a new `BP_Test_REST_Controller_Testcase` for testing the new API endpoints;
- We changed the names of our controllers to follow our autoloader rules;
- Removed the BP-REST plugin from `wp-env` and from our release script;
- And we added notices for the deprecated V1 API (endpoints and files).

Props imath & I. ;)

Fixes #8200
See #9145
Closes https://github.com/buddypress/buddypress/pull/337

git-svn-id: https://buddypress.svn.wordpress.org/trunk@14026 cdf35c40-ae34-48e0-9cc9-0c9da1808c22
2024-09-27 21:11:27 +00:00

95 lines
2.7 KiB
PHP

<?php
/**
* @group core
*/
function bp_rest() {
return true;
}
class BP_Tests_REST_API extends BP_UnitTestCase {
public function test_bp_rest_is_plugin_active() {
$this->assertFalse( bp_rest_is_plugin_active() );
$this->assertTrue( bp_rest_in_buddypress() );
$this->assertTrue( bp_rest_api_is_available() );
add_action( 'bp_rest_api_init', 'bp_rest' );
$this->assertTrue( bp_rest_is_plugin_active() );
$this->assertFalse( bp_rest_in_buddypress() );
$this->assertTrue( bp_rest_api_is_available() );
remove_action( 'bp_rest_api_init', 'bp_rest' );
add_filter( 'bp_rest_api_is_available', '__return_false' );
$this->assertFalse( bp_rest_api_is_available() );
remove_filter( 'bp_rest_api_is_available', '__return_false' );
}
public function test_bp_rest_namespace() {
$fake_user_id = 150;
$this->assertEquals( 'buddypress', bp_rest_namespace() );
$this->assertStringContainsString(
'buddypress/v2/members/' . $fake_user_id,
bp_rest_get_object_url( $fake_user_id, 'members' )
);
$callback = fn () => 'foo';
add_filter( 'bp_rest_namespace', $callback );
$this->assertEquals( 'foo', bp_rest_namespace() );
$this->assertStringContainsString(
'foo/v2/members/' . $fake_user_id,
bp_rest_get_object_url( $fake_user_id, 'members' )
);
remove_filter( 'bp_rest_namespace', $callback );
}
public function test_bp_rest_version() {
$fake_user_id = 150;
$this->assertEquals( 'v2', bp_rest_version() );
$this->assertStringContainsString(
'v2/members/' . $fake_user_id,
bp_rest_get_object_url( $fake_user_id, 'members' )
);
$callback = fn () => 'v3';
add_filter( 'bp_rest_version', $callback );
$this->assertEquals( 'v3', bp_rest_version() );
$this->assertStringContainsString(
'v3/members/' . $fake_user_id,
bp_rest_get_object_url( $fake_user_id, 'members' )
);
remove_filter( 'bp_rest_version', $callback );
}
public function test_v1_rest_request_error_message() {
$endpoint = '/buddypress/v1/members/150';
$response = rest_do_request( $endpoint );
$data = $response->get_data();
$this->assertEquals( 404, $response->get_status(), 'v1 endpoint should return 404 since it is not available.' );
$this->assertSame( $data['message'], 'The V1 of the BuddyPress REST API is no longer supported, use the V2 instead.' );
add_action( 'bp_rest_api_init', 'bp_rest' );
$this->assertTrue( bp_rest_is_plugin_active() );
$response = rest_do_request( $endpoint );
$data = $response->get_data();
$this->assertEquals( 404, $response->get_status() );
$this->assertSame( $data['message'], 'No route was found matching the URL and request method.' );
remove_action( 'bp_rest_api_init', 'bp_rest' );
}
}