2016-07-26 17:23:36 +00:00
< ? php
/**
* System Status REST Tests
* @ package WooCommerce\Tests\API
* @ since 2.7
*/
2016-07-27 19:19:14 +00:00
class WC_Tests_REST_System_Status extends WC_REST_Unit_Test_Case {
2016-07-26 17:23:36 +00:00
/**
2016-07-27 19:19:14 +00:00
* Setup our test server .
*/
2016-07-26 17:23:36 +00:00
public function setUp () {
parent :: setUp ();
2016-07-27 19:19:14 +00:00
$this -> endpoint = new WC_REST_System_Status_Controller ();
$this -> user = $this -> factory -> user -> create ( array (
'role' => 'administrator' ,
) );
2016-07-26 17:23:36 +00:00
}
/**
* Test route registration .
*/
public function test_register_routes () {
$routes = $this -> server -> get_routes ();
2016-07-27 21:06:14 +00:00
$this -> assertArrayHasKey ( '/wc/v1/system_status' , $routes );
2016-08-05 21:22:34 +00:00
$this -> assertArrayHasKey ( '/wc/v1/system_status/tools' , $routes );
$this -> assertArrayHasKey ( '/wc/v1/system_status/tools/(?P<id>[\w-]+)' , $routes );
2016-07-26 17:23:36 +00:00
}
2016-07-27 19:19:14 +00:00
/**
* Test to make sure system status cannot be accessed without valid creds
*
* @ since 2.7 . 0
*/
public function test_get_system_status_info_without_permission () {
wp_set_current_user ( 0 );
2016-07-27 21:06:14 +00:00
$response = $this -> server -> dispatch ( new WP_REST_Request ( 'GET' , '/wc/v1/system_status' ) );
2016-07-27 19:19:14 +00:00
$this -> assertEquals ( 401 , $response -> get_status () );
}
/**
* Test to make sure root properties are present .
* ( environment , theme , database , etc ) .
*
* @ since 2.7 . 0
*/
public function test_get_system_status_info_returns_root_properties () {
wp_set_current_user ( $this -> user );
2016-07-27 21:06:14 +00:00
$response = $this -> server -> dispatch ( new WP_REST_Request ( 'GET' , '/wc/v1/system_status' ) );
2016-07-27 19:19:14 +00:00
$data = $response -> get_data ();
$this -> assertArrayHasKey ( 'environment' , $data );
$this -> assertArrayHasKey ( 'database' , $data );
$this -> assertArrayHasKey ( 'active_plugins' , $data );
$this -> assertArrayHasKey ( 'theme' , $data );
$this -> assertArrayHasKey ( 'settings' , $data );
2016-07-27 20:59:16 +00:00
$this -> assertArrayHasKey ( 'pages' , $data );
2016-07-27 19:19:14 +00:00
}
/**
* Test to make sure environment response is correct .
*
* @ since 2.7 . 0
*/
public function test_get_system_status_info_environment () {
wp_set_current_user ( $this -> user );
2016-07-27 21:06:14 +00:00
$response = $this -> server -> dispatch ( new WP_REST_Request ( 'GET' , '/wc/v1/system_status' ) );
2016-07-27 19:19:14 +00:00
$data = $response -> get_data ();
$environment = $data [ 'environment' ];
// Make sure all expected data is present
$this -> assertEquals ( 30 , count ( $environment ) );
// Test some responses to make sure they match up
$this -> assertEquals ( get_option ( 'home' ), $environment [ 'home_url' ] );
$this -> assertEquals ( get_option ( 'siteurl' ), $environment [ 'site_url' ] );
2016-07-27 20:59:16 +00:00
$this -> assertEquals ( WC () -> version , $environment [ 'version' ] );
2016-07-27 19:19:14 +00:00
}
/**
* Test to make sure database response is correct .
*
* @ since 2.7 . 0
*/
public function test_get_system_status_info_database () {
global $wpdb ;
wp_set_current_user ( $this -> user );
2016-07-27 21:06:14 +00:00
$response = $this -> server -> dispatch ( new WP_REST_Request ( 'GET' , '/wc/v1/system_status' ) );
2016-07-27 19:19:14 +00:00
$data = $response -> get_data ();
$database = $data [ 'database' ];
$this -> assertEquals ( get_option ( 'woocommerce_db_version' ), $database [ 'wc_database_version' ] );
$this -> assertEquals ( $wpdb -> prefix , $database [ 'database_prefix' ] );
$this -> assertEquals ( WC_Geolocation :: get_local_database_path (), $database [ 'maxmind_geoip_database' ] );
$this -> assertArrayHasKey ( 'woocommerce_payment_tokens' , $database [ 'database_tables' ] );
}
/**
* Test to make sure active plugins response is correct .
*
* @ since 2.7 . 0
*/
public function test_get_system_status_info_active_plugins () {
wp_set_current_user ( $this -> user );
$actual_plugins = array ( 'hello.php' );
update_option ( 'active_plugins' , $actual_plugins );
2016-07-27 21:06:14 +00:00
$response = $this -> server -> dispatch ( new WP_REST_Request ( 'GET' , '/wc/v1/system_status' ) );
2016-07-27 19:19:14 +00:00
update_option ( 'active_plugins' , array () );
$data = $response -> get_data ();
$plugins = $data [ 'active_plugins' ];
$this -> assertEquals ( 1 , count ( $plugins ) );
$this -> assertEquals ( 'Hello Dolly' , $plugins [ 0 ][ 'name' ] );
}
/**
* Test to make sure theme response is correct .
*
* @ since 2.7 . 0
*/
public function test_get_system_status_info_theme () {
wp_set_current_user ( $this -> user );
$active_theme = wp_get_theme ();
2016-07-27 21:06:14 +00:00
$response = $this -> server -> dispatch ( new WP_REST_Request ( 'GET' , '/wc/v1/system_status' ) );
2016-07-27 19:19:14 +00:00
$data = $response -> get_data ();
$theme = $data [ 'theme' ];
2016-08-03 17:44:20 +00:00
$this -> assertEquals ( 13 , count ( $theme ) );
2016-07-27 19:19:14 +00:00
$this -> assertEquals ( $active_theme -> Name , $theme [ 'name' ] );
}
/**
* Test to make sure settings response is correct .
*
* @ since 2.7 . 0
*/
public function test_get_system_status_info_settings () {
wp_set_current_user ( $this -> user );
$term_response = array ();
$terms = get_terms ( 'product_type' , array ( 'hide_empty' => 0 ) );
foreach ( $terms as $term ) {
$term_response [ $term -> slug ] = strtolower ( $term -> name );
}
2016-07-27 21:06:14 +00:00
$response = $this -> server -> dispatch ( new WP_REST_Request ( 'GET' , '/wc/v1/system_status' ) );
2016-07-27 19:19:14 +00:00
$data = $response -> get_data ();
$settings = $data [ 'settings' ];
$this -> assertEquals ( 10 , count ( $settings ) );
$this -> assertEquals ( ( 'yes' === get_option ( 'woocommerce_api_enabled' ) ), $settings [ 'api_enabled' ] );
2016-09-02 01:51:31 +00:00
$this -> assertEquals ( get_woocommerce_currency (), $settings [ 'currency' ] );
2016-07-27 19:19:14 +00:00
$this -> assertEquals ( $term_response , $settings [ 'taxonomies' ] );
}
/**
2016-07-27 20:59:16 +00:00
* Test to make sure pages response is correct .
2016-07-27 19:19:14 +00:00
*
* @ since 2.7 . 0
*/
2016-07-27 20:59:16 +00:00
public function test_get_system_status_info_pages () {
2016-07-27 19:19:14 +00:00
wp_set_current_user ( $this -> user );
2016-07-27 21:06:14 +00:00
$response = $this -> server -> dispatch ( new WP_REST_Request ( 'GET' , '/wc/v1/system_status' ) );
2016-07-27 19:19:14 +00:00
$data = $response -> get_data ();
2016-07-27 20:59:16 +00:00
$pages = $data [ 'pages' ];
$this -> assertEquals ( 4 , count ( $pages ) );
2016-07-27 19:19:14 +00:00
}
/**
* Test system status schema .
*
* @ since 2.7 . 0
*/
public function test_system_status_schema () {
2016-07-27 21:06:14 +00:00
$request = new WP_REST_Request ( 'OPTIONS' , '/wc/v1/system_status' );
2016-07-27 19:19:14 +00:00
$response = $this -> server -> dispatch ( $request );
$data = $response -> get_data ();
$properties = $data [ 'schema' ][ 'properties' ];
$this -> assertEquals ( 6 , count ( $properties ) );
$this -> assertArrayHasKey ( 'environment' , $properties );
$this -> assertArrayHasKey ( 'database' , $properties );
$this -> assertArrayHasKey ( 'active_plugins' , $properties );
$this -> assertArrayHasKey ( 'theme' , $properties );
$this -> assertArrayHasKey ( 'settings' , $properties );
2016-07-27 20:59:16 +00:00
$this -> assertArrayHasKey ( 'pages' , $properties );
2016-07-27 19:19:14 +00:00
}
2016-07-26 17:23:36 +00:00
2016-08-05 21:22:34 +00:00
/**
* Test to make sure get_items ( all tools ) response is correct .
*
* @ since 2.7 . 0
*/
public function test_get_system_tools () {
wp_set_current_user ( $this -> user );
$tools_controller = new WC_REST_System_Status_Tools_Controller ;
$raw_tools = $tools_controller -> get_tools ();
$response = $this -> server -> dispatch ( new WP_REST_Request ( 'GET' , '/wc/v1/system_status/tools' ) );
$data = $response -> get_data ();
$this -> assertEquals ( 200 , $response -> get_status () );
$this -> assertEquals ( count ( $raw_tools ), count ( $data ) );
$this -> assertContains ( array (
'id' => 'reset_tracking' ,
'name' => 'Reset Usage Tracking Settings' ,
'action' => 'Reset usage tracking settings' ,
'description' => 'This will reset your usage tracking settings, causing it to show the opt-in banner again and not sending any data.' ,
'_links' => array (
'item' => array (
array (
'href' => rest_url ( '/wc/v1/system_status/tools/reset_tracking' ),
'embeddable' => true ,
),
),
),
), $data );
}
/**
* Test to make sure system status tools cannot be accessed without valid creds
*
* @ since 2.7 . 0
*/
public function test_get_system_status_tools_without_permission () {
wp_set_current_user ( 0 );
$response = $this -> server -> dispatch ( new WP_REST_Request ( 'GET' , '/wc/v1/system_status/tools' ) );
$this -> assertEquals ( 401 , $response -> get_status () );
}
/**
* Test to make sure we can load a single tool correctly .
*
* @ since 2.7 . 0
*/
public function test_get_system_tool () {
wp_set_current_user ( $this -> user );
$tools_controller = new WC_REST_System_Status_Tools_Controller ;
$raw_tools = $tools_controller -> get_tools ();
$raw_tool = $raw_tools [ 'recount_terms' ];
$response = $this -> server -> dispatch ( new WP_REST_Request ( 'GET' , '/wc/v1/system_status/tools/recount_terms' ) );
$data = $response -> get_data ();
$this -> assertEquals ( 200 , $response -> get_status () );
$this -> assertEquals ( 'recount_terms' , $data [ 'id' ] );
$this -> assertEquals ( 'Term counts' , $data [ 'name' ] );
$this -> assertEquals ( 'Recount terms' , $data [ 'action' ] );
$this -> assertEquals ( 'This tool will recount product terms - useful when changing your settings in a way which hides products from the catalog.' , $data [ 'description' ] );
}
/**
* Test to make sure a single system status toolscannot be accessed without valid creds .
*
* @ since 2.7 . 0
*/
public function test_get_system_status_tool_without_permission () {
wp_set_current_user ( 0 );
$response = $this -> server -> dispatch ( new WP_REST_Request ( 'GET' , '/wc/v1/system_status/tools/recount_terms' ) );
$this -> assertEquals ( 401 , $response -> get_status () );
}
/**
* Test to make sure we can RUN a tool correctly .
*
* @ since 2.7 . 0
*/
public function test_execute_system_tool () {
wp_set_current_user ( $this -> user );
$tools_controller = new WC_REST_System_Status_Tools_Controller ;
$raw_tools = $tools_controller -> get_tools ();
$raw_tool = $raw_tools [ 'recount_terms' ];
$response = $this -> server -> dispatch ( new WP_REST_Request ( 'POST' , '/wc/v1/system_status/tools/recount_terms' ) );
$data = $response -> get_data ();
$this -> assertEquals ( 'recount_terms' , $data [ 'id' ] );
$this -> assertEquals ( 'Term counts' , $data [ 'name' ] );
$this -> assertEquals ( 'Recount terms' , $data [ 'action' ] );
$this -> assertEquals ( 'This tool will recount product terms - useful when changing your settings in a way which hides products from the catalog.' , $data [ 'description' ] );
$this -> assertTrue ( $data [ 'success' ] );
$response = $this -> server -> dispatch ( new WP_REST_Request ( 'POST' , '/wc/v1/system_status/tools/not_a_real_tool' ) );
$this -> assertEquals ( 404 , $response -> get_status () );
}
/**
* Test to make sure a tool cannot be run without valid creds .
*
* @ since 2.7 . 0
*/
public function test_execute_system_status_tool_without_permission () {
wp_set_current_user ( 0 );
2016-08-08 18:15:33 +00:00
$response = $this -> server -> dispatch ( new WP_REST_Request ( 'POST' , '/wc/v1/system_status/tools/recount_terms' ) );
$this -> assertEquals ( 401 , $response -> get_status () );
}
2016-08-05 21:22:34 +00:00
/**
* Test system status schema .
*
* @ since 2.7 . 0
*/
public function test_system_status_tool_schema () {
$request = new WP_REST_Request ( 'OPTIONS' , '/wc/v1/system_status/tools' );
$response = $this -> server -> dispatch ( $request );
$data = $response -> get_data ();
$properties = $data [ 'schema' ][ 'properties' ];
$this -> assertEquals ( 6 , count ( $properties ) );
$this -> assertArrayHasKey ( 'id' , $properties );
$this -> assertArrayHasKey ( 'name' , $properties );
$this -> assertArrayHasKey ( 'action' , $properties );
$this -> assertArrayHasKey ( 'description' , $properties );
$this -> assertArrayHasKey ( 'success' , $properties );
$this -> assertArrayHasKey ( 'message' , $properties );
}
2016-07-26 17:23:36 +00:00
}