/**
* Test the is_customer_outside_base method
*/
public function test_is_customer_outside_base()
{
// Get the original settings for the session and the WooCommerce options
$original_chosen_shipping_methods = \WC_Helper_Customer::get_chosen_shipping_methods();
$original_tax_based_on = \WC_Helper_Customer::get_tax_based_on();
$original_customer_details = \WC_Helper_Customer::get_customer_details();
$customer = \WC_Helper_Customer::create_mock_customer();
// Create dummy product, and add the product to the cart.
$product = \WC_Helper_Product::create_simple_product();
WC()->cart->add_to_cart($product->id, 1);
// Customer is going with the Local Pickup option, and the store calculates tax based on the store location.
\WC_Helper_Customer::set_chosen_shipping_methods(array('local_pickup'));
\WC_Helper_Customer::set_tax_based_on('base');
$this->assertEquals($customer->is_customer_outside_base(), false);
// Customer is going with the Local Pickup option, and the store calculates tax based on the customer's billing address.
\WC_Helper_Customer::set_chosen_shipping_methods(array('local_pickup'));
\WC_Helper_Customer::set_tax_based_on('billing');
$this->assertEquals($customer->is_customer_outside_base(), false);
// Customer is going with the Free Shipping option, and the store calculates tax based on the customer's billing address.
\WC_Helper_Customer::set_chosen_shipping_methods(array('free_shipping'));
\WC_Helper_Customer::set_tax_based_on('billing');
$this->assertEquals($customer->is_customer_outside_base(), true);
// Customer is going with the Free Shipping option, and the store calculates tax based on the store base location.
\WC_Helper_Customer::set_chosen_shipping_methods(array('free_shipping'));
\WC_Helper_Customer::set_tax_based_on('base');
$this->assertEquals($customer->is_customer_outside_base(), false);
//Now reset the settings back to the way they were before this test
\WC_Helper_Customer::set_chosen_shipping_methods($original_chosen_shipping_methods);
\WC_Helper_Customer::set_tax_based_on($original_tax_based_on);
\WC_Helper_Customer::set_customer_details($original_customer_details);
// Clean up the cart
WC()->cart->empty_cart();
// Clean up product
\WC_Helper_Product::delete_product($product->id);
}