Ticket #7156: 7156.4.patch
| File 7156.4.patch, 11.6 KB (added by , 6 years ago) |
|---|
-
src/bp-activity/classes/class-bp-activity-component.php
diff --git src/bp-activity/classes/class-bp-activity-component.php src/bp-activity/classes/class-bp-activity-component.php index a362a358c..74b81c7b6 100644
class BP_Activity_Component extends BP_Component { 461 461 * Init the BP REST API. 462 462 * 463 463 * @since 5.0.0 464 * 465 * @param array $controllers Optional. See BP_Component::rest_api_init() for 466 * description. 464 467 */ 465 public function rest_api_init() { 466 $controller = new BP_REST_Activity_Endpoint(); 467 $controller->register_routes(); 468 469 parent::rest_api_init(); 468 public function rest_api_init( $controllers = array() ) { 469 parent::rest_api_init( array( 'BP_REST_Activity_Endpoint' ) ); 470 470 } 471 471 } -
src/bp-core/classes/class-bp-component.php
diff --git src/bp-core/classes/class-bp-component.php src/bp-core/classes/class-bp-component.php index 7bed39f9e..9bcddd1cb 100644
class BP_Component { 867 867 * Init the BP REST API. 868 868 * 869 869 * @since 5.0.0 870 */ 871 public function rest_api_init() { 870 * 871 * @param array $controllers The list of BP REST controllers to load. 872 */ 873 public function rest_api_init( $controllers = array() ) { 874 if ( is_array( $controllers ) && $controllers ) { 875 // Built-in controllers. 876 $_controllers = $controllers; 877 878 /** 879 * Use this filter to disable all or some REST API controllers 880 * for the component. 881 * 882 * This is a dynamic hook that is based on the component string ID. 883 * 884 * @since 5.0.0 885 * 886 * @param array $controllers The list of BP REST API controllers to load. 887 */ 888 $controllers = (array) apply_filters( 'bp_' . $this->id . '_rest_api_controllers', $controllers ); 889 890 foreach( $controllers as $controller ) { 891 if ( ! in_array( $controller, $_controllers, true ) ) { 892 continue; 893 } 894 895 $component_controller = new $controller; 896 $component_controller->register_routes(); 897 } 898 } 872 899 873 900 /** 874 901 * Fires in the rest_api_init method inside BP_Component. -
src/bp-groups/classes/class-bp-groups-component.php
diff --git src/bp-groups/classes/class-bp-groups-component.php src/bp-groups/classes/class-bp-groups-component.php index 296c4833a..b53835ea0 100644
class BP_Groups_Component extends BP_Component { 927 927 * Init the BP REST API. 928 928 * 929 929 * @since 5.0.0 930 * 931 * @param array $controllers Optional. See BP_Component::rest_api_init() for 932 * description. 930 933 */ 931 public function rest_api_init() { 932 $controller = new BP_REST_Groups_Endpoint(); 933 $controller->register_routes(); 934 935 $controller = new BP_REST_Group_Membership_Endpoint(); 936 $controller->register_routes(); 937 938 $controller = new BP_REST_Group_Invites_Endpoint(); 939 $controller->register_routes(); 940 941 $controller = new BP_REST_Group_Membership_Request_Endpoint(); 942 $controller->register_routes(); 943 944 $controller = new BP_REST_Attachments_Group_Avatar_Endpoint(); 945 $controller->register_routes(); 946 947 parent::rest_api_init(); 934 public function rest_api_init( $controllers = array() ) { 935 parent::rest_api_init( array( 936 'BP_REST_Groups_Endpoint', 937 'BP_REST_Group_Membership_Endpoint', 938 'BP_REST_Group_Invites_Endpoint', 939 'BP_REST_Group_Membership_Request_Endpoint', 940 'BP_REST_Attachments_Group_Avatar_Endpoint', 941 ) ); 948 942 } 949 943 } -
src/bp-members/classes/class-bp-members-component.php
diff --git src/bp-members/classes/class-bp-members-component.php src/bp-members/classes/class-bp-members-component.php index 4b1647976..a83344feb 100644
class BP_Members_Component extends BP_Component { 461 461 * Init the BP REST API. 462 462 * 463 463 * @since 5.0.0 464 * 465 * @param array $controllers Optional. See BP_Component::rest_api_init() for 466 * description. 464 467 */ 465 public function rest_api_init() { 466 /** 467 * As the Members component is always loaded, 468 * let's register the Components endpoint here. 469 */ 470 $controller = new BP_REST_Components_Endpoint(); 471 $controller->register_routes(); 472 473 $controller = new BP_REST_Members_Endpoint(); 474 $controller->register_routes(); 475 476 $controller = new BP_REST_Attachments_Member_Avatar_Endpoint(); 477 $controller->register_routes(); 478 479 parent::rest_api_init(); 468 public function rest_api_init( $controllers = array() ) { 469 parent::rest_api_init( array( 470 /** 471 * As the Members component is always loaded, 472 * let's register the Components endpoint here. 473 */ 474 'BP_REST_Components_Endpoint', 475 'BP_REST_Members_Endpoint', 476 'BP_REST_Attachments_Member_Avatar_Endpoint', 477 ) ); 480 478 } 481 479 } -
src/bp-messages/classes/class-bp-messages-component.php
diff --git src/bp-messages/classes/class-bp-messages-component.php src/bp-messages/classes/class-bp-messages-component.php index 3062d5c5d..1904bd98c 100644
class BP_Messages_Component extends BP_Component { 438 438 * Init the BP REST API. 439 439 * 440 440 * @since 5.0.0 441 * 442 * @param array $controllers Optional. See BP_Component::rest_api_init() for 443 * description. 441 444 */ 442 public function rest_api_init() { 443 $controller = new BP_REST_Messages_Endpoint(); 444 $controller->register_routes(); 445 446 parent::rest_api_init(); 445 public function rest_api_init( $controllers = array() ) { 446 parent::rest_api_init( array( 'BP_REST_Messages_Endpoint' ) ); 447 447 } 448 448 } -
src/bp-notifications/classes/class-bp-notifications-component.php
diff --git src/bp-notifications/classes/class-bp-notifications-component.php src/bp-notifications/classes/class-bp-notifications-component.php index 2eaaba415..4333d8b30 100644
class BP_Notifications_Component extends BP_Component { 320 320 * Init the BP REST API. 321 321 * 322 322 * @since 5.0.0 323 * 324 * @param array $controllers Optional. See BP_Component::rest_api_init() for 325 * description. 323 326 */ 324 public function rest_api_init() { 325 $controller = new BP_REST_Notifications_Endpoint(); 326 $controller->register_routes(); 327 328 parent::rest_api_init(); 327 public function rest_api_init( $controllers = array() ) { 328 parent::rest_api_init( array( 'BP_REST_Notifications_Endpoint' ) ); 329 329 } 330 330 } -
src/bp-xprofile/classes/class-bp-xprofile-component.php
diff --git src/bp-xprofile/classes/class-bp-xprofile-component.php src/bp-xprofile/classes/class-bp-xprofile-component.php index 3ade404aa..b43879d34 100644
class BP_XProfile_Component extends BP_Component { 494 494 * Init the BP REST API. 495 495 * 496 496 * @since 5.0.0 497 * 498 * @param array $controllers Optional. See BP_Component::rest_api_init() for 499 * description. 497 500 */ 498 public function rest_api_init() { 499 $controller = new BP_REST_XProfile_Fields_Endpoint(); 500 $controller->register_routes(); 501 502 $controller = new BP_REST_XProfile_Field_Groups_Endpoint(); 503 $controller->register_routes(); 504 505 $controller = new BP_REST_XProfile_Data_Endpoint(); 506 $controller->register_routes(); 507 508 parent::rest_api_init(); 501 public function rest_api_init( $controllers = array() ) { 502 parent::rest_api_init( array( 503 'BP_REST_XProfile_Fields_Endpoint', 504 'BP_REST_XProfile_Field_Groups_Endpoint', 505 'BP_REST_XProfile_Data_Endpoint', 506 ) ); 509 507 } 510 508 } -
new file tests/phpunit/assets/bp-rest-api-controllers.php
diff --git tests/phpunit/assets/bp-rest-api-controllers.php tests/phpunit/assets/bp-rest-api-controllers.php new file mode 100644 index 000000000..63d77f923
- + 1 <?php 2 /** 3 * BP REST Controllers' mocks 4 */ 5 6 class BP_REST_Mock_Class { 7 public function __construct() {} 8 9 public function register_routes( $controller = '' ) { 10 array_push( buddypress()->unit_test_rest->controllers, $controller ); 11 } 12 } 13 14 /** 15 * BP Member Avatar REST Controller's mock. 16 */ 17 class BP_REST_Attachments_Member_Avatar_Endpoint extends BP_REST_Mock_Class { 18 public function __construct() { 19 $this->namespace = bp_rest_namespace() . '/' . bp_rest_version(); 20 $this->rest_base = 'members'; 21 } 22 23 public function register_routes( $controller = '' ) { 24 parent::register_routes( 'BP_REST_Attachments_Member_Avatar_Endpoint' ); 25 } 26 } 27 28 /** 29 * BP Components REST Controller's mock. 30 */ 31 class BP_REST_Components_Endpoint extends BP_REST_Mock_Class { 32 public function __construct() { 33 $this->namespace = bp_rest_namespace() . '/' . bp_rest_version(); 34 $this->rest_base = 'components'; 35 } 36 37 public function register_routes( $controller = '' ) { 38 parent::register_routes( 'BP_REST_Components_Endpoint' ); 39 } 40 } 41 42 /** 43 * BP Members REST Controller's mock. 44 */ 45 class BP_REST_Members_Endpoint extends BP_REST_Mock_Class { 46 public function __construct() { 47 $this->namespace = bp_rest_namespace() . '/' . bp_rest_version(); 48 $this->rest_base = 'members'; 49 } 50 51 public function register_routes( $controller = '' ) { 52 parent::register_routes( 'BP_REST_Members_Endpoint' ); 53 } 54 } -
new file tests/phpunit/testcases/core/class-bp-component.php
diff --git tests/phpunit/testcases/core/class-bp-component.php tests/phpunit/testcases/core/class-bp-component.php new file mode 100644 index 000000000..8730f8224
- + 1 <?php 2 3 include_once BP_TESTS_DIR . '/assets/bp-rest-api-controllers.php'; 4 5 /** 6 * @group core 7 * @group BP_Component 8 */ 9 class BP_Tests_BP_Component_TestCases extends BP_UnitTestCase { 10 public function setUp() { 11 parent::setUp(); 12 13 $bp = buddypress(); 14 $bp->unit_test_rest = new stdClass; 15 $bp->unit_test_rest->controllers = array(); 16 } 17 18 public function remove_controller( $controllers ) { 19 return array_diff( $controllers, array( 'BP_REST_Members_Endpoint' ) ); 20 } 21 22 public function add_controller( $controllers ) { 23 return array_merge( $controllers, array( 'Foo_Bar' ) ); 24 } 25 26 public function test_rest_api_init_for_members_component() { 27 $bp_members = new BP_Members_Component(); 28 $bp = buddypress(); 29 30 $bp_members->rest_api_init(); 31 32 $this->assertSame( $bp->unit_test_rest->controllers, array( 33 'BP_REST_Components_Endpoint', 34 'BP_REST_Members_Endpoint', 35 'BP_REST_Attachments_Member_Avatar_Endpoint', 36 ) ); 37 } 38 39 public function test_rest_api_init_for_members_component_can_remove_controller() { 40 $bp_members = new BP_Members_Component(); 41 $bp = buddypress(); 42 43 add_filter( 'bp_members_rest_api_controllers', array( $this, 'remove_controller' ) ); 44 45 $bp_members->rest_api_init(); 46 47 remove_filter( 'bp_members_rest_api_controllers', array( $this, 'remove_controller' ) ); 48 49 $this->assertSame( $bp->unit_test_rest->controllers, array( 50 'BP_REST_Components_Endpoint', 51 'BP_REST_Attachments_Member_Avatar_Endpoint', 52 ) ); 53 } 54 55 public function test_rest_api_init_for_members_component_cannot_add_controller() { 56 $bp_members = new BP_Members_Component(); 57 $bp = buddypress(); 58 59 add_filter( 'bp_members_rest_api_controllers', array( $this, 'add_controller' ) ); 60 61 $bp_members->rest_api_init(); 62 63 remove_filter( 'bp_members_rest_api_controllers', array( $this, 'add_controller' ) ); 64 65 $this->assertSame( $bp->unit_test_rest->controllers, array( 66 'BP_REST_Components_Endpoint', 67 'BP_REST_Members_Endpoint', 68 'BP_REST_Attachments_Member_Avatar_Endpoint', 69 ) ); 70 } 71 }