2017-05-16 21:30:38 +01:00
use Mojo::Base - strict ;
2017-12-18 14:05:51 +00:00
BEGIN {
use Test::MockTime qw/ set_absolute_time / ;
}
2017-08-31 18:04:51 +01:00
use FindBin qw/ $Bin / ;
2017-05-16 21:30:38 +01:00
use Test::More ;
use Mojo::JSON ;
use Test::Pear::LocalLoop ;
use DateTime ;
2017-08-31 18:04:51 +01:00
my $ framework = Test::Pear::LocalLoop - > new (
etc_dir = > "$Bin/../etc" ,
) ;
$ framework - > install_fixtures ( 'users' ) ;
2017-05-16 21:30:38 +01:00
my $ t = $ framework - > framework ;
my $ schema = $ t - > app - > schema ;
2018-04-13 18:08:10 +01:00
set_absolute_time ( '2018-01-08T00:00:00Z' ) ;
2017-12-18 14:05:51 +00:00
2017-12-14 20:30:44 +00:00
my $ start = DateTime - > today - > subtract ( hours = > 12 ) ;
# create 40 days worth of data
for my $ count ( 0 .. 40 ) {
my $ trans_day = $ start - > clone - > subtract ( days = > $ count ) ;
create_random_transaction ( 'test1@example.com' , $ trans_day ) ;
if ( $ count % 2 ) {
create_random_transaction ( 'test1@example.com' , $ trans_day ) ;
}
if ( $ count % 3 ) {
create_random_transaction ( 'test1@example.com' , $ trans_day ) ;
}
if ( $ count % 4 ) {
create_random_transaction ( 'test1@example.com' , $ trans_day ) ;
}
}
2017-05-16 21:30:38 +01:00
2017-05-22 22:21:05 +01:00
my $ session_key = $ framework - > login ( {
2017-12-14 20:30:44 +00:00
email = > 'test1@example.com' ,
2017-08-31 18:04:51 +01:00
password = > 'abc123' ,
2017-05-22 22:21:05 +01:00
} ) ;
2017-12-18 12:56:45 +00:00
$ t - > post_ok ( '/api/stats/customer' = > json = > {
2017-12-14 20:30:44 +00:00
session_key = > $ session_key ,
} )
2017-08-31 18:04:51 +01:00
- > status_is ( 200 ) - > or ( $ framework - > dump_error )
2017-12-15 15:05:04 +00:00
- > json_is ( '/weeks' , {
2018-04-13 18:08:10 +01:00
first = > 17 ,
2018-03-21 16:01:46 +00:00
second = > 20 ,
2018-04-13 18:08:10 +01:00
max = > 21 ,
2017-12-19 18:03:15 +00:00
sum = > 118 ,
2018-03-21 16:01:46 +00:00
count = > 6 ,
2017-12-15 17:52:02 +00:00
} )
- > json_is ( '/sectors' , {
sectors = > [ 'A' ] ,
purchases = > [ 118 ] ,
2018-04-13 18:08:10 +01:00
} )
- > json_is ( '/data' , {
cat_total = > {
Uncategorised = > 810 ,
} ,
categories = > {
"2017-12-11" = > [ {
days = > "2017-12-11" ,
value = > 210 ,
category = > 'Uncategorised' ,
} ] ,
"2017-12-18" = > [ {
days = > "2017-12-18" ,
value = > 200 ,
category = > 'Uncategorised' ,
} ] ,
"2017-12-25" = > [ {
days = > "2017-12-25" ,
value = > 210 ,
category = > 'Uncategorised' ,
} ] ,
"2018-01-01" = > [ {
days = > "2018-01-01" ,
value = > 190 ,
category = > 'Uncategorised' ,
} ] ,
} ,
cat_total = > {
Uncategorised = > 810 ,
} ,
essentials = > {
purchase_no_essential_total = > 0 ,
purchase_no_total = > 118 ,
} ,
} ) - > or ( $ framework - > dump_error ) ;
2017-05-16 22:45:49 +01:00
2017-12-14 20:30:44 +00:00
sub create_random_transaction {
my $ buyer = shift ;
my $ time = shift ;
2017-05-16 22:45:49 +01:00
2017-12-14 20:30:44 +00:00
my $ buyer_result = $ schema - > resultset ( 'User' ) - > find ( { email = > $ buyer } ) - > entity ;
my $ seller_result = $ schema - > resultset ( 'Organisation' ) - > find ( { name = > 'Test Org' } ) - > entity ;
$ schema - > resultset ( 'Transaction' ) - > create ( {
buyer = > $ buyer_result ,
seller = > $ seller_result ,
value = > 10 * 100000 ,
2017-05-16 22:45:49 +01:00
proof_image = > 'a' ,
2017-12-14 20:30:44 +00:00
purchase_time = > $ time ,
2017-05-16 22:45:49 +01:00
} ) ;
}
2017-05-16 21:30:38 +01:00
done_testing ;