2016-08-25 18:48:17 +00:00
< ? php
/**
* Tests for the Shipping Methods REST API .
*
* @ package WooCommerce\Tests\API
* @ since 2.7 . 0
*/
class Shipping_Methods extends WC_REST_Unit_Test_Case {
/**
* Setup our test server , endpoints , and user info .
*/
public function setUp () {
parent :: setUp ();
$this -> endpoint = new WC_REST_Shipping_Methods_Controller ();
$this -> user = $this -> factory -> user -> create ( array (
'role' => 'administrator' ,
) );
}
/**
* Test route registration .
*
* @ since 2.7 . 0
*/
public function test_register_routes () {
$routes = $this -> server -> get_routes ();
$this -> assertArrayHasKey ( '/wc/v1/shipping_methods' , $routes );
$this -> assertArrayHasKey ( '/wc/v1/shipping_methods/(?P<id>[\w-]+)' , $routes );
}
/**
* Test getting all shipping methods .
*
* @ since 2.7 . 0
*/
public function test_get_shipping_methods () {
wp_set_current_user ( $this -> user );
$response = $this -> server -> dispatch ( new WP_REST_Request ( 'GET' , '/wc/v1/shipping_methods' ) );
$methods = $response -> get_data ();
$this -> assertEquals ( 200 , $response -> get_status () );
$this -> assertContains ( array (
'id' => 'free_shipping' ,
'title' => 'Free Shipping' ,
'description' => 'Free Shipping is a special method which can be triggered with coupons and minimum spends.' ,
'_links' => array (
'self' => array (
array (
'href' => rest_url ( '/wc/v1/shipping_methods/free_shipping' ),
),
),
'collection' => array (
array (
'href' => rest_url ( '/wc/v1/shipping_methods' ),
),
),
),
), $methods );
}
/**
* Tests to make sure shipping methods cannot viewed without valid permissions .
*
* @ since 2.7 . 0
*/
public function test_get_shipping_methods_without_permission () {
wp_set_current_user ( 0 );
$response = $this -> server -> dispatch ( new WP_REST_Request ( 'GET' , '/wc/v1/shipping_methods' ) );
$this -> assertEquals ( 401 , $response -> get_status () );
}
/**
* Tests getting a single shipping method .
*
* @ since 2.7 . 0
*/
public function test_get_shipping_method () {
wp_set_current_user ( $this -> user );
$response = $this -> server -> dispatch ( new WP_REST_Request ( 'GET' , '/wc/v1/shipping_methods/local_pickup' ) );
$method = $response -> get_data ();
$this -> assertEquals ( 200 , $response -> get_status () );
$this -> assertEquals ( array (
'id' => 'local_pickup' ,
'title' => 'Local Pickup' ,
'description' => 'Allow customers to pick up orders themselves. By default, when using local pickup store base taxes will apply regardless of customer address.' ,
), $method );
}
/**
* Tests getting a single shipping method without the correct permissions .
*
* @ since 2.7 . 0
*/
public function test_get_shipping_method_without_permission () {
wp_set_current_user ( 0 );
$response = $this -> server -> dispatch ( new WP_REST_Request ( 'GET' , '/wc/v1/shipping_methods/local_pickup' ) );
$this -> assertEquals ( 401 , $response -> get_status () );
}
/**
* Tests getting a shipping method with an invalid ID .
*
* @ since 2.7 . 0
*/
public function test_get_shipping_method_invalid_id () {
wp_set_current_user ( $this -> user );
$response = $this -> server -> dispatch ( new WP_REST_Request ( 'GET' , '/wc/v1/shipping_methods/fake_method' ) );
$this -> assertEquals ( 404 , $response -> get_status () );
}
/**
2016-08-31 21:16:52 +00:00
* Test the shipping method schema .
2016-08-25 18:48:17 +00:00
*
* @ since 2.7 . 0
*/
public function test_shipping_method_schema () {
wp_set_current_user ( $this -> user );
$request = new WP_REST_Request ( 'OPTIONS' , '/wc/v1/shipping_methods' );
$response = $this -> server -> dispatch ( $request );
$data = $response -> get_data ();
$properties = $data [ 'schema' ][ 'properties' ];
$this -> assertEquals ( 3 , count ( $properties ) );
$this -> assertArrayHasKey ( 'id' , $properties );
$this -> assertArrayHasKey ( 'title' , $properties );
$this -> assertArrayHasKey ( 'description' , $properties );
}
}