2018-09-20 14:20:04 +00:00
|
|
|
<?php
|
|
|
|
/**
|
|
|
|
* Reports order stats tests.
|
|
|
|
*
|
|
|
|
* @package WooCommerce\Tests\Orders
|
|
|
|
* @todo Finish up unit testing to verify bug-free order reports.
|
|
|
|
*/
|
2018-12-11 11:41:35 +00:00
|
|
|
|
2019-08-05 18:14:25 +00:00
|
|
|
use \Automattic\WooCommerce\Admin\API\Reports\Orders\Stats\DataStore as OrdersStatsDataStore;
|
2019-08-06 19:11:33 +00:00
|
|
|
use \Automattic\WooCommerce\Admin\API\Reports\Revenue\Query as RevenueQuery;
|
2019-08-05 18:14:25 +00:00
|
|
|
|
2018-12-11 11:41:35 +00:00
|
|
|
/**
|
|
|
|
* Class WC_Admin_Tests_Reports_Revenue_Stats
|
|
|
|
*/
|
2018-09-20 14:20:04 +00:00
|
|
|
class WC_Admin_Tests_Reports_Revenue_Stats extends WC_Unit_Test_Case {
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Test the calculations and querying works correctly for the base case of 1 order.
|
|
|
|
*
|
|
|
|
* @since 3.5.0
|
|
|
|
*/
|
|
|
|
public function test_populate_and_query() {
|
|
|
|
global $wpdb;
|
|
|
|
|
|
|
|
WC_Helper_Reports::reset_stats_dbs();
|
|
|
|
|
|
|
|
// Populate all of the data.
|
|
|
|
$product = new WC_Product_Simple();
|
|
|
|
$product->set_name( 'Test Product' );
|
|
|
|
$product->set_regular_price( 25 );
|
|
|
|
$product->save();
|
|
|
|
|
2019-04-03 01:37:17 +00:00
|
|
|
$coupon = WC_Helper_Coupon::create_coupon( 'test-coupon' );
|
|
|
|
$coupon->set_amount( 20 );
|
|
|
|
$coupon->save();
|
|
|
|
|
2018-09-20 14:20:04 +00:00
|
|
|
$order = WC_Helper_Order::create_order( 1, $product );
|
|
|
|
$order->set_status( 'completed' );
|
|
|
|
$order->set_shipping_total( 10 );
|
2019-04-03 01:37:17 +00:00
|
|
|
$order->apply_coupon( $coupon );
|
2018-09-20 14:20:04 +00:00
|
|
|
$order->set_cart_tax( 5 );
|
|
|
|
$order->set_shipping_tax( 2 );
|
|
|
|
$order->set_total( 97 ); // $25x4 products + $10 shipping - $20 discount + $7 tax.
|
|
|
|
$order->save();
|
|
|
|
|
2019-01-30 16:59:45 +00:00
|
|
|
WC_Helper_Queue::run_all_pending();
|
|
|
|
|
2018-09-20 14:20:04 +00:00
|
|
|
// /reports/revenue/stats is mapped to Orders_Data_Store.
|
2019-08-05 18:14:25 +00:00
|
|
|
$data_store = new OrdersStatsDataStore();
|
2018-09-20 14:20:04 +00:00
|
|
|
|
|
|
|
$start_time = date( 'Y-m-d H:00:00', $order->get_date_created()->getOffsetTimestamp() );
|
2018-10-22 16:20:14 +00:00
|
|
|
$end_time = date( 'Y-m-d H:59:59', $order->get_date_created()->getOffsetTimestamp() );
|
2018-09-20 14:20:04 +00:00
|
|
|
|
2018-10-22 16:20:14 +00:00
|
|
|
$args = array(
|
2018-09-20 14:20:04 +00:00
|
|
|
'interval' => 'hour',
|
|
|
|
'after' => $start_time,
|
|
|
|
'before' => $end_time,
|
|
|
|
);
|
|
|
|
$expected_stats = array(
|
2018-10-22 16:20:14 +00:00
|
|
|
'totals' => array(
|
2018-10-31 19:09:38 +00:00
|
|
|
'orders_count' => 1,
|
|
|
|
'num_items_sold' => 4,
|
|
|
|
'gross_revenue' => 97,
|
|
|
|
'coupons' => 20,
|
2019-04-03 01:37:17 +00:00
|
|
|
'coupons_count' => 1,
|
2018-10-31 19:09:38 +00:00
|
|
|
'refunds' => 0,
|
|
|
|
'taxes' => 7,
|
|
|
|
'shipping' => 10,
|
|
|
|
'net_revenue' => 80,
|
|
|
|
'avg_items_per_order' => 4,
|
2018-12-26 23:49:46 +00:00
|
|
|
'avg_order_value' => 80,
|
2018-10-31 19:09:38 +00:00
|
|
|
'num_returning_customers' => 0,
|
|
|
|
'num_new_customers' => 1,
|
2019-01-11 14:29:03 +00:00
|
|
|
'products' => 1,
|
2019-01-11 17:39:57 +00:00
|
|
|
'segments' => array(),
|
2018-09-20 14:20:04 +00:00
|
|
|
),
|
|
|
|
'intervals' => array(
|
|
|
|
array(
|
2018-11-15 13:19:13 +00:00
|
|
|
'interval' => date( 'Y-m-d H', $order->get_date_created()->getTimestamp() ),
|
2018-09-20 14:20:04 +00:00
|
|
|
'date_start' => $start_time,
|
|
|
|
'date_start_gmt' => $start_time,
|
|
|
|
'date_end' => $end_time,
|
|
|
|
'date_end_gmt' => $end_time,
|
|
|
|
'subtotals' => array(
|
2018-11-02 11:24:21 +00:00
|
|
|
'orders_count' => 1,
|
|
|
|
'num_items_sold' => 4,
|
|
|
|
'gross_revenue' => 97,
|
|
|
|
'coupons' => 20,
|
2019-04-03 01:37:17 +00:00
|
|
|
'coupons_count' => 1,
|
2018-11-02 11:24:21 +00:00
|
|
|
'refunds' => 0,
|
|
|
|
'taxes' => 7,
|
|
|
|
'shipping' => 10,
|
|
|
|
'net_revenue' => 80,
|
|
|
|
'avg_items_per_order' => 4,
|
2018-12-26 23:49:46 +00:00
|
|
|
'avg_order_value' => 80,
|
2018-11-02 11:24:21 +00:00
|
|
|
'num_returning_customers' => 0,
|
|
|
|
'num_new_customers' => 1,
|
2019-01-11 17:39:57 +00:00
|
|
|
'segments' => array(),
|
2018-09-20 14:20:04 +00:00
|
|
|
),
|
|
|
|
),
|
|
|
|
),
|
2018-10-22 16:20:14 +00:00
|
|
|
'total' => 1,
|
|
|
|
'pages' => 1,
|
|
|
|
'page_no' => 1,
|
2018-09-20 14:20:04 +00:00
|
|
|
);
|
|
|
|
|
|
|
|
// Test retrieving the stats from the data store.
|
2019-02-14 20:34:38 +00:00
|
|
|
$this->assertEquals( $expected_stats, json_decode( wp_json_encode( $data_store->get_data( $args ) ), true ) );
|
2018-09-20 14:20:04 +00:00
|
|
|
|
|
|
|
// Test retrieving the stats through the query class.
|
|
|
|
$expected_stats = array(
|
2018-10-22 16:20:14 +00:00
|
|
|
'totals' => array(
|
|
|
|
'orders_count' => 1,
|
|
|
|
'num_items_sold' => 4,
|
|
|
|
'gross_revenue' => 97,
|
|
|
|
'coupons' => 20,
|
2019-04-03 01:37:17 +00:00
|
|
|
'coupons_count' => 1,
|
2018-10-22 16:20:14 +00:00
|
|
|
'refunds' => 0,
|
|
|
|
'taxes' => 7,
|
|
|
|
'shipping' => 10,
|
|
|
|
'net_revenue' => 80,
|
2018-11-02 11:24:21 +00:00
|
|
|
'products' => '1',
|
2019-01-11 17:39:57 +00:00
|
|
|
'segments' => array(),
|
2018-09-20 14:20:04 +00:00
|
|
|
),
|
|
|
|
'intervals' => array(
|
|
|
|
array(
|
2018-11-15 13:19:13 +00:00
|
|
|
'interval' => date( 'Y-m-d H', $order->get_date_created()->getTimestamp() ),
|
2018-09-20 14:20:04 +00:00
|
|
|
'date_start' => $start_time,
|
|
|
|
'date_start_gmt' => $start_time,
|
|
|
|
'date_end' => $end_time,
|
|
|
|
'date_end_gmt' => $end_time,
|
|
|
|
'subtotals' => array(
|
2018-10-22 16:20:14 +00:00
|
|
|
'orders_count' => 1,
|
|
|
|
'num_items_sold' => 4,
|
|
|
|
'gross_revenue' => 97,
|
|
|
|
'coupons' => 20,
|
2019-04-03 01:37:17 +00:00
|
|
|
'coupons_count' => 1,
|
2018-10-22 16:20:14 +00:00
|
|
|
'refunds' => 0,
|
|
|
|
'taxes' => 7,
|
|
|
|
'shipping' => 10,
|
|
|
|
'net_revenue' => 80,
|
2019-01-11 17:39:57 +00:00
|
|
|
'segments' => array(),
|
2018-09-20 14:20:04 +00:00
|
|
|
),
|
|
|
|
),
|
|
|
|
),
|
2018-10-22 16:20:14 +00:00
|
|
|
'total' => 1,
|
|
|
|
'pages' => 1,
|
|
|
|
'page_no' => 1,
|
2018-09-20 14:20:04 +00:00
|
|
|
);
|
2019-08-06 19:11:33 +00:00
|
|
|
$query = new RevenueQuery( $args );
|
2019-02-14 20:34:38 +00:00
|
|
|
$this->assertEquals( $expected_stats, json_decode( wp_json_encode( $query->get_data() ), true ) );
|
2018-09-20 14:20:04 +00:00
|
|
|
}
|
|
|
|
}
|