woocommerce/plugins/woocommerce-admin/client/analytics/components/report-chart/test/utils.js

337 lines
7.0 KiB
JavaScript

/**
* Internal dependencies
*/
import { buildChartData, dataContainsLeapYear } from '../utils';
function generateDateInterval( interval, startDate, endDate, subtotals ) {
const subtotalsDefault = {
orders_count: 0,
net_revenue: 0,
avg_order_value: 0,
avg_items_per_order: 0,
coupons_count: 0,
segments: [],
};
return {
interval,
date_start: `${ startDate } 00:00:00`,
date_start_gmt: `${ startDate } 00:00:00`,
date_end: `${ endDate } 23:59:59`,
date_end_gmt: `${ endDate } 23:59:59`,
subtotals: {
...subtotalsDefault,
...subtotals,
},
};
}
describe( 'buildChartData', () => {
test( 'should bump up data since 29th Feb for previous year and compare by day', () => {
const primaryData = {
data: {
totals: {
orders_count: 1,
},
intervals: [
generateDateInterval(
'2020-02-28',
'2020-02-28',
'2020-02-28',
{}
),
generateDateInterval(
'2020-02-29',
'2020-02-29',
'2020-02-29',
{ orders_count: 1 }
),
generateDateInterval(
'2020-03-01',
'2020-03-01',
'2020-03-01',
{}
),
generateDateInterval(
'2020-03-02',
'2020-03-02',
'2020-03-02',
{}
),
],
},
};
const secondaryData = {
data: {
totals: {
orders_count: 2,
},
intervals: [
generateDateInterval(
'2019-02-28',
'2019-02-28',
'2019-02-28',
{ orders_count: 1 }
),
generateDateInterval(
'2019-03-01',
'2019-03-01',
'2019-03-01',
{ orders_count: 1 }
),
generateDateInterval(
'2019-03-02',
'2019-03-02',
'2019-03-02',
{}
),
],
},
};
const primaryDatePicker = {
label: 'Custom',
range: 'Feb 28 - Mar 2, 2020',
after: '2020-02-27T16:00:00.000Z',
before: '2020-03-02T15:59:59.999Z',
};
const secondaryDatePicker = {
label: 'Previous year',
range: 'Feb 28 - Mar 2, 2019',
after: '2019-02-27T16:00:00.000Z',
before: '2019-03-02T15:59:59.999Z',
};
const chartData = buildChartData(
primaryData,
secondaryData,
primaryDatePicker,
secondaryDatePicker,
'previous_year',
'orders_count',
'day'
);
expect( chartData ).toEqual( [
{
date: '2020-02-28T00:00:00',
primary: {
label: 'Custom (Feb 28 - Mar 2, 2020)',
labelDate: '2020-02-28 00:00:00',
value: 0,
},
secondary: {
label: 'Previous year (Feb 28 - Mar 2, 2019)',
labelDate: '2019-02-28 00:00:00',
value: 1,
},
},
{
date: '2020-02-29T00:00:00',
primary: {
label: 'Custom (Feb 28 - Mar 2, 2020)',
labelDate: '2020-02-29 00:00:00',
value: 1,
},
secondary: {
label: 'Previous year (Feb 28 - Mar 2, 2019)',
labelDate: '-',
value: 0,
},
},
{
date: '2020-03-01T00:00:00',
primary: {
label: 'Custom (Feb 28 - Mar 2, 2020)',
labelDate: '2020-03-01 00:00:00',
value: 0,
},
secondary: {
label: 'Previous year (Feb 28 - Mar 2, 2019)',
labelDate: '2019-03-01 00:00:00',
value: 1,
},
},
{
date: '2020-03-02T00:00:00',
primary: {
label: 'Custom (Feb 28 - Mar 2, 2020)',
labelDate: '2020-03-02 00:00:00',
value: 0,
},
secondary: {
label: 'Previous year (Feb 28 - Mar 2, 2019)',
labelDate: '2019-03-02 00:00:00',
value: 0,
},
},
] );
} );
test( 'should not bump up data in leap year when compare by month', () => {
const primaryData = {
data: {
totals: {
orders_count: 2,
},
intervals: [
generateDateInterval(
'2020-02',
'2020-02-01',
'2020-02-29',
{ orders_count: 1 }
),
generateDateInterval(
'2020-03',
'2020-03-01',
'2020-03-31',
{ orders_count: 1 }
),
],
},
};
const secondaryData = {
data: {
totals: {
orders_count: 2,
},
intervals: [
generateDateInterval(
'2019-02',
'2019-02-01',
'2019-02-28',
{ orders_count: 1 }
),
generateDateInterval(
'2019-03',
'2019-03-01',
'2019-03-31',
{ orders_count: 1 }
),
],
},
};
const primaryDatePicker = {
label: 'Custom',
range: 'Feb 1 - Mar 31, 2020',
after: '2020-01-31T16:00:00.000Z',
before: '2020-03-31T15:59:59.999Z',
};
const secondaryDatePicker = {
label: 'Previous year',
range: 'Feb 1 - Mar 31, 2019',
after: '2019-01-31T16:00:00.000Z',
before: '2019-03-31T15:59:59.999Z',
};
const chartData = buildChartData(
primaryData,
secondaryData,
primaryDatePicker,
secondaryDatePicker,
'previous_year',
'orders_count',
'month'
);
expect( chartData ).toEqual( [
{
date: '2020-02-01T00:00:00',
primary: {
label: 'Custom (Feb 1 - Mar 31, 2020)',
labelDate: '2020-02-01 00:00:00',
value: 1,
},
secondary: {
label: 'Previous year (Feb 1 - Mar 31, 2019)',
labelDate: '2019-02-01 00:00:00',
value: 1,
},
},
{
date: '2020-03-01T00:00:00',
primary: {
label: 'Custom (Feb 1 - Mar 31, 2020)',
labelDate: '2020-03-01 00:00:00',
value: 1,
},
secondary: {
label: 'Previous year (Feb 1 - Mar 31, 2019)',
labelDate: '2019-03-01 00:00:00',
value: 1,
},
},
] );
} );
} );
describe( 'dataContainsLeapYear', () => {
it( 'should return false when intervals are empty', () => {
const data = {
data: {
intervals: [],
},
};
expect( dataContainsLeapYear( data ) ).toBe( false );
} );
it( 'should return false when intervals are undefined', () => {
const data = {
data: {},
};
expect( dataContainsLeapYear( data ) ).toBe( false );
} );
it( 'should return false when interval does not include a leap year', () => {
const data = {
data: {
intervals: [
{ date_start: '2019-01-01', date_end: '2019-01-01' },
{ date_start: '2019-12-31', date_end: '2019-12-31' },
],
},
};
expect( dataContainsLeapYear( data ) ).toBe( false );
} );
// Test with multiple intervals where none include a leap year
it( 'should return false when no intervals include a leap year', () => {
const data = {
data: {
intervals: [
{ date_start: '2019-01-01', date_end: '2019-06-30' },
{ date_start: '2019-07-01', date_end: '2019-12-31' },
],
},
};
expect( dataContainsLeapYear( data ) ).toBe( false );
} );
// Test with multiple intervals where one includes a leap year
it( 'should return true when any interval includes a leap year', () => {
const data = {
data: {
intervals: [
{ date_start: '2020-01-01', date_end: '2020-01-01' },
{ date_start: '2020-01-02', date_end: '2020-01-02' },
],
},
};
expect( dataContainsLeapYear( data ) ).toBe( true );
} );
// Test with malformed date formats
it( 'should handle invalid date formats gracefully', () => {
const data = {
data: {
intervals: [ { date_start: null, date_end: '2020-99-99' } ],
},
};
expect( dataContainsLeapYear( data ) ).toBe( false );
} );
} );