2016-03-07 16:46:58 +00:00
< ? php
/**
2016-07-19 18:24:05 +00:00
* Settings API Tests .
*
2016-03-07 16:46:58 +00:00
* @ package WooCommerce\Tests\API
2017-03-15 16:36:53 +00:00
* @ since 3.0 . 0
2016-03-07 16:46:58 +00:00
*/
2016-07-26 21:19:50 +00:00
class Settings extends WC_REST_Unit_Test_Case {
2016-03-07 18:24:03 +00:00
2016-03-21 18:29:27 +00:00
/**
* Setup our test server , endpoints , and user info .
*/
2016-03-07 18:24:03 +00:00
public function setUp () {
parent :: setUp ();
2017-03-23 20:48:37 +00:00
$this -> endpoint = new WC_REST_Setting_Options_Controller ();
2016-06-08 21:01:30 +00:00
WC_Helper_Settings :: register ();
2016-03-07 21:54:28 +00:00
$this -> user = $this -> factory -> user -> create ( array (
'role' => 'administrator' ,
) );
2016-03-07 18:24:03 +00:00
}
/**
* Test route registration .
2016-07-19 18:24:05 +00:00
*
2017-03-15 16:36:53 +00:00
* @ since 3.0 . 0
2016-03-07 18:24:03 +00:00
*/
public function test_register_routes () {
$routes = $this -> server -> get_routes ();
2017-02-09 20:21:52 +00:00
$this -> assertArrayHasKey ( '/wc/v2/settings' , $routes );
2017-03-23 23:45:19 +00:00
$this -> assertArrayHasKey ( '/wc/v2/settings/(?P<group_id>[\w-]+)' , $routes );
$this -> assertArrayHasKey ( '/wc/v2/settings/(?P<group_id>[\w-]+)/(?P<id>[\w-]+)' , $routes );
2016-03-07 18:24:03 +00:00
}
/**
2016-03-23 19:36:59 +00:00
* Test getting all groups .
2016-07-19 18:24:05 +00:00
*
2017-03-15 16:36:53 +00:00
* @ since 3.0 . 0
2016-03-07 18:24:03 +00:00
*/
2016-03-23 19:36:59 +00:00
public function test_get_groups () {
2016-03-07 21:54:28 +00:00
wp_set_current_user ( $this -> user );
2017-02-09 20:21:52 +00:00
$response = $this -> server -> dispatch ( new WP_REST_Request ( 'GET' , '/wc/v2/settings' ) );
2016-03-07 21:46:40 +00:00
$data = $response -> get_data ();
$this -> assertEquals ( 200 , $response -> get_status () );
2016-03-28 19:04:26 +00:00
$this -> assertContains ( array (
2016-03-07 21:46:40 +00:00
'id' => 'test' ,
2016-10-12 10:16:30 +00:00
'label' => 'Test extension' ,
2016-03-23 19:36:59 +00:00
'parent_id' => '' ,
2016-03-07 21:46:40 +00:00
'description' => 'My awesome test settings.' ,
2016-06-08 19:08:49 +00:00
'sub_groups' => array ( 'sub-test' ),
'_links' => array (
2017-03-24 04:54:59 +00:00
'options' => array (
2016-06-08 19:08:49 +00:00
array (
2017-03-24 04:54:59 +00:00
'href' => rest_url ( '/wc/v2/settings/test' ),
2016-06-08 19:08:49 +00:00
),
),
),
2016-03-28 19:04:26 +00:00
), $data );
2016-03-07 21:46:40 +00:00
2016-03-28 19:04:26 +00:00
$this -> assertContains ( array (
2016-03-24 21:01:22 +00:00
'id' => 'sub-test' ,
'label' => 'Sub test' ,
'parent_id' => 'test' ,
'description' => '' ,
2016-03-28 19:04:26 +00:00
'sub_groups' => array (),
2016-06-08 19:08:49 +00:00
'_links' => array (
2017-03-24 04:54:59 +00:00
'options' => array (
2016-06-08 19:08:49 +00:00
array (
2017-03-24 04:54:59 +00:00
'href' => rest_url ( '/wc/v2/settings/sub-test' ),
2016-06-08 19:08:49 +00:00
),
),
),
2016-03-28 19:04:26 +00:00
), $data );
2016-03-07 18:24:03 +00:00
}
/**
2016-03-23 19:36:59 +00:00
* Test / settings without valid permissions / creds .
2016-07-19 18:24:05 +00:00
*
2017-03-15 16:36:53 +00:00
* @ since 3.0 . 0
2016-03-07 18:24:03 +00:00
*/
2016-03-23 19:36:59 +00:00
public function test_get_groups_without_permission () {
2016-03-07 21:54:28 +00:00
wp_set_current_user ( 0 );
2016-03-07 18:24:03 +00:00
2017-02-09 20:21:52 +00:00
$response = $this -> server -> dispatch ( new WP_REST_Request ( 'GET' , '/wc/v2/settings' ) );
2016-03-07 21:54:28 +00:00
$this -> assertEquals ( 401 , $response -> get_status () );
2016-03-07 18:24:03 +00:00
}
2016-06-13 20:27:54 +00:00
/**
* Test / settings without valid permissions / creds .
2016-07-19 18:24:05 +00:00
*
2017-03-15 16:36:53 +00:00
* @ since 3.0 . 0
2016-06-16 20:19:15 +00:00
* @ covers WC_Rest_Settings_Controller :: get_items
2016-06-13 20:27:54 +00:00
*/
public function test_get_groups_none_registered () {
wp_set_current_user ( $this -> user );
remove_all_filters ( 'woocommerce_settings_groups' );
2017-02-09 20:21:52 +00:00
$response = $this -> server -> dispatch ( new WP_REST_Request ( 'GET' , '/wc/v2/settings' ) );
2016-06-13 20:27:54 +00:00
$this -> assertEquals ( 500 , $response -> get_status () );
WC_Helper_Settings :: register ();
}
2016-03-07 18:24:03 +00:00
/**
2016-03-24 21:01:22 +00:00
* Test groups schema .
2016-07-19 18:24:05 +00:00
*
2017-03-15 16:36:53 +00:00
* @ since 3.0 . 0
2016-03-07 18:24:03 +00:00
*/
2016-03-23 19:36:59 +00:00
public function test_get_group_schema () {
2017-02-09 20:21:52 +00:00
$request = new WP_REST_Request ( 'OPTIONS' , '/wc/v2/settings' );
2016-03-07 21:46:40 +00:00
$response = $this -> server -> dispatch ( $request );
$data = $response -> get_data ();
$properties = $data [ 'schema' ][ 'properties' ];
2016-03-28 19:04:26 +00:00
$this -> assertEquals ( 5 , count ( $properties ) );
2016-03-07 21:46:40 +00:00
$this -> assertArrayHasKey ( 'id' , $properties );
2016-03-23 19:36:59 +00:00
$this -> assertArrayHasKey ( 'parent_id' , $properties );
2016-03-07 21:46:40 +00:00
$this -> assertArrayHasKey ( 'label' , $properties );
$this -> assertArrayHasKey ( 'description' , $properties );
2016-03-28 19:04:26 +00:00
$this -> assertArrayHasKey ( 'sub_groups' , $properties );
2016-03-07 20:44:07 +00:00
}
2016-03-24 21:01:22 +00:00
/**
* Test settings schema .
2016-07-19 18:24:05 +00:00
*
2017-03-15 16:36:53 +00:00
* @ since 3.0 . 0
2016-03-24 21:01:22 +00:00
*/
public function test_get_setting_schema () {
2017-02-09 20:21:52 +00:00
$request = new WP_REST_Request ( 'OPTIONS' , '/wc/v2/settings/test/woocommerce_shop_page_display' );
2016-03-24 21:01:22 +00:00
$response = $this -> server -> dispatch ( $request );
$data = $response -> get_data ();
$properties = $data [ 'schema' ][ 'properties' ];
2016-08-29 17:19:28 +00:00
$this -> assertEquals ( 9 , count ( $properties ) );
2016-03-24 21:01:22 +00:00
$this -> assertArrayHasKey ( 'id' , $properties );
$this -> assertArrayHasKey ( 'label' , $properties );
$this -> assertArrayHasKey ( 'description' , $properties );
2016-08-29 17:19:28 +00:00
$this -> assertArrayHasKey ( 'value' , $properties );
2016-03-24 21:01:22 +00:00
$this -> assertArrayHasKey ( 'default' , $properties );
$this -> assertArrayHasKey ( 'tip' , $properties );
$this -> assertArrayHasKey ( 'placeholder' , $properties );
$this -> assertArrayHasKey ( 'type' , $properties );
$this -> assertArrayHasKey ( 'options' , $properties );
}
2016-03-07 20:44:07 +00:00
/**
2016-03-23 19:36:59 +00:00
* Test getting a single group .
2016-07-19 18:24:05 +00:00
*
2017-03-15 16:36:53 +00:00
* @ since 3.0 . 0
2016-03-07 20:44:07 +00:00
*/
2016-03-23 19:36:59 +00:00
public function test_get_group () {
2016-03-07 21:54:28 +00:00
wp_set_current_user ( $this -> user );
2016-06-13 20:27:54 +00:00
// test route callback receiving an empty group id
$result = $this -> endpoint -> get_group_settings ( '' );
$this -> assertIsWPError ( $result );
2016-03-24 21:01:22 +00:00
// test getting a group that does not exist
2017-02-09 20:21:52 +00:00
$response = $this -> server -> dispatch ( new WP_REST_Request ( 'GET' , '/wc/v2/settings/not-real' ) );
2016-03-07 21:46:40 +00:00
$this -> assertEquals ( 404 , $response -> get_status () );
2016-03-24 21:01:22 +00:00
// test getting the 'invalid' group
2017-02-09 20:21:52 +00:00
$response = $this -> server -> dispatch ( new WP_REST_Request ( 'GET' , '/wc/v2/settings/invalid' ) );
2016-03-07 21:46:40 +00:00
$this -> assertEquals ( 404 , $response -> get_status () );
2016-03-24 21:01:22 +00:00
// test getting a valid group
2017-02-09 20:21:52 +00:00
$response = $this -> server -> dispatch ( new WP_REST_Request ( 'GET' , '/wc/v2/settings/general' ) );
2016-03-07 21:46:40 +00:00
$data = $response -> get_data ();
$this -> assertEquals ( 200 , $response -> get_status () );
2016-06-08 19:08:49 +00:00
$this -> assertContains ( array (
'id' => 'woocommerce_demo_store' ,
2016-10-12 10:16:30 +00:00
'label' => 'Store notice' ,
2016-06-08 19:08:49 +00:00
'description' => 'Enable site-wide store notice text' ,
'type' => 'checkbox' ,
'default' => 'no' ,
'value' => 'no' ,
'_links' => array (
'self' => array (
array (
2017-02-09 20:21:52 +00:00
'href' => rest_url ( '/wc/v2/settings/general/woocommerce_demo_store' ),
2016-06-08 19:08:49 +00:00
),
),
'collection' => array (
array (
2017-02-09 20:21:52 +00:00
'href' => rest_url ( '/wc/v2/settings/general' ),
2016-06-08 19:08:49 +00:00
),
),
2016-08-27 01:46:45 +00:00
),
2016-06-08 19:08:49 +00:00
), $data );
2016-03-28 19:04:26 +00:00
2016-03-24 21:01:22 +00:00
// test getting a valid group with settings attached to it
2017-02-09 20:21:52 +00:00
$response = $this -> server -> dispatch ( new WP_REST_Request ( 'GET' , '/wc/v2/settings/test' ) );
2016-03-24 21:01:22 +00:00
$data = $response -> get_data ();
2016-10-14 11:22:25 +00:00
$this -> assertEquals ( 1 , count ( $data ) );
2016-06-08 19:08:49 +00:00
$this -> assertEquals ( 'woocommerce_shop_page_display' , $data [ 0 ][ 'id' ] );
$this -> assertEmpty ( $data [ 0 ][ 'value' ] );
2016-03-07 20:44:07 +00:00
}
/**
2016-03-23 19:36:59 +00:00
* Test getting a single group without permission .
2016-07-19 18:24:05 +00:00
*
2017-03-15 16:36:53 +00:00
* @ since 3.0 . 0
2016-03-07 20:44:07 +00:00
*/
2016-03-23 19:36:59 +00:00
public function test_get_group_without_permission () {
2016-03-07 21:54:28 +00:00
wp_set_current_user ( 0 );
2016-03-07 20:44:07 +00:00
2017-02-09 20:21:52 +00:00
$response = $this -> server -> dispatch ( new WP_REST_Request ( 'GET' , '/wc/v2/settings/coupon-data' ) );
2016-03-07 21:54:28 +00:00
$this -> assertEquals ( 401 , $response -> get_status () );
2016-03-07 20:44:07 +00:00
}
2016-03-07 21:46:40 +00:00
/**
2016-03-24 21:01:22 +00:00
* Test updating a single setting .
2016-07-19 18:24:05 +00:00
*
2017-03-15 16:36:53 +00:00
* @ since 3.0 . 0
2016-03-24 21:01:22 +00:00
*/
public function test_update_setting () {
wp_set_current_user ( $this -> user );
// test defaults first
2017-02-09 20:21:52 +00:00
$response = $this -> server -> dispatch ( new WP_REST_Request ( 'GET' , '/wc/v2/settings/test/woocommerce_shop_page_display' ) );
2016-03-24 21:01:22 +00:00
$data = $response -> get_data ();
$this -> assertEquals ( '' , $data [ 'value' ] );
// test updating shop display setting
2017-02-09 20:21:52 +00:00
$request = new WP_REST_Request ( 'PUT' , sprintf ( '/wc/v2/settings/%s/%s' , 'test' , 'woocommerce_shop_page_display' ) );
2016-03-24 21:01:22 +00:00
$request -> set_body_params ( array (
'value' => 'both' ,
) );
$response = $this -> server -> dispatch ( $request );
$data = $response -> get_data ();
$this -> assertEquals ( 'both' , $data [ 'value' ] );
$this -> assertEquals ( 'both' , get_option ( 'woocommerce_shop_page_display' ) );
2017-02-09 20:21:52 +00:00
$request = new WP_REST_Request ( 'PUT' , sprintf ( '/wc/v2/settings/%s/%s' , 'test' , 'woocommerce_shop_page_display' ) );
2016-03-24 21:01:22 +00:00
$request -> set_body_params ( array (
'value' => 'subcategories' ,
) );
$response = $this -> server -> dispatch ( $request );
$data = $response -> get_data ();
$this -> assertEquals ( 'subcategories' , $data [ 'value' ] );
$this -> assertEquals ( 'subcategories' , get_option ( 'woocommerce_shop_page_display' ) );
2017-02-09 20:21:52 +00:00
$request = new WP_REST_Request ( 'PUT' , sprintf ( '/wc/v2/settings/%s/%s' , 'test' , 'woocommerce_shop_page_display' ) );
2016-03-24 21:01:22 +00:00
$request -> set_body_params ( array (
'value' => '' ,
) );
$response = $this -> server -> dispatch ( $request );
$data = $response -> get_data ();
$this -> assertEquals ( '' , $data [ 'value' ] );
$this -> assertEquals ( '' , get_option ( 'woocommerce_shop_page_display' ) );
}
/**
* Test updating multiple settings at once .
2016-07-19 18:24:05 +00:00
*
2017-03-15 16:36:53 +00:00
* @ since 3.0 . 0
2016-03-24 21:01:22 +00:00
*/
public function test_update_settings () {
wp_set_current_user ( $this -> user );
// test defaults first
2017-02-09 20:21:52 +00:00
$response = $this -> server -> dispatch ( new WP_REST_Request ( 'GET' , '/wc/v2/settings/test' ) );
2016-03-24 21:01:22 +00:00
$data = $response -> get_data ();
2016-06-08 19:08:49 +00:00
$this -> assertEquals ( '' , $data [ 0 ][ 'value' ] );
2016-03-24 21:01:22 +00:00
// test setting both at once
2017-02-09 20:21:52 +00:00
$request = new WP_REST_Request ( 'POST' , '/wc/v2/settings/test/batch' );
2016-03-24 21:01:22 +00:00
$request -> set_body_params ( array (
2016-06-08 19:08:49 +00:00
'update' => array (
array (
2017-03-23 23:45:19 +00:00
'id' => 'woocommerce_shop_page_display' ,
'value' => 'both' ,
2016-06-08 19:08:49 +00:00
),
2016-03-24 21:01:22 +00:00
),
) );
$response = $this -> server -> dispatch ( $request );
$data = $response -> get_data ();
2017-03-23 23:45:19 +00:00
2016-06-08 19:08:49 +00:00
$this -> assertEquals ( 'both' , $data [ 'update' ][ 0 ][ 'value' ] );
2016-03-24 21:01:22 +00:00
$this -> assertEquals ( 'both' , get_option ( 'woocommerce_shop_page_display' ) );
// test updating one, but making sure the other value stays the same
2017-02-09 20:21:52 +00:00
$request = new WP_REST_Request ( 'POST' , '/wc/v2/settings/test/batch' );
2016-03-24 21:01:22 +00:00
$request -> set_body_params ( array (
2016-06-08 19:08:49 +00:00
'update' => array (
array (
'id' => 'woocommerce_shop_page_display' ,
'value' => 'subcategories' ,
),
2016-03-24 21:01:22 +00:00
),
) );
$response = $this -> server -> dispatch ( $request );
$data = $response -> get_data ();
2016-06-08 19:08:49 +00:00
$this -> assertEquals ( 'subcategories' , $data [ 'update' ][ 0 ][ 'value' ] );
2016-03-24 21:01:22 +00:00
$this -> assertEquals ( 'subcategories' , get_option ( 'woocommerce_shop_page_display' ) );
}
/**
* Test getting a single setting .
2016-07-19 18:24:05 +00:00
*
2017-03-15 16:36:53 +00:00
* @ since 3.0 . 0
2016-03-24 21:01:22 +00:00
*/
public function test_get_setting () {
wp_set_current_user ( $this -> user );
// test getting an invalid setting from a group that does not exist
2017-02-09 20:21:52 +00:00
$response = $this -> server -> dispatch ( new WP_REST_Request ( 'GET' , '/wc/v2/settings/not-real/woocommerce_shop_page_display' ) );
2016-03-24 21:01:22 +00:00
$data = $response -> get_data ();
$this -> assertEquals ( 404 , $response -> get_status () );
// test getting an invalid setting from a group that does exist
2017-02-09 20:21:52 +00:00
$response = $this -> server -> dispatch ( new WP_REST_Request ( 'GET' , '/wc/v2/settings/invalid/invalid' ) );
2016-03-24 21:01:22 +00:00
$data = $response -> get_data ();
$this -> assertEquals ( 404 , $response -> get_status () );
// test getting a valid setting
2017-02-09 20:21:52 +00:00
$response = $this -> server -> dispatch ( new WP_REST_Request ( 'GET' , '/wc/v2/settings/test/woocommerce_shop_page_display' ) );
2016-03-24 21:01:22 +00:00
$data = $response -> get_data ();
$this -> assertEquals ( 200 , $response -> get_status () );
2016-10-14 11:22:25 +00:00
$this -> assertEquals ( 'woocommerce_shop_page_display' , $data [ 'id' ] );
$this -> assertEquals ( 'Shop page display' , $data [ 'label' ] );
$this -> assertEquals ( '' , $data [ 'default' ] );
$this -> assertEquals ( 'select' , $data [ 'type' ] );
$this -> assertEquals ( '' , $data [ 'value' ] );
2016-03-24 21:01:22 +00:00
}
/**
* Test getting a single setting without valid user permissions .
2016-07-19 18:24:05 +00:00
*
2017-03-15 16:36:53 +00:00
* @ since 3.0 . 0
2016-03-24 21:01:22 +00:00
*/
public function test_get_setting_without_permission () {
wp_set_current_user ( 0 );
2017-02-09 20:21:52 +00:00
$response = $this -> server -> dispatch ( new WP_REST_Request ( 'GET' , '/wc/v2/settings/test/woocommerce_shop_page_display' ) );
2016-03-24 21:01:22 +00:00
$this -> assertEquals ( 401 , $response -> get_status () );
}
2016-06-13 20:27:54 +00:00
/**
* Tests the GET single setting route handler receiving an empty setting ID .
2016-07-19 18:24:05 +00:00
*
2017-03-15 16:36:53 +00:00
* @ since 3.0 . 0
2016-06-13 20:27:54 +00:00
*/
public function test_get_setting_empty_setting_id () {
$result = $this -> endpoint -> get_setting ( 'test' , '' );
$this -> assertIsWPError ( $result );
}
/**
* Tests the GET single setting route handler receiving an invalid setting ID .
2016-07-19 18:24:05 +00:00
*
2017-03-15 16:36:53 +00:00
* @ since 3.0 . 0
2016-06-13 20:27:54 +00:00
*/
public function test_get_setting_invalid_setting_id () {
$result = $this -> endpoint -> get_setting ( 'test' , 'invalid' );
$this -> assertIsWPError ( $result );
}
/**
* Tests the GET single setting route handler encountering an invalid setting type .
2016-07-19 18:24:05 +00:00
*
2017-03-15 16:36:53 +00:00
* @ since 3.0 . 0
2016-06-13 20:27:54 +00:00
*/
public function test_get_setting_invalid_setting_type () {
2017-03-23 23:45:19 +00:00
// $controller = $this->getMock( 'WC_Rest_Setting_Options_Controller', array( 'get_group_settings', 'is_setting_type_valid' ) );
$controller = $this -> getMockBuilder ( 'WC_Rest_Setting_Options_Controller' ) -> setMethods ( array ( 'get_group_settings' , 'is_setting_type_valid' ) ) -> getMock ();
2016-06-13 20:27:54 +00:00
$controller
-> expects ( $this -> any () )
-> method ( 'get_group_settings' )
-> will ( $this -> returnValue ( WC_Helper_Settings :: register_test_settings ( array () ) ) );
$controller
-> expects ( $this -> any () )
-> method ( 'is_setting_type_valid' )
-> will ( $this -> returnValue ( false ) );
2016-10-14 11:22:25 +00:00
$result = $controller -> get_setting ( 'test' , 'woocommerce_shop_page_display' );
2016-06-13 20:27:54 +00:00
$this -> assertIsWPError ( $result );
}
2016-03-24 21:01:22 +00:00
/**
* Test updating a single setting without valid user permissions .
2016-07-19 18:24:05 +00:00
*
2017-03-15 16:36:53 +00:00
* @ since 3.0 . 0
2016-03-24 21:01:22 +00:00
*/
public function test_update_setting_without_permission () {
wp_set_current_user ( 0 );
2017-02-09 20:21:52 +00:00
$request = new WP_REST_Request ( 'PUT' , sprintf ( '/wc/v2/settings/%s/%s' , 'test' , 'woocommerce_shop_page_display' ) );
2016-03-24 21:01:22 +00:00
$request -> set_body_params ( array (
2016-10-14 11:22:25 +00:00
'value' => 'subcategories' ,
2016-03-24 21:01:22 +00:00
) );
$response = $this -> server -> dispatch ( $request );
$this -> assertEquals ( 401 , $response -> get_status () );
}
/**
* Test updating multiple settings without valid user permissions .
2016-07-19 18:24:05 +00:00
*
2017-03-15 16:36:53 +00:00
* @ since 3.0 . 0
2016-03-24 21:01:22 +00:00
*/
public function test_update_settings_without_permission () {
wp_set_current_user ( 0 );
2017-02-09 20:21:52 +00:00
$request = new WP_REST_Request ( 'POST' , '/wc/v2/settings/test/batch' );
2016-03-24 21:01:22 +00:00
$request -> set_body_params ( array (
2016-06-08 19:08:49 +00:00
'update' => array (
array (
'id' => 'woocommerce_shop_page_display' ,
'value' => 'subcategories' ,
),
2016-03-24 21:01:22 +00:00
),
) );
$response = $this -> server -> dispatch ( $request );
$this -> assertEquals ( 401 , $response -> get_status () );
}
2016-06-13 20:27:54 +00:00
/**
* Test updating a bad setting ID .
2016-07-19 18:24:05 +00:00
*
2017-03-15 16:36:53 +00:00
* @ since 3.0 . 0
2017-03-23 23:45:19 +00:00
* @ covers WC_Rest_Setting_Options_Controller :: update_item
2016-06-13 20:27:54 +00:00
*/
public function test_update_setting_bad_setting_id () {
wp_set_current_user ( $this -> user );
2017-02-09 20:21:52 +00:00
$request = new WP_REST_Request ( 'PUT' , '/wc/v2/settings/test/invalid' );
2016-06-13 20:27:54 +00:00
$request -> set_body_params ( array (
'value' => 'test' ,
) );
$response = $this -> server -> dispatch ( $request );
$this -> assertEquals ( 404 , $response -> get_status () );
}
2016-03-28 19:04:26 +00:00
/**
2016-09-02 02:40:36 +00:00
* Tests our classic setting registration to make sure settings added for WP - Admin are available over the API .
*
2017-03-15 16:46:02 +00:00
* @ since 3.0 . 0
2016-09-02 02:40:36 +00:00
*/
2016-03-28 19:04:26 +00:00
public function test_classic_settings () {
wp_set_current_user ( $this -> user );
// Make sure the group is properly registered
2017-02-09 20:21:52 +00:00
$response = $this -> server -> dispatch ( new WP_REST_Request ( 'GET' , '/wc/v2/settings/products' ) );
2016-03-28 19:04:26 +00:00
$data = $response -> get_data ();
2016-06-08 19:08:49 +00:00
$this -> assertTrue ( is_array ( $data ) );
2016-03-28 19:04:26 +00:00
$this -> assertContains ( array (
2016-06-08 19:08:49 +00:00
'id' => 'woocommerce_downloads_require_login' ,
2016-10-12 10:16:30 +00:00
'label' => 'Access restriction' ,
2016-03-28 19:04:26 +00:00
'description' => 'Downloads require login' ,
2016-06-08 19:08:49 +00:00
'type' => 'checkbox' ,
'default' => 'no' ,
'tip' => 'This setting does not apply to guest purchases.' ,
'value' => 'no' ,
'_links' => array (
'self' => array (
array (
2017-02-09 20:21:52 +00:00
'href' => rest_url ( '/wc/v2/settings/products/woocommerce_downloads_require_login' ),
2016-06-08 19:08:49 +00:00
),
),
'collection' => array (
array (
2017-02-09 20:21:52 +00:00
'href' => rest_url ( '/wc/v2/settings/products' ),
2016-06-08 19:08:49 +00:00
),
),
),
2016-09-07 22:05:45 +00:00
), $data );
2016-03-28 19:04:26 +00:00
// test get single
2017-02-09 20:21:52 +00:00
$response = $this -> server -> dispatch ( new WP_REST_Request ( 'GET' , '/wc/v2/settings/products/woocommerce_dimension_unit' ) );
2016-03-28 19:04:26 +00:00
$data = $response -> get_data ();
$this -> assertEquals ( 'cm' , $data [ 'default' ] );
// test update
2017-02-09 20:21:52 +00:00
$request = new WP_REST_Request ( 'PUT' , sprintf ( '/wc/v2/settings/%s/%s' , 'products' , 'woocommerce_dimension_unit' ) );
2016-03-28 19:04:26 +00:00
$request -> set_body_params ( array (
'value' => 'yd' ,
) );
$response = $this -> server -> dispatch ( $request );
$data = $response -> get_data ();
$this -> assertEquals ( 'yd' , $data [ 'value' ] );
2016-09-02 01:51:31 +00:00
$this -> assertEquals ( 'yd' , get_option ( 'woocommerce_dimension_unit' ) );
2016-03-28 19:04:26 +00:00
}
2016-09-07 22:05:45 +00:00
/**
* Tests our email etting registration to make sure settings added for WP - Admin are available over the API .
*
2017-03-15 16:46:02 +00:00
* @ since 3.0 . 0
2016-09-07 22:05:45 +00:00
*/
public function test_email_settings () {
wp_set_current_user ( $this -> user );
2017-02-09 20:21:52 +00:00
$response = $this -> server -> dispatch ( new WP_REST_Request ( 'GET' , '/wc/v2/settings/email_new_order' ) );
2016-09-07 22:05:45 +00:00
$settings = $response -> get_data ();
$this -> assertEquals ( 200 , $response -> get_status () );
$this -> assertContains ( array (
'id' => 'recipient' ,
'label' => 'Recipient(s)' ,
'description' => 'Enter recipients (comma separated) for this email. Defaults to <code>admin@example.org</code>.' ,
'type' => 'text' ,
'default' => '' ,
'tip' => 'Enter recipients (comma separated) for this email. Defaults to <code>admin@example.org</code>.' ,
'value' => '' ,
'_links' => array (
'self' => array (
array (
2017-02-09 20:21:52 +00:00
'href' => rest_url ( '/wc/v2/settings/email_new_order/recipient' ),
2016-09-07 22:05:45 +00:00
),
),
'collection' => array (
array (
2017-02-09 20:21:52 +00:00
'href' => rest_url ( '/wc/v2/settings/email_new_order' ),
2016-09-07 22:05:45 +00:00
),
),
),
), $settings );
// test get single
2017-02-09 20:21:52 +00:00
$response = $this -> server -> dispatch ( new WP_REST_Request ( 'GET' , '/wc/v2/settings/email_new_order/subject' ) );
2016-09-07 22:05:45 +00:00
$setting = $response -> get_data ();
$this -> assertEquals ( array (
'id' => 'subject' ,
'label' => 'Subject' ,
'description' => 'This controls the email subject line. Leave blank to use the default subject: <code>[{site_title}] New customer order ({order_number}) - {order_date}</code>.' ,
'type' => 'text' ,
'default' => '' ,
'tip' => 'This controls the email subject line. Leave blank to use the default subject: <code>[{site_title}] New customer order ({order_number}) - {order_date}</code>.' ,
'value' => '' ,
), $setting );
// test update
2017-02-09 20:21:52 +00:00
$request = new WP_REST_Request ( 'PUT' , sprintf ( '/wc/v2/settings/%s/%s' , 'email_new_order' , 'subject' ) );
2016-09-07 22:05:45 +00:00
$request -> set_body_params ( array (
'value' => 'This is my subject' ,
) );
$response = $this -> server -> dispatch ( $request );
$setting = $response -> get_data ();
$this -> assertEquals ( array (
'id' => 'subject' ,
'label' => 'Subject' ,
'description' => 'This controls the email subject line. Leave blank to use the default subject: <code>[{site_title}] New customer order ({order_number}) - {order_date}</code>.' ,
'type' => 'text' ,
'default' => '' ,
'tip' => 'This controls the email subject line. Leave blank to use the default subject: <code>[{site_title}] New customer order ({order_number}) - {order_date}</code>.' ,
'value' => 'This is my subject' ,
), $setting );
2016-09-07 22:24:04 +00:00
// test updating another subject and making sure it works with a "similar" id
2017-02-09 20:21:52 +00:00
$request = new WP_REST_Request ( 'GET' , sprintf ( '/wc/v2/settings/%s/%s' , 'email_customer_new_account' , 'subject' ) );
2016-09-07 22:24:04 +00:00
$response = $this -> server -> dispatch ( $request );
$setting = $response -> get_data ();
$this -> assertEmpty ( $setting [ 'value' ] );
// test update
2017-02-09 20:21:52 +00:00
$request = new WP_REST_Request ( 'PUT' , sprintf ( '/wc/v2/settings/%s/%s' , 'email_customer_new_account' , 'subject' ) );
2016-09-07 22:24:04 +00:00
$request -> set_body_params ( array (
'value' => 'This is my new subject' ,
) );
$response = $this -> server -> dispatch ( $request );
$setting = $response -> get_data ();
$this -> assertEquals ( 'This is my new subject' , $setting [ 'value' ] );
// make sure the other is what we left it
2017-02-09 20:21:52 +00:00
$response = $this -> server -> dispatch ( new WP_REST_Request ( 'GET' , '/wc/v2/settings/email_new_order/subject' ) );
2016-09-07 22:24:04 +00:00
$setting = $response -> get_data ();
$this -> assertEquals ( 'This is my subject' , $setting [ 'value' ] );
2016-09-07 22:05:45 +00:00
}
2016-09-08 22:14:40 +00:00
/**
* Test validation of checkbox settings .
*
2017-03-15 16:46:02 +00:00
* @ since 3.0 . 0
2016-09-08 22:14:40 +00:00
*/
public function test_validation_checkbox () {
wp_set_current_user ( $this -> user );
// test bogus value
2017-02-09 20:21:52 +00:00
$request = new WP_REST_Request ( 'PUT' , sprintf ( '/wc/v2/settings/%s/%s' , 'email_cancelled_order' , 'enabled' ) );
2016-09-08 22:14:40 +00:00
$request -> set_body_params ( array (
'value' => 'not_yes_or_no' ,
) );
$response = $this -> server -> dispatch ( $request );
$this -> assertEquals ( 400 , $response -> get_status () );
// test yes
2017-02-09 20:21:52 +00:00
$request = new WP_REST_Request ( 'PUT' , sprintf ( '/wc/v2/settings/%s/%s' , 'email_cancelled_order' , 'enabled' ) );
2016-09-08 22:14:40 +00:00
$request -> set_body_params ( array (
'value' => 'yes' ,
) );
$response = $this -> server -> dispatch ( $request );
$this -> assertEquals ( 200 , $response -> get_status () );
// test no
2017-02-09 20:21:52 +00:00
$request = new WP_REST_Request ( 'PUT' , sprintf ( '/wc/v2/settings/%s/%s' , 'email_cancelled_order' , 'enabled' ) );
2016-09-08 22:14:40 +00:00
$request -> set_body_params ( array (
'value' => 'no' ,
) );
$response = $this -> server -> dispatch ( $request );
$this -> assertEquals ( 200 , $response -> get_status () );
}
/**
* Test validation of radio settings .
*
2017-03-15 16:46:02 +00:00
* @ since 3.0 . 0
2016-09-08 22:14:40 +00:00
*/
public function test_validation_radio () {
wp_set_current_user ( $this -> user );
// not a valid option
2017-02-09 20:21:52 +00:00
$request = new WP_REST_Request ( 'PUT' , sprintf ( '/wc/v2/settings/%s/%s' , 'shipping' , 'woocommerce_ship_to_destination' ) );
2016-09-08 22:14:40 +00:00
$request -> set_body_params ( array (
'value' => 'billing2' ,
) );
$response = $this -> server -> dispatch ( $request );
$this -> assertEquals ( 400 , $response -> get_status () );
// valid
2017-02-09 20:21:52 +00:00
$request = new WP_REST_Request ( 'PUT' , sprintf ( '/wc/v2/settings/%s/%s' , 'shipping' , 'woocommerce_ship_to_destination' ) );
2016-09-08 22:14:40 +00:00
$request -> set_body_params ( array (
'value' => 'billing' ,
) );
$response = $this -> server -> dispatch ( $request );
$this -> assertEquals ( 200 , $response -> get_status () );
}
/**
* Test validation of multiselect .
*
2017-03-15 16:46:02 +00:00
* @ since 3.0 . 0
2016-09-08 22:14:40 +00:00
*/
public function test_validation_multiselect () {
wp_set_current_user ( $this -> user );
2017-02-09 20:21:52 +00:00
$response = $this -> server -> dispatch ( new WP_REST_Request ( 'GET' , sprintf ( '/wc/v2/settings/%s/%s' , 'general' , 'woocommerce_specific_allowed_countries' ) ) );
2016-09-08 22:14:40 +00:00
$setting = $response -> get_data ();
$this -> assertEmpty ( $setting [ 'value' ] );
2017-02-09 20:21:52 +00:00
$request = new WP_REST_Request ( 'PUT' , sprintf ( '/wc/v2/settings/%s/%s' , 'general' , 'woocommerce_specific_allowed_countries' ) );
2016-09-08 22:14:40 +00:00
$request -> set_body_params ( array (
'value' => array ( 'AX' , 'DZ' , 'MMM' ),
) );
$response = $this -> server -> dispatch ( $request );
$setting = $response -> get_data ();
$this -> assertEquals ( array ( 'AX' , 'DZ' ), $setting [ 'value' ] );
}
/**
* Test validation of select .
*
2017-03-15 16:46:02 +00:00
* @ since 3.0 . 0
2016-09-08 22:14:40 +00:00
*/
public function test_validation_select () {
wp_set_current_user ( $this -> user );
2017-02-09 20:21:52 +00:00
$response = $this -> server -> dispatch ( new WP_REST_Request ( 'GET' , sprintf ( '/wc/v2/settings/%s/%s' , 'products' , 'woocommerce_weight_unit' ) ) );
2016-09-08 22:14:40 +00:00
$setting = $response -> get_data ();
$this -> assertEquals ( 'kg' , $setting [ 'value' ] );
// invalid
2017-02-09 20:21:52 +00:00
$request = new WP_REST_Request ( 'PUT' , sprintf ( '/wc/v2/settings/%s/%s' , 'products' , 'woocommerce_weight_unit' ) );
2016-09-08 22:14:40 +00:00
$request -> set_body_params ( array (
'value' => 'pounds' , // invalid, should be lbs
) );
$response = $this -> server -> dispatch ( $request );
$this -> assertEquals ( 400 , $response -> get_status () );
// valid
2017-02-09 20:21:52 +00:00
$request = new WP_REST_Request ( 'PUT' , sprintf ( '/wc/v2/settings/%s/%s' , 'products' , 'woocommerce_weight_unit' ) );
2016-09-08 22:14:40 +00:00
$request -> set_body_params ( array (
'value' => 'lbs' , // invalid, should be lbs
) );
$response = $this -> server -> dispatch ( $request );
$setting = $response -> get_data ();
$this -> assertEquals ( 'lbs' , $setting [ 'value' ] );
}
/**
* Test validation of image_width .
*
2017-03-15 16:46:02 +00:00
* @ since 3.0 . 0
2016-09-08 22:14:40 +00:00
*/
public function test_validation_image_width () {
wp_set_current_user ( $this -> user );
2017-02-09 20:21:52 +00:00
$response = $this -> server -> dispatch ( new WP_REST_Request ( 'GET' , sprintf ( '/wc/v2/settings/%s/%s' , 'products' , 'shop_thumbnail_image_size' ) ) );
2016-09-08 22:14:40 +00:00
$setting = $response -> get_data ();
$this -> assertEquals ( array ( 'width' => 180 , 'height' => 180 , 'crop' => true ), $setting [ 'value' ] );
// test bogus
2017-02-09 20:21:52 +00:00
$request = new WP_REST_Request ( 'PUT' , sprintf ( '/wc/v2/settings/%s/%s' , 'products' , 'shop_thumbnail_image_size' ) );
2016-09-08 22:14:40 +00:00
$request -> set_body_params ( array (
'value' => array (
'width' => 400 ,
'height' => 200 ,
'crop' => 'asdasdasd' ,
),
) );
$response = $this -> server -> dispatch ( $request );
$setting = $response -> get_data ();
$this -> assertEquals ( array ( 'width' => 400 , 'height' => 200 , 'crop' => true ), $setting [ 'value' ] );
2017-02-09 20:21:52 +00:00
$request = new WP_REST_Request ( 'PUT' , sprintf ( '/wc/v2/settings/%s/%s' , 'products' , 'shop_thumbnail_image_size' ) );
2016-09-08 22:14:40 +00:00
$request -> set_body_params ( array (
'value' => array (
'width' => 200 ,
'height' => 100 ,
'crop' => false ,
),
) );
$response = $this -> server -> dispatch ( $request );
$setting = $response -> get_data ();
$this -> assertEquals ( array ( 'width' => 200 , 'height' => 100 , 'crop' => false ), $setting [ 'value' ] );
}
2017-05-15 17:21:06 +00:00
/**
* Test to make sure the 'base location' setting is present in the response .
* That it is returned as 'select' and not 'single_select_country' ,
* and that both state and country options are returned .
*
* @ since 3.0 . 7
*/
public function test_woocommerce_default_country () {
wp_set_current_user ( $this -> user );
$response = $this -> server -> dispatch ( new WP_REST_Request ( 'GET' , '/wc/v2/settings/general/woocommerce_default_country' ) );
$setting = $response -> get_data ();
$this -> assertEquals ( 'select' , $setting [ 'type' ] );
$this -> assertArrayHasKey ( 'GB' , $setting [ 'options' ] );
$this -> assertArrayHasKey ( 'US:OR' , $setting [ 'options' ] );
}
2016-03-07 16:46:58 +00:00
}