) }
{ filters.map( config => {
if ( config.showFilters( query ) ) {
diff --git a/plugins/woocommerce-admin/packages/components/src/filters/style.scss b/plugins/woocommerce-admin/packages/components/src/filters/style.scss
index 41f8c0c6113..ff6131517a0 100644
--- a/plugins/woocommerce-admin/packages/components/src/filters/style.scss
+++ b/plugins/woocommerce-admin/packages/components/src/filters/style.scss
@@ -59,6 +59,10 @@
background-color: $white;
}
+ .woocommerce-calendar__input-error .components-popover__content {
+ background-color: $core-grey-dark-400;
+ }
+
&.is-mobile {
.components-popover__content {
width: 100%;
diff --git a/plugins/woocommerce-admin/packages/components/src/ie.scss b/plugins/woocommerce-admin/packages/components/src/ie.scss
new file mode 100644
index 00000000000..d14445447f1
--- /dev/null
+++ b/plugins/woocommerce-admin/packages/components/src/ie.scss
@@ -0,0 +1,6 @@
+/**
+ * Internal Dependencies
+ */
+@import 'segmented-selection/ie.scss';
+@import 'summary/ie.scss';
+@import 'table/ie.scss';
diff --git a/plugins/woocommerce-admin/packages/components/src/index.js b/plugins/woocommerce-admin/packages/components/src/index.js
index af501d1acdf..96806ae7117 100644
--- a/plugins/woocommerce-admin/packages/components/src/index.js
+++ b/plugins/woocommerce-admin/packages/components/src/index.js
@@ -12,8 +12,9 @@ export { default as ChartPlaceholder } from './chart/placeholder';
export { default as Card } from './card';
export { default as Count } from './count';
export { default as CompareFilter } from './filters/compare';
-export { default as DatePicker } from './filters/date';
-export { default as DateRange } from './calendar';
+export { default as DateRangeFilterPicker } from './filters/date';
+export { default as DateRange } from './calendar/date-range';
+export { default as DatePicker } from './calendar/date-picker';
export { default as DropdownButton } from './dropdown-button';
export { default as EllipsisMenu } from './ellipsis-menu';
export { default as EmptyContent } from './empty-content';
diff --git a/plugins/woocommerce-admin/packages/components/src/search/autocompleters/product-cat.js b/plugins/woocommerce-admin/packages/components/src/search/autocompleters/categories.js
similarity index 98%
rename from plugins/woocommerce-admin/packages/components/src/search/autocompleters/product-cat.js
rename to plugins/woocommerce-admin/packages/components/src/search/autocompleters/categories.js
index 1bcafd3ec30..75c32d26dfb 100644
--- a/plugins/woocommerce-admin/packages/components/src/search/autocompleters/product-cat.js
+++ b/plugins/woocommerce-admin/packages/components/src/search/autocompleters/categories.js
@@ -21,7 +21,7 @@ import { computeSuggestionMatch } from './utils';
* @type {Completer}
*/
export default {
- name: 'product_cats',
+ name: 'categories',
className: 'woocommerce-search__product-result',
options( search ) {
let payload = '';
diff --git a/plugins/woocommerce-admin/packages/components/src/search/autocompleters/download-ips.js b/plugins/woocommerce-admin/packages/components/src/search/autocompleters/download-ips.js
new file mode 100644
index 00000000000..a1d4eb635ec
--- /dev/null
+++ b/plugins/woocommerce-admin/packages/components/src/search/autocompleters/download-ips.js
@@ -0,0 +1,58 @@
+/** @format */
+/**
+ * External dependencies
+ */
+import apiFetch from '@wordpress/api-fetch';
+
+/**
+ * WooCommerce dependencies
+ */
+import { stringifyQuery } from '@woocommerce/navigation';
+
+/**
+ * Internal dependencies
+ */
+import { computeSuggestionMatch } from './utils';
+
+/**
+ * A download IP address autocompleter.
+ * See https://github.com/WordPress/gutenberg/tree/master/packages/components/src/autocomplete#the-completer-interface
+ *
+ * @type {Completer}
+ */
+export default {
+ name: 'download-ips',
+ className: 'woocommerce-search__download-ip-result',
+ options( match ) {
+ let payload = '';
+ if ( match ) {
+ const query = {
+ match,
+ };
+ payload = stringifyQuery( query );
+ return apiFetch( { path: `/wc/v3/data/download-ips${ payload }` } );
+ }
+ },
+ isDebounced: true,
+ getOptionKeywords( download ) {
+ return [ download.user_ip_address ];
+ },
+ getOptionLabel( download, query ) {
+ const match = computeSuggestionMatch( download.user_ip_address, query ) || {};
+ return [
+
,
+ ];
+ },
+ getOptionCompletion( download ) {
+ return {
+ id: download.user_ip_address,
+ label: download.user_ip_address,
+ };
+ },
+};
diff --git a/plugins/woocommerce-admin/packages/components/src/search/autocompleters/index.js b/plugins/woocommerce-admin/packages/components/src/search/autocompleters/index.js
index 7aef13e4aa7..20ce44c8c11 100644
--- a/plugins/woocommerce-admin/packages/components/src/search/autocompleters/index.js
+++ b/plugins/woocommerce-admin/packages/components/src/search/autocompleters/index.js
@@ -2,12 +2,14 @@
/**
* Export all autocompleters
*/
+export { default as productCategory } from './categories';
export { default as countries } from './countries';
export { default as coupons } from './coupons';
export { default as customers } from './customers';
+export { default as downloadIps } from './download-ips';
export { default as emails } from './emails';
+export { default as orders } from './orders';
export { default as product } from './product';
-export { default as productCategory } from './product-cat';
export { default as taxes } from './taxes';
export { default as usernames } from './usernames';
export { default as variations } from './variations';
diff --git a/plugins/woocommerce-admin/packages/components/src/search/autocompleters/orders.js b/plugins/woocommerce-admin/packages/components/src/search/autocompleters/orders.js
new file mode 100644
index 00000000000..e0e1f656268
--- /dev/null
+++ b/plugins/woocommerce-admin/packages/components/src/search/autocompleters/orders.js
@@ -0,0 +1,66 @@
+/** @format */
+/**
+ * External dependencies
+ */
+import apiFetch from '@wordpress/api-fetch';
+import { isNaN } from 'lodash';
+
+/**
+ * WooCommerce dependencies
+ */
+import { stringifyQuery } from '@woocommerce/navigation';
+
+/**
+ * Internal dependencies
+ */
+import { computeSuggestionMatch } from './utils';
+
+/**
+ * A orders autocompleter.
+ * See https://github.com/WordPress/gutenberg/tree/master/packages/components/src/autocomplete#the-completer-interface
+ *
+ * @type {Completer}
+ */
+export default {
+ name: 'orders',
+ className: 'woocommerce-search__order-result',
+ options( search ) {
+ let payload = '';
+ if ( search ) {
+ const number = parseInt( search );
+
+ if ( isNaN( number ) ) {
+ return;
+ }
+
+ const query = {
+ number,
+ per_page: 10,
+ };
+ payload = stringifyQuery( query );
+ return apiFetch( { path: `/wc/v3/orders${ payload }` } );
+ }
+ },
+ isDebounced: true,
+ getOptionKeywords( order ) {
+ return [ '#' + order.number ];
+ },
+ getOptionLabel( order, query ) {
+ const match = computeSuggestionMatch( '#' + order.number, query ) || {};
+ return [
+
,
+ ];
+ },
+ getOptionCompletion( order ) {
+ return {
+ id: order.id,
+ label: '#' + order.number,
+ };
+ },
+};
diff --git a/plugins/woocommerce-admin/packages/components/src/search/index.js b/plugins/woocommerce-admin/packages/components/src/search/index.js
index 406c5c3c3d7..91781e433e5 100644
--- a/plugins/woocommerce-admin/packages/components/src/search/index.js
+++ b/plugins/woocommerce-admin/packages/components/src/search/index.js
@@ -3,7 +3,7 @@
* External dependencies
*/
import { __, sprintf } from '@wordpress/i18n';
-import { Component, createRef } from '@wordpress/element';
+import { Component, createRef, Fragment } from '@wordpress/element';
import { withInstanceId } from '@wordpress/compose';
import { findIndex, noop } from 'lodash';
import Gridicon from 'gridicons';
@@ -14,7 +14,19 @@ import classnames from 'classnames';
* Internal dependencies
*/
import Autocomplete from './autocomplete';
-import { countries, coupons, customers, emails, product, productCategory, taxes, usernames, variations } from './autocompleters';
+import {
+ countries,
+ coupons,
+ customers,
+ downloadIps,
+ emails,
+ orders,
+ product,
+ productCategory,
+ taxes,
+ usernames,
+ variations,
+} from './autocompleters';
import Tag from '../tag';
/**
@@ -66,18 +78,22 @@ class Search extends Component {
getAutocompleter() {
switch ( this.props.type ) {
+ case 'categories':
+ return productCategory;
case 'countries':
return countries;
case 'coupons':
return coupons;
case 'customers':
return customers;
+ case 'downloadIps':
+ return downloadIps;
case 'emails':
return emails;
+ case 'orders':
+ return orders;
case 'products':
return product;
- case 'product_cats':
- return productCategory;
case 'taxes':
return taxes;
case 'usernames':
@@ -98,7 +114,7 @@ class Search extends Component {
const { selected } = this.props;
return this.shouldRenderTags() ? (
-
+
) : null;
}
@@ -142,7 +158,9 @@ class Search extends Component {
const shouldRenderTags = this.shouldRenderTags();
return (
-
+
) : (
.woocommerce-summary__item-container:nth-child(#{$i}) {
+ grid-column-start: 1;
+ grid-column-end: 2;
+ grid-row-start: #{$i};
+ grid-row-end: #{$i+1};
+ }
+ }
+}
diff --git a/plugins/woocommerce-admin/packages/components/src/summary/style.scss b/plugins/woocommerce-admin/packages/components/src/summary/style.scss
index 6e333c29db3..3848e112870 100644
--- a/plugins/woocommerce-admin/packages/components/src/summary/style.scss
+++ b/plugins/woocommerce-admin/packages/components/src/summary/style.scss
@@ -257,70 +257,6 @@ $inner-border: $core-grey-light-500;
}
}
-// IE11 doesn't auto-position grid children, so their position must be set manually
-.has-1-items .woocommerce-summary__item-container {
- @include set-grid-item-position( 1, 1 );
-}
-
-.has-2-items .woocommerce-summary__item-container {
- @include set-grid-item-position( 2, 2 );
-}
-
-.has-3-items .woocommerce-summary__item-container {
- @include set-grid-item-position( 3, 3 );
-}
-
-.has-4-items .woocommerce-summary__item-container {
- @include set-grid-item-position( 4, 4 );
-}
-
-.has-5-items .woocommerce-summary__item-container {
- @include set-grid-item-position( 5, 5 );
-}
-
-.has-6-items .woocommerce-summary__item-container {
- @include set-grid-item-position( 6, 6 );
-
- @include breakpoint( '<1440px' ) {
- @include set-grid-item-position( 3, 6 );
- }
-}
-
-.has-7-items .woocommerce-summary__item-container {
- @include set-grid-item-position( 4, 7 );
-}
-
-.has-8-items .woocommerce-summary__item-container {
- @include set-grid-item-position( 4, 8 );
-}
-
-.has-9-items .woocommerce-summary__item-container {
- @include set-grid-item-position( 5, 9 );
-
- @include breakpoint( '<1440px' ) {
- @include set-grid-item-position( 3, 9 );
- }
-}
-
-.has-10-items .woocommerce-summary__item-container {
- @include set-grid-item-position( 5, 10 );
-
- @include breakpoint( '<1440px' ) {
- @include set-grid-item-position( 4, 10 );
- }
-}
-
-@include breakpoint( '<960px' ) {
- @for $i from 1 through 10 {
- .woocommerce-summary > .woocommerce-summary__item-container:nth-child(#{$i}) {
- grid-column-start: 1;
- grid-column-end: 2;
- grid-row-start: #{$i};
- grid-row-end: #{$i+1};
- }
- }
-}
-
.woocommerce-summary__item {
display: block;
padding: $spacing;
diff --git a/plugins/woocommerce-admin/packages/components/src/table/ie.scss b/plugins/woocommerce-admin/packages/components/src/table/ie.scss
new file mode 100644
index 00000000000..13d084299c3
--- /dev/null
+++ b/plugins/woocommerce-admin/packages/components/src/table/ie.scss
@@ -0,0 +1,26 @@
+/** @format */
+
+.woocommerce-table {
+ &.has-compare,
+ &.has-search {
+ .woocommerce-card__action {
+ .woocommerce-table__compare {
+ align-self: center;
+ grid-column-start: 1;
+ grid-column-end: 2;
+ }
+
+ .woocommerce-search {
+ align-self: center;
+ grid-column-start: 2;
+ grid-column-end: 3;
+ }
+
+ .woocommerce-table__download-button {
+ align-self: center;
+ grid-column-start: 3;
+ grid-column-end: 4;
+ }
+ }
+ }
+}
diff --git a/plugins/woocommerce-admin/packages/components/src/table/style.scss b/plugins/woocommerce-admin/packages/components/src/table/style.scss
index 2a21ffa9f20..06488097d76 100644
--- a/plugins/woocommerce-admin/packages/components/src/table/style.scss
+++ b/plugins/woocommerce-admin/packages/components/src/table/style.scss
@@ -27,24 +27,6 @@
display: grid;
width: 100%;
grid-template-columns: auto 1fr auto;
-
- .woocommerce-table__compare {
- align-self: center;
- grid-column-start: 1;
- grid-column-end: 2;
- }
-
- .woocommerce-search {
- align-self: center;
- grid-column-start: 2;
- grid-column-end: 3;
- }
-
- .woocommerce-table__download-button {
- align-self: center;
- grid-column-start: 3;
- grid-column-end: 4;
- }
}
@include breakpoint( '<960px' ) {
diff --git a/plugins/woocommerce-admin/packages/components/src/tag/style.scss b/plugins/woocommerce-admin/packages/components/src/tag/style.scss
index 585b5f5f864..c82f5feef05 100644
--- a/plugins/woocommerce-admin/packages/components/src/tag/style.scss
+++ b/plugins/woocommerce-admin/packages/components/src/tag/style.scss
@@ -2,7 +2,7 @@
.woocommerce-tag {
display: inline-flex;
- margin: 0 4px 0 0;
+ margin: 1px 4px 1px 0;
overflow: hidden;
vertical-align: middle;
diff --git a/plugins/woocommerce-admin/packages/date/src/index.js b/plugins/woocommerce-admin/packages/date/src/index.js
index d526ea73b42..57858c8d8aa 100644
--- a/plugins/woocommerce-admin/packages/date/src/index.js
+++ b/plugins/woocommerce-admin/packages/date/src/index.js
@@ -5,7 +5,6 @@
import moment from 'moment';
import { find } from 'lodash';
import { __ } from '@wordpress/i18n';
-import { format as formatDate } from '@wordpress/date';
const QUERY_DEFAULTS = {
pageSize: 25,
@@ -173,14 +172,14 @@ export function getLastPeriod( period, compare ) {
*/
export function getCurrentPeriod( period, compare ) {
const primaryStart = moment().startOf( period );
- const primaryEnd = moment();
- const daysSoFar = primaryEnd.diff( primaryStart, 'days' );
+ const primaryEnd = moment().add( 1, 'hour' );
+ const hoursSoFar = primaryEnd.diff( primaryStart, 'hours' );
let secondaryStart;
let secondaryEnd;
if ( 'previous_period' === compare ) {
secondaryStart = primaryStart.clone().subtract( 1, period );
- secondaryEnd = primaryEnd.clone().subtract( 1, period );
+ secondaryEnd = primaryEnd.clone().subtract( 1, period ).add( 1, 'hour' );
} else {
secondaryStart =
'week' === period
@@ -190,7 +189,7 @@ export function getCurrentPeriod( period, compare ) {
.week( primaryStart.week() )
.startOf( 'week' )
: primaryStart.clone().subtract( 1, 'years' );
- secondaryEnd = secondaryStart.clone().add( daysSoFar, 'days' );
+ secondaryEnd = secondaryStart.clone().add( hoursSoFar + 1, 'hours' );
}
return {
primaryStart,
@@ -279,9 +278,10 @@ export const getDateParamsFromQuery = ( { period, compare, after, before } ) =>
* @property {string} [compare] - compare valuer, ie previous_year
* @property {string} [after] - date in iso date format, ie 2018-07-03
* @property {string} [before] - date in iso date format, ie 2018-07-03
+ * @param {String} dateFormat - format of the dates to return
* @return {{primary: DateValue, secondary: DateValue}} - Primary and secondary DateValue objects
*/
-export const getCurrentDates = query => {
+export const getCurrentDates = ( query, dateFormat = isoDateFormat ) => {
const { period, compare, after, before } = getDateParamsFromQuery( query );
const { primaryStart, primaryEnd, secondaryStart, secondaryEnd } = getDateValue(
period,
@@ -294,14 +294,14 @@ export const getCurrentDates = query => {
primary: {
label: find( presetValues, item => item.value === period ).label,
range: getRangeLabel( primaryStart, primaryEnd ),
- after: primaryStart.format( isoDateFormat ),
- before: primaryEnd.format( isoDateFormat ),
+ after: primaryStart.format( dateFormat ),
+ before: primaryEnd.format( dateFormat ),
},
secondary: {
label: find( periods, item => item.value === compare ).label,
range: getRangeLabel( secondaryStart, secondaryEnd ),
- after: secondaryStart.format( isoDateFormat ),
- before: secondaryEnd.format( isoDateFormat ),
+ after: secondaryStart.format( dateFormat ),
+ before: secondaryEnd.format( dateFormat ),
},
};
};
@@ -314,8 +314,8 @@ export const getCurrentDates = query => {
* @return {Int} - Difference in days.
*/
export const getDateDifferenceInDays = ( date, date2 ) => {
- const _date = toMoment( isoDateFormat, formatDate( 'Y-m-d', date ) );
- const _date2 = toMoment( isoDateFormat, formatDate( 'Y-m-d', date2 ) );
+ const _date = moment( date );
+ const _date2 = moment( date2 );
return _date.diff( _date2, 'days' );
};
@@ -330,14 +330,14 @@ export const getDateDifferenceInDays = ( date, date2 ) => {
* @return {String} - Calculated date
*/
export const getPreviousDate = ( date, date1, date2, compare, interval ) => {
- const dateMoment = toMoment( isoDateFormat, formatDate( 'Y-m-d', date ) );
+ const dateMoment = moment( date );
if ( 'previous_year' === compare ) {
return dateMoment.clone().subtract( 1, 'years' );
}
- const _date1 = toMoment( isoDateFormat, formatDate( 'Y-m-d', date1 ) );
- const _date2 = toMoment( isoDateFormat, formatDate( 'Y-m-d', date2 ) );
+ const _date1 = moment( date1 );
+ const _date2 = moment( date2 );
const difference = _date1.diff( _date2, interval );
return dateMoment.clone().subtract( difference, interval );
@@ -345,8 +345,6 @@ export const getPreviousDate = ( date, date1, date2, compare, interval ) => {
/**
* Returns the allowed selectable intervals for a specific query.
- * TODO Add support for hours. `` if ( differenceInDays <= 1 ) { allowed = [ 'hour' ]; }
- * Today/yesterday/default: allowed = [ 'hour' ];
*
* @param {Object} query Current query
* @return {Array} Array containing allowed intervals.
@@ -356,21 +354,25 @@ export function getAllowedIntervalsForQuery( query ) {
if ( 'custom' === query.period ) {
const { primary } = getCurrentDates( query );
const differenceInDays = getDateDifferenceInDays( primary.before, primary.after );
- if ( differenceInDays > 728 ) {
+ if ( differenceInDays >= 365 ) {
allowed = [ 'day', 'week', 'month', 'quarter', 'year' ];
- } else if ( differenceInDays > 364 ) {
+ } else if ( differenceInDays >= 90 ) {
allowed = [ 'day', 'week', 'month', 'quarter' ];
- } else if ( differenceInDays > 90 ) {
+ } else if ( differenceInDays >= 28 ) {
allowed = [ 'day', 'week', 'month' ];
- } else if ( differenceInDays > 7 ) {
+ } else if ( differenceInDays >= 7 ) {
allowed = [ 'day', 'week' ];
- } else if ( differenceInDays > 1 && differenceInDays <= 7 ) {
+ } else if ( differenceInDays > 1 && differenceInDays < 7 ) {
allowed = [ 'day' ];
} else {
- allowed = [ 'day' ];
+ allowed = [ 'hour', 'day' ];
}
} else {
switch ( query.period ) {
+ case 'today':
+ case 'yesterday':
+ allowed = [ 'hour' ];
+ break;
case 'week':
case 'last_week':
allowed = [ 'day' ];
@@ -444,8 +446,9 @@ export function getDateFormatsForInterval( interval, ticks = 0 ) {
switch ( interval ) {
case 'hour':
- tooltipLabelFormat = '%I %p';
- xFormat = '%I %p';
+ tooltipLabelFormat = '%_I%p';
+ xFormat = '%_I%p';
+ x2Format = '%b %d, %Y';
tableFormat = 'h A';
break;
case 'day':
diff --git a/plugins/woocommerce-admin/tests/api/admin-notes.php b/plugins/woocommerce-admin/tests/api/admin-notes.php
index 4d4eba789db..45ba0e396fa 100644
--- a/plugins/woocommerce-admin/tests/api/admin-notes.php
+++ b/plugins/woocommerce-admin/tests/api/admin-notes.php
@@ -82,6 +82,20 @@ class WC_Tests_API_Admin_Notes extends WC_REST_Unit_Test_Case {
$this->assertEquals( 'http://example.org/wp-admin/admin.php?s=PHPUNIT_TEST_NOTE_1_ACTION_1_URL', $note['actions'][0]->url );
}
+ /**
+ * Test getting a 404 from invalid ID.
+ *
+ * @since 3.5.0
+ */
+ public function test_get_invalid_note() {
+ wp_set_current_user( $this->user );
+
+ $response = $this->server->dispatch( new WP_REST_Request( 'GET', $this->endpoint . '/999' ) );
+ $note = $response->get_data();
+
+ $this->assertEquals( 404, $response->get_status() );
+ }
+
/**
* Test getting a single note without permission. It should fail.
*
diff --git a/plugins/woocommerce-admin/tests/api/data.php b/plugins/woocommerce-admin/tests/api/data.php
new file mode 100644
index 00000000000..8cc3e835060
--- /dev/null
+++ b/plugins/woocommerce-admin/tests/api/data.php
@@ -0,0 +1,119 @@
+user = $this->factory->user->create(
+ array(
+ 'role' => 'administrator',
+ )
+ );
+ }
+
+ /**
+ * Test that the list of data endpoints includes download-ips.
+ */
+ public function test_get_items_contains_download_ips() {
+ wp_set_current_user( $this->user );
+
+ $request = new WP_REST_Request( 'GET', $this->endpoint );
+ $response = $this->server->dispatch( $request );
+ $data = $response->get_data();
+
+ $this->assertEquals( 200, $response->get_status() );
+ $this->assertEquals( 4, count( $data ) );
+ $this->assertEquals( 'download-ips', $data[3]['slug'] );
+ }
+
+ /**
+ * Test download-ips match searching.
+ */
+ public function test_download_ips() {
+ wp_set_current_user( $this->user );
+ WC_Helper_Reports::reset_stats_dbs();
+
+ $prod_download = new WC_Product_Download();
+ $prod_download->set_file( plugin_dir_url( __FILE__ ) . '/assets/images/help.png' );
+ $prod_download->set_id( 1 );
+
+ $product = new WC_Product_Simple();
+ $product->set_name( 'Test Product' );
+ $product->set_downloadable( 'yes' );
+ $product->set_downloads( array( $prod_download ) );
+ $product->set_regular_price( 25 );
+ $product->save();
+
+ $order = WC_Helper_Order::create_order( 1, $product );
+ $order->set_status( 'completed' );
+ $order->set_total( 100 );
+ $order->save();
+
+ $download = new WC_Customer_Download();
+ $download->set_user_id( $this->user );
+ $download->set_order_id( $order->get_id() );
+ $download->set_product_id( $product->get_id() );
+ $download->set_download_id( $prod_download->get_id() );
+ $download->save();
+
+ $object = new WC_Customer_Download_Log();
+ $object->set_permission_id( $download->get_id() );
+ $object->set_user_id( $this->user );
+ $object->set_user_ip_address( '1.2.3.4' );
+ $id = $object->save();
+
+ $object = new WC_Customer_Download_Log();
+ $object->set_permission_id( $download->get_id() );
+ $object->set_user_id( $this->user );
+ $object->set_user_ip_address( '54.2.1.3' );
+ $id = $object->save();
+
+ // Save a second log for the same IP -- only one result for this IP should be returned.
+ $object = new WC_Customer_Download_Log();
+ $object->set_permission_id( $download->get_id() );
+ $object->set_user_id( $this->user );
+ $object->set_user_ip_address( '54.2.1.3' );
+ $id = $object->save();
+
+ $object = new WC_Customer_Download_Log();
+ $object->set_permission_id( $download->get_id() );
+ $object->set_user_id( $this->user );
+ $object->set_user_ip_address( '54.5.1.7' );
+ $id = $object->save();
+
+ $request = new WP_REST_Request( 'GET', $this->endpoint . '/download-ips' );
+ $request->set_query_params(
+ array(
+ 'match' => '54',
+ )
+ );
+
+ $response = $this->server->dispatch( $request );
+ $addresses = $response->get_data();
+
+ $this->assertEquals( 200, $response->get_status() );
+ $this->assertEquals( 2, count( $addresses ) );
+
+ $this->assertEquals( '54.2.1.3', $addresses[0]['user_ip_address'] );
+ $this->assertEquals( '54.5.1.7', $addresses[1]['user_ip_address'] );
+ }
+}
diff --git a/plugins/woocommerce-admin/tests/api/orders.php b/plugins/woocommerce-admin/tests/api/orders.php
new file mode 100644
index 00000000000..a1cf3d704d1
--- /dev/null
+++ b/plugins/woocommerce-admin/tests/api/orders.php
@@ -0,0 +1,59 @@
+user = $this->factory->user->create(
+ array(
+ 'role' => 'administrator',
+ )
+ );
+ }
+
+ /**
+ * Test order number param.
+ */
+ public function test_get_items_number_param() {
+ wp_set_current_user( $this->user );
+
+ $orders = array();
+ for ( $i = 0; $i < 10; $i++ ) {
+ $orders[] = WC_Helper_Order::create_order( $this->user );
+ }
+
+ $order = $orders[9];
+
+ $request = new WP_REST_Request( 'GET', $this->endpoint );
+ $request->set_query_params(
+ array(
+ 'number' => $order->get_id(),
+ )
+ );
+
+ $response = $this->server->dispatch( $request );
+ $orders = $response->get_data();
+
+ $this->assertEquals( 200, $response->get_status() );
+ $this->assertEquals( $order->get_id(), $orders[0]['id'] );
+ }
+}
diff --git a/plugins/woocommerce-admin/tests/api/reports-downloads.php b/plugins/woocommerce-admin/tests/api/reports-downloads.php
new file mode 100644
index 00000000000..f79ad47fb4e
--- /dev/null
+++ b/plugins/woocommerce-admin/tests/api/reports-downloads.php
@@ -0,0 +1,401 @@
+user = $this->factory->user->create(
+ array(
+ 'role' => 'administrator',
+ )
+ );
+ }
+
+ /**
+ * Test route registration.
+ */
+ public function test_register_routes() {
+ $routes = $this->server->get_routes();
+
+ $this->assertArrayHasKey( $this->endpoint, $routes );
+ }
+
+ /**
+ * Test getting report.
+ */
+ public function test_get_report() {
+ global $wpdb;
+ wp_set_current_user( $this->user );
+ WC_Helper_Reports::reset_stats_dbs();
+
+ // Populate all of the data.
+ $prod_download = new WC_Product_Download();
+ $prod_download->set_file( plugin_dir_url( __FILE__ ) . '/assets/images/help.png' );
+ $prod_download->set_id( 1 );
+
+ $product = new WC_Product_Simple();
+ $product->set_name( 'Test Product' );
+ $product->set_downloadable( 'yes' );
+ $product->set_downloads( array( $prod_download ) );
+ $product->set_regular_price( 25 );
+ $product->save();
+
+ $order = WC_Helper_Order::create_order( 1, $product );
+ $order->set_status( 'completed' );
+ $order->set_total( 100 );
+ $order->save();
+
+ $download = new WC_Customer_Download();
+ $download->set_user_id( $this->user );
+ $download->set_order_id( $order->get_id() );
+ $download->set_product_id( $product->get_id() );
+ $download->set_download_id( $prod_download->get_id() );
+ $download->save();
+
+ $object = new WC_Customer_Download_Log();
+ $object->set_permission_id( $download->get_id() );
+ $object->set_user_id( $this->user );
+ $object->set_user_ip_address( '1.2.3.4' );
+ $id = $object->save();
+
+ $response = $this->server->dispatch( new WP_REST_Request( 'GET', $this->endpoint ) );
+ $reports = $response->get_data();
+
+ $this->assertEquals( 200, $response->get_status() );
+ $this->assertEquals( 1, count( $reports ) );
+
+ $download_report = reset( $reports );
+
+ $this->assertEquals( 1, $download_report['download_id'] );
+ $this->assertEquals( $product->get_id(), $download_report['product_id'] );
+ $this->assertEquals( $order->get_id(), $download_report['order_id'] );
+ $this->assertEquals( $this->user, $download_report['user_id'] );
+ $this->assertEquals( '1.2.3.4', $download_report['ip_address'] );
+ $this->assertEquals( 'help.png', $download_report['file_name'] );
+ }
+
+ /**
+ * Does some test setup so we can filter with different options in later tests.
+ */
+ public function filter_setup() {
+ global $wpdb;
+ wp_set_current_user( $this->user );
+ WC_Helper_Reports::reset_stats_dbs();
+ $time = time();
+
+ // First set of data.
+ $prod_download = new WC_Product_Download();
+ $prod_download->set_file( plugin_dir_url( __FILE__ ) . '/assets/images/help.png' );
+ $prod_download->set_id( 1 );
+
+ $product = new WC_Product_Simple();
+ $product->set_name( 'Test Product' );
+ $product->set_downloadable( 'yes' );
+ $product->set_downloads( array( $prod_download ) );
+ $product->set_regular_price( 25 );
+ $product->save();
+ $product_1 = $product->get_id();
+
+ $order = WC_Helper_Order::create_order( 1, $product );
+ $order->set_status( 'completed' );
+ $order->set_total( 25 );
+ $order->save();
+ $order_1 = $order->get_id();
+
+ $download = new WC_Customer_Download();
+ $download->set_user_id( 1 );
+ $download->set_order_id( $order->get_id() );
+ $download->set_product_id( $product->get_id() );
+ $download->set_download_id( $prod_download->get_id() );
+ $download->save();
+
+ $object = new WC_Customer_Download_Log();
+ $object->set_permission_id( $download->get_id() );
+ $object->set_user_id( 1 );
+ $object->set_user_ip_address( '1.2.3.4' );
+ $id = $object->save();
+
+ // Second set of data.
+ $prod_download = new WC_Product_Download();
+ $prod_download->set_file( plugin_dir_url( __FILE__ ) . '/assets/images/test.png' );
+ $prod_download->set_id( 2 );
+
+ $product = new WC_Product_Simple();
+ $product->set_name( 'Test Product 2' );
+ $product->set_downloadable( 'yes' );
+ $product->set_downloads( array( $prod_download ) );
+ $product->set_regular_price( 10 );
+ $product->save();
+ $product_2 = $product->get_id();
+
+ $order = WC_Helper_Order::create_order( 2, $product );
+ $order->set_status( 'completed' );
+ $order->set_total( 10 );
+ $order->save();
+ $order_2 = $order->get_id();
+
+ $download = new WC_Customer_Download();
+ $download->set_user_id( 2 );
+ $download->set_order_id( $order->get_id() );
+ $download->set_product_id( $product->get_id() );
+ $download->set_download_id( $prod_download->get_id() );
+ $download->save();
+
+ $object = new WC_Customer_Download_Log();
+ $object->set_permission_id( $download->get_id() );
+ $object->set_user_id( 2 );
+ $object->set_user_ip_address( '5.4.3.2.1' );
+ $object->set_timestamp( date( 'Y-m-d H:00:00', $time - ( 2 * DAY_IN_SECONDS ) ) );
+ $id = $object->save();
+
+ return array(
+ 'time' => $time,
+ 'product_1' => $product_1,
+ 'product_2' => $product_2,
+ 'order_1' => $order_1,
+ 'order_2' => $order_2,
+ );
+ }
+
+ /**
+ * Test getting report with date filter.
+ */
+ public function test_get_report_with_date_filter() {
+ $test_info = $this->filter_setup();
+
+ $response = $this->server->dispatch( new WP_REST_Request( 'GET', $this->endpoint ) );
+ $reports = $response->get_data();
+
+ $this->assertEquals( 200, $response->get_status() );
+ $this->assertEquals( 2, count( $reports ) );
+
+ // Test date filtering.
+ $request = new WP_REST_Request( 'GET', $this->endpoint );
+ $request->set_query_params(
+ array(
+ 'before' => date( 'Y-m-d H:00:00', $test_info['time'] + DAY_IN_SECONDS ),
+ 'after' => date( 'Y-m-d H:00:00', $test_info['time'] - DAY_IN_SECONDS ),
+ )
+ );
+ $response = $this->server->dispatch( $request );
+ $reports = $response->get_data();
+ $download_report = reset( $reports );
+
+ $this->assertEquals( 200, $response->get_status() );
+ $this->assertEquals( 1, count( $reports ) );
+ $this->assertEquals( 'help.png', $download_report['file_name'] );
+ }
+
+ /**
+ * Test getting report with product filter.
+ */
+ public function test_get_report_with_product_filter() {
+ $test_info = $this->filter_setup();
+
+ $response = $this->server->dispatch( new WP_REST_Request( 'GET', $this->endpoint ) );
+ $reports = $response->get_data();
+
+ $this->assertEquals( 200, $response->get_status() );
+ $this->assertEquals( 2, count( $reports ) );
+
+ // Test includes filtering.
+ $request = new WP_REST_Request( 'GET', $this->endpoint );
+ $request->set_query_params(
+ array(
+ 'product_includes' => $test_info['product_1'],
+ )
+ );
+ $response = $this->server->dispatch( $request );
+ $reports = $response->get_data();
+ $download_report = reset( $reports );
+
+ $this->assertEquals( 200, $response->get_status() );
+ $this->assertEquals( 1, count( $reports ) );
+ $this->assertEquals( 'help.png', $download_report['file_name'] );
+
+ // Test excludes filtering.
+ $request = new WP_REST_Request( 'GET', $this->endpoint );
+ $request->set_query_params(
+ array(
+ 'product_excludes' => $test_info['product_1'],
+ )
+ );
+ $response = $this->server->dispatch( $request );
+ $reports = $response->get_data();
+ $download_report = reset( $reports );
+
+ $this->assertEquals( 200, $response->get_status() );
+ $this->assertEquals( 1, count( $reports ) );
+ $this->assertEquals( 'test.png', $download_report['file_name'] );
+ }
+
+ /**
+ * Test getting report with order filter.
+ */
+ public function test_get_report_with_order_filter() {
+ $test_info = $this->filter_setup();
+
+ $response = $this->server->dispatch( new WP_REST_Request( 'GET', $this->endpoint ) );
+ $reports = $response->get_data();
+
+ $this->assertEquals( 200, $response->get_status() );
+ $this->assertEquals( 2, count( $reports ) );
+
+ // Test includes filtering.
+ $request = new WP_REST_Request( 'GET', $this->endpoint );
+ $request->set_query_params(
+ array(
+ 'order_includes' => $test_info['order_1'],
+ )
+ );
+ $response = $this->server->dispatch( $request );
+ $reports = $response->get_data();
+ $download_report = reset( $reports );
+
+ $this->assertEquals( 200, $response->get_status() );
+ $this->assertEquals( 1, count( $reports ) );
+ $this->assertEquals( 'help.png', $download_report['file_name'] );
+
+ // Test excludes filtering.
+ $request = new WP_REST_Request( 'GET', $this->endpoint );
+ $request->set_query_params(
+ array(
+ 'order_excludes' => $test_info['order_1'],
+ )
+ );
+ $response = $this->server->dispatch( $request );
+ $reports = $response->get_data();
+ $download_report = reset( $reports );
+
+ $this->assertEquals( 200, $response->get_status() );
+ $this->assertEquals( 1, count( $reports ) );
+ $this->assertEquals( 'test.png', $download_report['file_name'] );
+ }
+
+ /**
+ * Test getting report with user filter.
+ */
+ public function test_get_report_with_user_filter() {
+ $test_info = $this->filter_setup();
+
+ // Test includes filtering.
+ $request = new WP_REST_Request( 'GET', $this->endpoint );
+ $request->set_query_params(
+ array(
+ 'user_includes' => 1,
+ )
+ );
+ $response = $this->server->dispatch( $request );
+ $reports = $response->get_data();
+ $download_report = reset( $reports );
+
+ $this->assertEquals( 200, $response->get_status() );
+ $this->assertEquals( 1, count( $reports ) );
+ $this->assertEquals( 'help.png', $download_report['file_name'] );
+ $this->assertEquals( 1, $download_report['user_id'] );
+
+ // Test excludes filtering.
+ $request = new WP_REST_Request( 'GET', $this->endpoint );
+ $request->set_query_params(
+ array(
+ 'user_excludes' => 1,
+ )
+ );
+ $response = $this->server->dispatch( $request );
+ $reports = $response->get_data();
+ $download_report = reset( $reports );
+
+ $this->assertEquals( 200, $response->get_status() );
+ $this->assertEquals( 1, count( $reports ) );
+ $this->assertEquals( 'test.png', $download_report['file_name'] );
+ $this->assertEquals( 2, $download_report['user_id'] );
+ }
+
+ /**
+ * Test getting report with ip address filter.
+ */
+ public function test_get_report_with_ip_address_filter() {
+ $test_info = $this->filter_setup();
+
+ // Test includes filtering.
+ $request = new WP_REST_Request( 'GET', $this->endpoint );
+ $request->set_query_params(
+ array(
+ 'ip_address_includes' => '1.2.3.4',
+ )
+ );
+ $response = $this->server->dispatch( $request );
+ $reports = $response->get_data();
+ $download_report = reset( $reports );
+
+ $this->assertEquals( 200, $response->get_status() );
+ $this->assertEquals( 1, count( $reports ) );
+ $this->assertEquals( 'help.png', $download_report['file_name'] );
+
+ // Test excludes filtering.
+ $request = new WP_REST_Request( 'GET', $this->endpoint );
+ $request->set_query_params(
+ array(
+ 'ip_address_excludes' => '1.2.3.4',
+ )
+ );
+ $response = $this->server->dispatch( $request );
+ $reports = $response->get_data();
+ $download_report = reset( $reports );
+
+ $this->assertEquals( 200, $response->get_status() );
+ $this->assertEquals( 1, count( $reports ) );
+ $this->assertEquals( 'test.png', $download_report['file_name'] );
+ }
+
+ /**
+ * Test getting reports without valid permissions.
+ */
+ public function test_get_reports_without_permission() {
+ wp_set_current_user( 0 );
+ $response = $this->server->dispatch( new WP_REST_Request( 'GET', $this->endpoint ) );
+ $this->assertEquals( 401, $response->get_status() );
+ }
+
+ /**
+ * Test reports schema.
+ */
+ public function test_reports_schema() {
+ wp_set_current_user( $this->user );
+
+ $request = new WP_REST_Request( 'OPTIONS', $this->endpoint );
+ $response = $this->server->dispatch( $request );
+ $data = $response->get_data();
+ $properties = $data['schema']['properties'];
+
+ $this->assertEquals( 9, count( $properties ) );
+ $this->assertArrayHasKey( 'id', $properties );
+ $this->assertArrayHasKey( 'product_id', $properties );
+ $this->assertArrayHasKey( 'date', $properties );
+ $this->assertArrayHasKey( 'date_gmt', $properties );
+ $this->assertArrayHasKey( 'download_id', $properties );
+ $this->assertArrayHasKey( 'file_name', $properties );
+ $this->assertArrayHasKey( 'order_id', $properties );
+ $this->assertArrayHasKey( 'user_id', $properties );
+ $this->assertArrayHasKey( 'ip_address', $properties );
+ }
+}
diff --git a/plugins/woocommerce-admin/tests/api/reports-products-stats.php b/plugins/woocommerce-admin/tests/api/reports-products-stats.php
index a3e6248260e..319005f1a9b 100644
--- a/plugins/woocommerce-admin/tests/api/reports-products-stats.php
+++ b/plugins/woocommerce-admin/tests/api/reports-products-stats.php
@@ -74,8 +74,8 @@ class WC_Tests_API_Reports_Products_Stats extends WC_REST_Unit_Test_Case {
$request = new WP_REST_Request( 'GET', $this->endpoint );
$request->set_query_params(
array(
- 'before' => date( 'Y-m-d H:00:00', $time + DAY_IN_SECONDS ),
- 'after' => date( 'Y-m-d H:00:00', $time - DAY_IN_SECONDS ),
+ 'before' => date( 'Y-m-d 23:59:59', $time ),
+ 'after' => date( 'Y-m-d 00:00:00', $time ),
'interval' => 'day',
)
);
diff --git a/plugins/woocommerce-admin/tests/reports/class-wc-tests-reports-orders.php b/plugins/woocommerce-admin/tests/reports/class-wc-tests-reports-orders.php
index 9376aa0292d..4709fd6284b 100644
--- a/plugins/woocommerce-admin/tests/reports/class-wc-tests-reports-orders.php
+++ b/plugins/woocommerce-admin/tests/reports/class-wc-tests-reports-orders.php
@@ -56,7 +56,7 @@ class WC_Tests_Reports_Orders extends WC_Unit_Test_Case {
'orders_count' => 1,
'num_items_sold' => 4,
'avg_items_per_order' => 4,
- 'avg_order_value' => 97,
+ 'avg_order_value' => 68,
'gross_revenue' => 97,
'coupons' => 20,
'refunds' => 12,
@@ -65,7 +65,7 @@ class WC_Tests_Reports_Orders extends WC_Unit_Test_Case {
'net_revenue' => 68,
'num_returning_customers' => 0,
'num_new_customers' => 1,
- 'products' => '1',
+ 'products' => 1,
),
'intervals' => array(
array(
@@ -84,7 +84,7 @@ class WC_Tests_Reports_Orders extends WC_Unit_Test_Case {
'orders_count' => 1,
'num_items_sold' => 4,
'avg_items_per_order' => 4,
- 'avg_order_value' => 97,
+ 'avg_order_value' => 68,
'num_returning_customers' => 0,
'num_new_customers' => 1,
),
@@ -103,7 +103,7 @@ class WC_Tests_Reports_Orders extends WC_Unit_Test_Case {
$expected_stats = array(
'totals' => array(
'net_revenue' => 68,
- 'avg_order_value' => 97,
+ 'avg_order_value' => 68,
'orders_count' => 1,
'avg_items_per_order' => 4,
'num_items_sold' => 4,
@@ -121,7 +121,7 @@ class WC_Tests_Reports_Orders extends WC_Unit_Test_Case {
'date_end_gmt' => $end_time,
'subtotals' => array(
'net_revenue' => 68,
- 'avg_order_value' => 97,
+ 'avg_order_value' => 68,
'orders_count' => 1,
'avg_items_per_order' => 4,
'num_items_sold' => 4,
@@ -370,7 +370,7 @@ class WC_Tests_Reports_Orders extends WC_Unit_Test_Case {
'shipping' => $shipping,
'net_revenue' => $net_revenue,
'avg_items_per_order' => $num_items_sold / $orders_count,
- 'avg_order_value' => $gross_revenue / $orders_count,
+ 'avg_order_value' => $net_revenue / $orders_count,
'num_returning_customers' => $orders_count - $new_customers,
'num_new_customers' => $new_customers,
'products' => 4,
@@ -392,7 +392,7 @@ class WC_Tests_Reports_Orders extends WC_Unit_Test_Case {
'shipping' => $shipping,
'net_revenue' => $net_revenue,
'avg_items_per_order' => $num_items_sold / $orders_count,
- 'avg_order_value' => $gross_revenue / $orders_count,
+ 'avg_order_value' => $net_revenue / $orders_count,
'num_returning_customers' => $orders_count - $new_customers,
'num_new_customers' => $new_customers,
),
@@ -457,7 +457,7 @@ class WC_Tests_Reports_Orders extends WC_Unit_Test_Case {
'shipping' => $shipping,
'net_revenue' => $net_revenue,
'avg_items_per_order' => $num_items_sold / $orders_count,
- 'avg_order_value' => $gross_revenue / $orders_count,
+ 'avg_order_value' => $net_revenue / $orders_count,
'num_returning_customers' => $orders_count - $new_customers,
'num_new_customers' => $new_customers,
'products' => 4,
@@ -479,7 +479,7 @@ class WC_Tests_Reports_Orders extends WC_Unit_Test_Case {
'shipping' => $shipping,
'net_revenue' => $net_revenue,
'avg_items_per_order' => $num_items_sold / $orders_count,
- 'avg_order_value' => $gross_revenue / $orders_count,
+ 'avg_order_value' => $net_revenue / $orders_count,
'num_returning_customers' => $orders_count - $new_customers,
'num_new_customers' => $new_customers,
),
@@ -530,7 +530,7 @@ class WC_Tests_Reports_Orders extends WC_Unit_Test_Case {
'shipping' => $shipping,
'net_revenue' => $net_revenue,
'avg_items_per_order' => $num_items_sold / $orders_count,
- 'avg_order_value' => $gross_revenue / $orders_count,
+ 'avg_order_value' => $net_revenue / $orders_count,
'num_returning_customers' => $orders_count - $new_customers,
'num_new_customers' => $new_customers,
'products' => 4,
@@ -552,7 +552,7 @@ class WC_Tests_Reports_Orders extends WC_Unit_Test_Case {
'shipping' => $shipping,
'net_revenue' => $net_revenue,
'avg_items_per_order' => $num_items_sold / $orders_count,
- 'avg_order_value' => $gross_revenue / $orders_count,
+ 'avg_order_value' => $net_revenue / $orders_count,
'num_returning_customers' => $orders_count - $new_customers,
'num_new_customers' => $new_customers,
),
@@ -663,7 +663,7 @@ class WC_Tests_Reports_Orders extends WC_Unit_Test_Case {
'shipping' => $shipping,
'net_revenue' => $net_revenue,
'avg_items_per_order' => $num_items_sold / $orders_count,
- 'avg_order_value' => $gross_revenue / $orders_count,
+ 'avg_order_value' => $net_revenue / $orders_count,
'num_returning_customers' => $orders_count - $new_customers,
'num_new_customers' => $new_customers,
'products' => 4,
@@ -685,7 +685,7 @@ class WC_Tests_Reports_Orders extends WC_Unit_Test_Case {
'shipping' => $shipping,
'net_revenue' => $net_revenue,
'avg_items_per_order' => $num_items_sold / $orders_count,
- 'avg_order_value' => $gross_revenue / $orders_count,
+ 'avg_order_value' => $net_revenue / $orders_count,
'num_returning_customers' => $orders_count - $new_customers,
'num_new_customers' => $new_customers,
),
@@ -736,7 +736,7 @@ class WC_Tests_Reports_Orders extends WC_Unit_Test_Case {
'shipping' => $shipping,
'net_revenue' => $net_revenue,
'avg_items_per_order' => $num_items_sold / $orders_count,
- 'avg_order_value' => $gross_revenue / $orders_count,
+ 'avg_order_value' => $net_revenue / $orders_count,
'num_returning_customers' => $orders_count - $new_customers,
'num_new_customers' => $new_customers,
'products' => 3,
@@ -758,7 +758,7 @@ class WC_Tests_Reports_Orders extends WC_Unit_Test_Case {
'shipping' => $shipping,
'net_revenue' => $net_revenue,
'avg_items_per_order' => $num_items_sold / $orders_count,
- 'avg_order_value' => $gross_revenue / $orders_count,
+ 'avg_order_value' => $net_revenue / $orders_count,
'num_returning_customers' => $orders_count - $new_customers,
'num_new_customers' => $new_customers,
),
@@ -805,7 +805,7 @@ class WC_Tests_Reports_Orders extends WC_Unit_Test_Case {
'shipping' => $shipping,
'net_revenue' => $net_revenue,
'avg_items_per_order' => $num_items_sold / $orders_count,
- 'avg_order_value' => $gross_revenue / $orders_count,
+ 'avg_order_value' => $net_revenue / $orders_count,
'num_returning_customers' => $orders_count,
'num_new_customers' => 0,
'products' => 2,
@@ -828,7 +828,7 @@ class WC_Tests_Reports_Orders extends WC_Unit_Test_Case {
'shipping' => $shipping,
'net_revenue' => $net_revenue,
'avg_items_per_order' => $num_items_sold / $orders_count,
- 'avg_order_value' => $gross_revenue / $orders_count,
+ 'avg_order_value' => $net_revenue / $orders_count,
'num_returning_customers' => $orders_count,
'num_new_customers' => 0,
),
@@ -877,7 +877,7 @@ class WC_Tests_Reports_Orders extends WC_Unit_Test_Case {
'shipping' => $shipping,
'net_revenue' => $net_revenue,
'avg_items_per_order' => $num_items_sold / $orders_count,
- 'avg_order_value' => $gross_revenue / $orders_count,
+ 'avg_order_value' => $net_revenue / $orders_count,
'num_returning_customers' => $orders_count,
'num_new_customers' => 0, // 'new' customer orders product 1 (their first order)
'products' => 3,
@@ -899,7 +899,7 @@ class WC_Tests_Reports_Orders extends WC_Unit_Test_Case {
'shipping' => $shipping,
'net_revenue' => $net_revenue,
'avg_items_per_order' => $num_items_sold / $orders_count,
- 'avg_order_value' => $gross_revenue / $orders_count,
+ 'avg_order_value' => $net_revenue / $orders_count,
'num_returning_customers' => $orders_count,
'num_new_customers' => 0,
),
@@ -947,7 +947,7 @@ class WC_Tests_Reports_Orders extends WC_Unit_Test_Case {
'shipping' => $shipping,
'net_revenue' => $net_revenue,
'avg_items_per_order' => $num_items_sold / $orders_count,
- 'avg_order_value' => $gross_revenue / $orders_count,
+ 'avg_order_value' => $net_revenue / $orders_count,
'num_returning_customers' => $orders_count,
'num_new_customers' => 0, // 'new' customer orders product 1 (their first order)
'products' => 2,
@@ -969,7 +969,7 @@ class WC_Tests_Reports_Orders extends WC_Unit_Test_Case {
'shipping' => $shipping,
'net_revenue' => $net_revenue,
'avg_items_per_order' => $num_items_sold / $orders_count,
- 'avg_order_value' => $gross_revenue / $orders_count,
+ 'avg_order_value' => $net_revenue / $orders_count,
'num_returning_customers' => $orders_count,
'num_new_customers' => 0,
),
@@ -1020,7 +1020,7 @@ class WC_Tests_Reports_Orders extends WC_Unit_Test_Case {
'shipping' => $shipping,
'net_revenue' => $net_revenue,
'avg_items_per_order' => $num_items_sold / $orders_count,
- 'avg_order_value' => $gross_revenue / $orders_count,
+ 'avg_order_value' => $net_revenue / $orders_count,
'num_returning_customers' => $orders_count,
'num_new_customers' => 0, // 'new' customer orders product 1 (their first order)
'products' => 2,
@@ -1042,7 +1042,7 @@ class WC_Tests_Reports_Orders extends WC_Unit_Test_Case {
'shipping' => $shipping,
'net_revenue' => $net_revenue,
'avg_items_per_order' => $num_items_sold / $orders_count,
- 'avg_order_value' => $gross_revenue / $orders_count,
+ 'avg_order_value' => $net_revenue / $orders_count,
'num_returning_customers' => $orders_count,
'num_new_customers' => 0,
),
@@ -1095,7 +1095,7 @@ class WC_Tests_Reports_Orders extends WC_Unit_Test_Case {
'shipping' => $shipping,
'net_revenue' => $net_revenue,
'avg_items_per_order' => $num_items_sold / $orders_count,
- 'avg_order_value' => $gross_revenue / $orders_count,
+ 'avg_order_value' => $net_revenue / $orders_count,
'num_returning_customers' => $orders_count,
'num_new_customers' => 0, // new customers' orders created without coupon.
'products' => 4,
@@ -1117,7 +1117,7 @@ class WC_Tests_Reports_Orders extends WC_Unit_Test_Case {
'shipping' => $shipping,
'net_revenue' => $net_revenue,
'avg_items_per_order' => $num_items_sold / $orders_count,
- 'avg_order_value' => $gross_revenue / $orders_count,
+ 'avg_order_value' => $net_revenue / $orders_count,
'num_returning_customers' => $orders_count,
'num_new_customers' => 0,
),
@@ -1167,7 +1167,7 @@ class WC_Tests_Reports_Orders extends WC_Unit_Test_Case {
'shipping' => $shipping,
'net_revenue' => $net_revenue,
'avg_items_per_order' => $num_items_sold / $orders_count,
- 'avg_order_value' => $gross_revenue / $orders_count,
+ 'avg_order_value' => $net_revenue / $orders_count,
'num_returning_customers' => $orders_count,
'num_new_customers' => 0,
'products' => 4,
@@ -1189,7 +1189,7 @@ class WC_Tests_Reports_Orders extends WC_Unit_Test_Case {
'shipping' => $shipping,
'net_revenue' => $net_revenue,
'avg_items_per_order' => $num_items_sold / $orders_count,
- 'avg_order_value' => $gross_revenue / $orders_count,
+ 'avg_order_value' => $net_revenue / $orders_count,
'num_returning_customers' => $orders_count,
'num_new_customers' => 0,
),
@@ -1239,7 +1239,7 @@ class WC_Tests_Reports_Orders extends WC_Unit_Test_Case {
'shipping' => $shipping,
'net_revenue' => $net_revenue,
'avg_items_per_order' => $num_items_sold / $orders_count,
- 'avg_order_value' => $gross_revenue / $orders_count,
+ 'avg_order_value' => $net_revenue / $orders_count,
'num_returning_customers' => $orders_count - $new_customers,
'num_new_customers' => $new_customers,
'products' => 4,
@@ -1261,7 +1261,7 @@ class WC_Tests_Reports_Orders extends WC_Unit_Test_Case {
'shipping' => $shipping,
'net_revenue' => $net_revenue,
'avg_items_per_order' => $num_items_sold / $orders_count,
- 'avg_order_value' => $gross_revenue / $orders_count,
+ 'avg_order_value' => $net_revenue / $orders_count,
'num_returning_customers' => $orders_count - $new_customers,
'num_new_customers' => $new_customers,
),
@@ -1313,7 +1313,7 @@ class WC_Tests_Reports_Orders extends WC_Unit_Test_Case {
'shipping' => $shipping,
'net_revenue' => $net_revenue,
'avg_items_per_order' => $num_items_sold / $orders_count,
- 'avg_order_value' => $gross_revenue / $orders_count,
+ 'avg_order_value' => $net_revenue / $orders_count,
'num_returning_customers' => $orders_count - $new_customers,
'num_new_customers' => $new_customers,
'products' => 4,
@@ -1335,7 +1335,7 @@ class WC_Tests_Reports_Orders extends WC_Unit_Test_Case {
'shipping' => $shipping,
'net_revenue' => $net_revenue,
'avg_items_per_order' => $num_items_sold / $orders_count,
- 'avg_order_value' => $gross_revenue / $orders_count,
+ 'avg_order_value' => $net_revenue / $orders_count,
'num_returning_customers' => $orders_count - $new_customers,
'num_new_customers' => $new_customers,
),
@@ -1390,7 +1390,7 @@ class WC_Tests_Reports_Orders extends WC_Unit_Test_Case {
'shipping' => $shipping,
'net_revenue' => $net_revenue,
'avg_items_per_order' => $num_items_sold / $orders_count,
- 'avg_order_value' => $gross_revenue / $orders_count,
+ 'avg_order_value' => $net_revenue / $orders_count,
'num_returning_customers' => $orders_count,
'num_new_customers' => 0,
'products' => 4,
@@ -1412,7 +1412,7 @@ class WC_Tests_Reports_Orders extends WC_Unit_Test_Case {
'shipping' => $shipping,
'net_revenue' => $net_revenue,
'avg_items_per_order' => $num_items_sold / $orders_count,
- 'avg_order_value' => $gross_revenue / $orders_count,
+ 'avg_order_value' => $net_revenue / $orders_count,
'num_returning_customers' => $orders_count,
'num_new_customers' => 0,
),
@@ -1451,7 +1451,7 @@ class WC_Tests_Reports_Orders extends WC_Unit_Test_Case {
'shipping' => $shipping,
'net_revenue' => $net_revenue,
'avg_items_per_order' => $num_items_sold / $orders_count,
- 'avg_order_value' => $gross_revenue / $orders_count,
+ 'avg_order_value' => $net_revenue / $orders_count,
'num_returning_customers' => 0,
'num_new_customers' => 2,
'products' => 1,
@@ -1473,7 +1473,7 @@ class WC_Tests_Reports_Orders extends WC_Unit_Test_Case {
'shipping' => $shipping,
'net_revenue' => $net_revenue,
'avg_items_per_order' => $num_items_sold / $orders_count,
- 'avg_order_value' => $gross_revenue / $orders_count,
+ 'avg_order_value' => $net_revenue / $orders_count,
'num_returning_customers' => 0,
'num_new_customers' => 2,
),
@@ -1524,7 +1524,7 @@ class WC_Tests_Reports_Orders extends WC_Unit_Test_Case {
'shipping' => $shipping,
'net_revenue' => $net_revenue,
'avg_items_per_order' => round( $num_items_sold / $orders_count, 4 ), // TODO: this is fragile.
- 'avg_order_value' => $gross_revenue / $orders_count,
+ 'avg_order_value' => $net_revenue / $orders_count,
'num_returning_customers' => $orders_count,
'num_new_customers' => 0,
'products' => 4,
@@ -1546,7 +1546,7 @@ class WC_Tests_Reports_Orders extends WC_Unit_Test_Case {
'shipping' => $shipping,
'net_revenue' => $net_revenue,
'avg_items_per_order' => round( $num_items_sold / $orders_count, 4 ),
- 'avg_order_value' => $gross_revenue / $orders_count,
+ 'avg_order_value' => $net_revenue / $orders_count,
'num_returning_customers' => $orders_count,
'num_new_customers' => 0,
),
@@ -1597,7 +1597,7 @@ class WC_Tests_Reports_Orders extends WC_Unit_Test_Case {
'shipping' => $shipping,
'net_revenue' => $net_revenue,
'avg_items_per_order' => $num_items_sold / $orders_count,
- 'avg_order_value' => $gross_revenue / $orders_count,
+ 'avg_order_value' => $net_revenue / $orders_count,
'num_returning_customers' => $orders_count - $new_customers,
'num_new_customers' => $new_customers,
'products' => 2,
@@ -1619,7 +1619,7 @@ class WC_Tests_Reports_Orders extends WC_Unit_Test_Case {
'shipping' => $shipping,
'net_revenue' => $net_revenue,
'avg_items_per_order' => $num_items_sold / $orders_count,
- 'avg_order_value' => $gross_revenue / $orders_count,
+ 'avg_order_value' => $net_revenue / $orders_count,
'num_returning_customers' => $orders_count - $new_customers,
'num_new_customers' => $new_customers,
),
@@ -1673,7 +1673,7 @@ class WC_Tests_Reports_Orders extends WC_Unit_Test_Case {
'shipping' => $shipping,
'net_revenue' => $net_revenue,
'avg_items_per_order' => $num_items_sold / $orders_count,
- 'avg_order_value' => $gross_revenue / $orders_count,
+ 'avg_order_value' => $net_revenue / $orders_count,
'num_returning_customers' => $orders_count,
'num_new_customers' => 0,
'products' => 4,
@@ -1695,7 +1695,7 @@ class WC_Tests_Reports_Orders extends WC_Unit_Test_Case {
'shipping' => $shipping,
'net_revenue' => $net_revenue,
'avg_items_per_order' => $num_items_sold / $orders_count,
- 'avg_order_value' => $gross_revenue / $orders_count,
+ 'avg_order_value' => $net_revenue / $orders_count,
'num_returning_customers' => $orders_count,
'num_new_customers' => 0,
),
@@ -1745,7 +1745,7 @@ class WC_Tests_Reports_Orders extends WC_Unit_Test_Case {
'shipping' => $shipping,
'net_revenue' => $net_revenue,
'avg_items_per_order' => $num_items_sold / $orders_count,
- 'avg_order_value' => $gross_revenue / $orders_count,
+ 'avg_order_value' => $net_revenue / $orders_count,
'num_returning_customers' => $orders_count,
'num_new_customers' => 0,
'products' => 2,
@@ -1767,7 +1767,7 @@ class WC_Tests_Reports_Orders extends WC_Unit_Test_Case {
'shipping' => $shipping,
'net_revenue' => $net_revenue,
'avg_items_per_order' => $num_items_sold / $orders_count,
- 'avg_order_value' => $gross_revenue / $orders_count,
+ 'avg_order_value' => $net_revenue / $orders_count,
'num_returning_customers' => $orders_count,
'num_new_customers' => 0,
),
@@ -1820,7 +1820,7 @@ class WC_Tests_Reports_Orders extends WC_Unit_Test_Case {
'shipping' => $shipping,
'net_revenue' => $net_revenue,
'avg_items_per_order' => $num_items_sold / $orders_count,
- 'avg_order_value' => $gross_revenue / $orders_count,
+ 'avg_order_value' => $net_revenue / $orders_count,
'num_returning_customers' => $orders_count,
'num_new_customers' => 0,
'products' => 2,
@@ -1842,7 +1842,7 @@ class WC_Tests_Reports_Orders extends WC_Unit_Test_Case {
'shipping' => $shipping,
'net_revenue' => $net_revenue,
'avg_items_per_order' => $num_items_sold / $orders_count,
- 'avg_order_value' => $gross_revenue / $orders_count,
+ 'avg_order_value' => $net_revenue / $orders_count,
'num_returning_customers' => $orders_count,
'num_new_customers' => 0,
),
@@ -1899,7 +1899,7 @@ class WC_Tests_Reports_Orders extends WC_Unit_Test_Case {
'shipping' => $shipping,
'net_revenue' => $net_revenue,
'avg_items_per_order' => $num_items_sold / $orders_count,
- 'avg_order_value' => $gross_revenue / $orders_count,
+ 'avg_order_value' => $net_revenue / $orders_count,
'num_returning_customers' => $orders_count,
'num_new_customers' => 0,
'products' => 2,
@@ -1921,7 +1921,7 @@ class WC_Tests_Reports_Orders extends WC_Unit_Test_Case {
'shipping' => $shipping,
'net_revenue' => $net_revenue,
'avg_items_per_order' => $num_items_sold / $orders_count,
- 'avg_order_value' => $gross_revenue / $orders_count,
+ 'avg_order_value' => $net_revenue / $orders_count,
'num_returning_customers' => $orders_count,
'num_new_customers' => 0,
),
@@ -1978,7 +1978,7 @@ class WC_Tests_Reports_Orders extends WC_Unit_Test_Case {
'shipping' => $shipping,
'net_revenue' => $net_revenue,
'avg_items_per_order' => $num_items_sold / $orders_count,
- 'avg_order_value' => $gross_revenue / $orders_count,
+ 'avg_order_value' => $net_revenue / $orders_count,
'num_returning_customers' => $orders_count - $new_customers,
'num_new_customers' => $new_customers,
// Prod_1, status_1, no coupon orders included here, so 2 new cust orders.
@@ -2001,7 +2001,7 @@ class WC_Tests_Reports_Orders extends WC_Unit_Test_Case {
'shipping' => $shipping,
'net_revenue' => $net_revenue,
'avg_items_per_order' => $num_items_sold / $orders_count,
- 'avg_order_value' => $gross_revenue / $orders_count,
+ 'avg_order_value' => $net_revenue / $orders_count,
'num_returning_customers' => $orders_count - $new_customers,
'num_new_customers' => $new_customers,
),
@@ -2061,7 +2061,7 @@ class WC_Tests_Reports_Orders extends WC_Unit_Test_Case {
'shipping' => $shipping,
'net_revenue' => $net_revenue,
'avg_items_per_order' => $num_items_sold / $orders_count,
- 'avg_order_value' => $gross_revenue / $orders_count,
+ 'avg_order_value' => $net_revenue / $orders_count,
'num_returning_customers' => $orders_count,
'num_new_customers' => 0,
'products' => 2,
@@ -2083,7 +2083,7 @@ class WC_Tests_Reports_Orders extends WC_Unit_Test_Case {
'shipping' => $shipping,
'net_revenue' => $net_revenue,
'avg_items_per_order' => $num_items_sold / $orders_count,
- 'avg_order_value' => $gross_revenue / $orders_count,
+ 'avg_order_value' => $net_revenue / $orders_count,
'num_returning_customers' => $orders_count,
'num_new_customers' => 0,
),
@@ -2147,7 +2147,7 @@ class WC_Tests_Reports_Orders extends WC_Unit_Test_Case {
'shipping' => $shipping,
'net_revenue' => $net_revenue,
'avg_items_per_order' => $num_items_sold / $orders_count,
- 'avg_order_value' => $gross_revenue / $orders_count,
+ 'avg_order_value' => $net_revenue / $orders_count,
'num_returning_customers' => $orders_count,
'num_new_customers' => 0,
'products' => 2,
@@ -2169,7 +2169,7 @@ class WC_Tests_Reports_Orders extends WC_Unit_Test_Case {
'shipping' => $shipping,
'net_revenue' => $net_revenue,
'avg_items_per_order' => $num_items_sold / $orders_count,
- 'avg_order_value' => $gross_revenue / $orders_count,
+ 'avg_order_value' => $net_revenue / $orders_count,
'num_returning_customers' => $orders_count,
'num_new_customers' => 0,
),
@@ -2225,7 +2225,7 @@ class WC_Tests_Reports_Orders extends WC_Unit_Test_Case {
'shipping' => $shipping,
'net_revenue' => $net_revenue,
'avg_items_per_order' => $num_items_sold / $orders_count,
- 'avg_order_value' => $gross_revenue / $orders_count,
+ 'avg_order_value' => $net_revenue / $orders_count,
'num_returning_customers' => $orders_count - $new_customers,
'num_new_customers' => $new_customers,
'products' => 4,
@@ -2247,7 +2247,7 @@ class WC_Tests_Reports_Orders extends WC_Unit_Test_Case {
'shipping' => $shipping,
'net_revenue' => $net_revenue,
'avg_items_per_order' => $num_items_sold / $orders_count,
- 'avg_order_value' => $gross_revenue / $orders_count,
+ 'avg_order_value' => $net_revenue / $orders_count,
'num_returning_customers' => $orders_count - $new_customers,
'num_new_customers' => $new_customers,
),
@@ -2302,7 +2302,7 @@ class WC_Tests_Reports_Orders extends WC_Unit_Test_Case {
'shipping' => $shipping,
'net_revenue' => $net_revenue,
'avg_items_per_order' => $num_items_sold / $orders_count,
- 'avg_order_value' => $gross_revenue / $orders_count,
+ 'avg_order_value' => $net_revenue / $orders_count,
'num_returning_customers' => $orders_count - $new_customers,
'num_new_customers' => $new_customers,
'products' => 4,
@@ -2324,7 +2324,7 @@ class WC_Tests_Reports_Orders extends WC_Unit_Test_Case {
'shipping' => $shipping,
'net_revenue' => $net_revenue,
'avg_items_per_order' => $num_items_sold / $orders_count,
- 'avg_order_value' => $gross_revenue / $orders_count,
+ 'avg_order_value' => $net_revenue / $orders_count,
'num_returning_customers' => $orders_count - $new_customers,
'num_new_customers' => $new_customers,
),
@@ -2379,7 +2379,7 @@ class WC_Tests_Reports_Orders extends WC_Unit_Test_Case {
'shipping' => $shipping,
'net_revenue' => $net_revenue,
'avg_items_per_order' => $num_items_sold / $orders_count,
- 'avg_order_value' => $gross_revenue / $orders_count,
+ 'avg_order_value' => $net_revenue / $orders_count,
'num_returning_customers' => $orders_count - $new_customers,
'num_new_customers' => $new_customers,
'products' => 4,
@@ -2401,7 +2401,7 @@ class WC_Tests_Reports_Orders extends WC_Unit_Test_Case {
'shipping' => $shipping,
'net_revenue' => $net_revenue,
'avg_items_per_order' => $num_items_sold / $orders_count,
- 'avg_order_value' => $gross_revenue / $orders_count,
+ 'avg_order_value' => $net_revenue / $orders_count,
'num_returning_customers' => $orders_count - $new_customers,
'num_new_customers' => $new_customers,
),
@@ -2456,7 +2456,7 @@ class WC_Tests_Reports_Orders extends WC_Unit_Test_Case {
'shipping' => $shipping,
'net_revenue' => $net_revenue,
'avg_items_per_order' => $num_items_sold / $orders_count,
- 'avg_order_value' => $gross_revenue / $orders_count,
+ 'avg_order_value' => $net_revenue / $orders_count,
'num_returning_customers' => $orders_count - $new_customers,
'num_new_customers' => $new_customers,
'products' => 4,
@@ -2478,7 +2478,7 @@ class WC_Tests_Reports_Orders extends WC_Unit_Test_Case {
'shipping' => $shipping,
'net_revenue' => $net_revenue,
'avg_items_per_order' => $num_items_sold / $orders_count,
- 'avg_order_value' => $gross_revenue / $orders_count,
+ 'avg_order_value' => $net_revenue / $orders_count,
'num_returning_customers' => $orders_count - $new_customers,
'num_new_customers' => $new_customers,
),
@@ -2533,7 +2533,7 @@ class WC_Tests_Reports_Orders extends WC_Unit_Test_Case {
'shipping' => $shipping,
'net_revenue' => $net_revenue,
'avg_items_per_order' => $num_items_sold / $orders_count,
- 'avg_order_value' => $gross_revenue / $orders_count,
+ 'avg_order_value' => $net_revenue / $orders_count,
'num_returning_customers' => $orders_count - $new_customers,
'num_new_customers' => $new_customers,
'products' => 4,
@@ -2555,7 +2555,7 @@ class WC_Tests_Reports_Orders extends WC_Unit_Test_Case {
'shipping' => $shipping,
'net_revenue' => $net_revenue,
'avg_items_per_order' => $num_items_sold / $orders_count,
- 'avg_order_value' => $gross_revenue / $orders_count,
+ 'avg_order_value' => $net_revenue / $orders_count,
'num_returning_customers' => $orders_count - $new_customers,
'num_new_customers' => $new_customers,
),
@@ -2613,7 +2613,7 @@ class WC_Tests_Reports_Orders extends WC_Unit_Test_Case {
'shipping' => $shipping,
'net_revenue' => $net_revenue,
'avg_items_per_order' => $num_items_sold / $orders_count,
- 'avg_order_value' => $gross_revenue / $orders_count,
+ 'avg_order_value' => $net_revenue / $orders_count,
'num_returning_customers' => $orders_count - $new_customers,
'num_new_customers' => $new_customers,
'products' => 4,
@@ -2635,7 +2635,7 @@ class WC_Tests_Reports_Orders extends WC_Unit_Test_Case {
'shipping' => $shipping,
'net_revenue' => $net_revenue,
'avg_items_per_order' => $num_items_sold / $orders_count,
- 'avg_order_value' => $gross_revenue / $orders_count,
+ 'avg_order_value' => $net_revenue / $orders_count,
'num_returning_customers' => $orders_count - $new_customers,
'num_new_customers' => $new_customers,
),
@@ -2696,7 +2696,7 @@ class WC_Tests_Reports_Orders extends WC_Unit_Test_Case {
'shipping' => $shipping,
'net_revenue' => $net_revenue,
'avg_items_per_order' => $num_items_sold / $orders_count,
- 'avg_order_value' => $gross_revenue / $orders_count,
+ 'avg_order_value' => $net_revenue / $orders_count,
'num_returning_customers' => $orders_count - $new_customers,
'num_new_customers' => $new_customers,
'products' => 4,
@@ -2718,7 +2718,7 @@ class WC_Tests_Reports_Orders extends WC_Unit_Test_Case {
'shipping' => $shipping,
'net_revenue' => $net_revenue,
'avg_items_per_order' => $num_items_sold / $orders_count,
- 'avg_order_value' => $gross_revenue / $orders_count,
+ 'avg_order_value' => $net_revenue / $orders_count,
'num_returning_customers' => $orders_count - $new_customers,
'num_new_customers' => $new_customers,
),
@@ -2779,7 +2779,7 @@ class WC_Tests_Reports_Orders extends WC_Unit_Test_Case {
'shipping' => $shipping,
'net_revenue' => $net_revenue,
'avg_items_per_order' => $num_items_sold / $orders_count,
- 'avg_order_value' => $gross_revenue / $orders_count,
+ 'avg_order_value' => $net_revenue / $orders_count,
'num_returning_customers' => $orders_count - $new_customers,
'num_new_customers' => $new_customers,
'products' => 4,
@@ -2801,7 +2801,7 @@ class WC_Tests_Reports_Orders extends WC_Unit_Test_Case {
'shipping' => $shipping,
'net_revenue' => $net_revenue,
'avg_items_per_order' => $num_items_sold / $orders_count,
- 'avg_order_value' => $gross_revenue / $orders_count,
+ 'avg_order_value' => $net_revenue / $orders_count,
'num_returning_customers' => $orders_count - $new_customers,
'num_new_customers' => $new_customers,
),
@@ -2865,7 +2865,7 @@ class WC_Tests_Reports_Orders extends WC_Unit_Test_Case {
'shipping' => $shipping,
'net_revenue' => $net_revenue,
'avg_items_per_order' => $num_items_sold / $orders_count,
- 'avg_order_value' => $gross_revenue / $orders_count,
+ 'avg_order_value' => $net_revenue / $orders_count,
'num_returning_customers' => $orders_count - $new_customers,
'num_new_customers' => $new_customers,
'products' => 4,
@@ -2887,7 +2887,7 @@ class WC_Tests_Reports_Orders extends WC_Unit_Test_Case {
'shipping' => $shipping,
'net_revenue' => $net_revenue,
'avg_items_per_order' => $num_items_sold / $orders_count,
- 'avg_order_value' => $gross_revenue / $orders_count,
+ 'avg_order_value' => $net_revenue / $orders_count,
'num_returning_customers' => $orders_count - $new_customers,
'num_new_customers' => $new_customers,
),
@@ -2954,7 +2954,7 @@ class WC_Tests_Reports_Orders extends WC_Unit_Test_Case {
'shipping' => $shipping,
'net_revenue' => $net_revenue,
'avg_items_per_order' => $num_items_sold / $orders_count,
- 'avg_order_value' => $gross_revenue / $orders_count,
+ 'avg_order_value' => $net_revenue / $orders_count,
'num_returning_customers' => $orders_count - $new_customers,
'num_new_customers' => $new_customers,
'products' => 4,
@@ -2976,7 +2976,7 @@ class WC_Tests_Reports_Orders extends WC_Unit_Test_Case {
'shipping' => $shipping,
'net_revenue' => $net_revenue,
'avg_items_per_order' => $num_items_sold / $orders_count,
- 'avg_order_value' => $gross_revenue / $orders_count,
+ 'avg_order_value' => $net_revenue / $orders_count,
'num_returning_customers' => $orders_count - $new_customers,
'num_new_customers' => $new_customers,
),
diff --git a/plugins/woocommerce-admin/tests/reports/class-wc-tests-reports-products.php b/plugins/woocommerce-admin/tests/reports/class-wc-tests-reports-products.php
index d8036795063..a6591c0330b 100644
--- a/plugins/woocommerce-admin/tests/reports/class-wc-tests-reports-products.php
+++ b/plugins/woocommerce-admin/tests/reports/class-wc-tests-reports-products.php
@@ -199,6 +199,9 @@ class WC_Tests_Reports_Products extends WC_Unit_Test_Case {
$product->set_low_stock_amount( 5 );
$product->save();
+ $term = wp_insert_term( 'Test Category', 'product_cat' );
+ wp_set_object_terms( $product->get_id(), $term['term_id'], 'product_cat' );
+
$order = WC_Helper_Order::create_order( 1, $product );
$order->set_status( 'completed' );
$order->set_shipping_total( 10 );
@@ -217,7 +220,9 @@ class WC_Tests_Reports_Products extends WC_Unit_Test_Case {
'extended_info' => 1,
);
// Test retrieving the stats through the data store.
- $data = $data_store->get_data( $args );
+ $data = $data_store->get_data( $args );
+ // Get updated product data.
+ $product = wc_get_product( $product->get_id() );
$expected_data = (object) array(
'total' => 1,
'pages' => 1,
@@ -234,8 +239,10 @@ class WC_Tests_Reports_Products extends WC_Unit_Test_Case {
'permalink' => $product->get_permalink(),
'price' => (float) $product->get_price(),
'stock_status' => $product->get_stock_status(),
- 'stock_quantity' => $product->get_stock_quantity() - 4, // subtract the ones purchased.
+ 'stock_quantity' => $product->get_stock_quantity(),
'low_stock_amount' => $product->get_low_stock_amount(),
+ 'category_ids' => array_values( $product->get_category_ids() ),
+ 'sku' => $product->get_sku(),
),
),
),
diff --git a/plugins/woocommerce-admin/tests/reports/class-wc-tests-reports-revenue-stats.php b/plugins/woocommerce-admin/tests/reports/class-wc-tests-reports-revenue-stats.php
index 8e291981b9a..f417d1bda92 100644
--- a/plugins/woocommerce-admin/tests/reports/class-wc-tests-reports-revenue-stats.php
+++ b/plugins/woocommerce-admin/tests/reports/class-wc-tests-reports-revenue-stats.php
@@ -59,7 +59,7 @@ class WC_Admin_Tests_Reports_Revenue_Stats extends WC_Unit_Test_Case {
'shipping' => 10,
'net_revenue' => 80,
'avg_items_per_order' => 4,
- 'avg_order_value' => 97,
+ 'avg_order_value' => 80,
'num_returning_customers' => 0,
'num_new_customers' => 1,
'products' => '1',
@@ -81,7 +81,7 @@ class WC_Admin_Tests_Reports_Revenue_Stats extends WC_Unit_Test_Case {
'shipping' => 10,
'net_revenue' => 80,
'avg_items_per_order' => 4,
- 'avg_order_value' => 97,
+ 'avg_order_value' => 80,
'num_returning_customers' => 0,
'num_new_customers' => 1,
),
diff --git a/plugins/woocommerce-admin/webpack.config.js b/plugins/woocommerce-admin/webpack.config.js
index 84210383650..40578390167 100644
--- a/plugins/woocommerce-admin/webpack.config.js
+++ b/plugins/woocommerce-admin/webpack.config.js
@@ -74,6 +74,25 @@ const webpackConfig = {
loader: 'babel-loader',
exclude: /node_modules/,
},
+ {
+ test: /\.js?$/,
+ use: {
+ loader: 'babel-loader',
+ options: {
+ presets: [
+ [ '@babel/preset-env', { loose: true, modules: 'commonjs' } ],
+ ],
+ plugins: [ 'transform-es2015-template-literals' ],
+ },
+ },
+ include: new RegExp( '/node_modules\/(' +
+ '|d3-array' +
+ '|debug' +
+ '|regexpu-core' +
+ '|unicode-match-property-ecmascript' +
+ '|unicode-match-property-value-ecmascript)/'
+ ),
+ },
{ test: /\.md$/, use: 'raw-loader' },
{
test: /\.s?css$/,