2017-05-16 21:30:38 +01:00
use Mojo::Base - strict ;
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 ;
2017-05-16 22:45:49 +01:00
my $ dtf = $ schema - > storage - > datetime_parser ;
2017-05-16 21:30:38 +01:00
2017-08-31 18:04:51 +01:00
my $ org_result = $ schema - > resultset ( 'Organisation' ) - > find ( { name = > 'Test Org' } ) - > entity ;
my $ user_result = $ schema - > resultset ( 'User' ) - > find ( { email = > 'test1@example.com' } ) - > entity ;
2017-05-16 21:30:38 +01:00
2017-05-22 22:21:05 +01:00
my $ session_key = $ framework - > login ( {
2017-08-31 18:04:51 +01:00
email = > 'test1@example.com' ,
password = > 'abc123' ,
2017-05-22 22:21:05 +01:00
} ) ;
2017-07-20 16:41:35 +01:00
$ t - > app - > schema - > resultset ( 'Leaderboard' ) - > create_new ( 'monthly_total' , DateTime - > now - > truncate ( to = > 'month' ) - > subtract ( months = > 1 ) ) ;
2017-05-22 22:21:05 +01:00
$ t - > post_ok ( '/api/stats' = > json = > { session_key = > $ session_key } )
2017-08-31 18:04:51 +01:00
- > status_is ( 200 ) - > or ( $ framework - > dump_error )
2017-05-22 22:21:05 +01:00
- > json_is ( '/success' , Mojo::JSON - > true )
- > json_is ( '/today_sum' , 0 )
- > json_is ( '/today_count' , 0 )
- > json_is ( '/week_sum' , 0 )
- > json_is ( '/week_count' , 0 )
- > json_is ( '/month_sum' , 0 )
- > json_is ( '/month_count' , 0 )
- > json_is ( '/user_sum' , 0 )
- > json_is ( '/user_count' , 0 )
- > json_is ( '/global_sum' , 0 )
- > json_is ( '/global_count' , 0 ) ;
2017-05-16 21:30:38 +01:00
for ( 1 .. 10 ) {
2017-08-31 18:04:51 +01:00
$ user_result - > create_related ( 'purchases' , {
2017-05-16 21:30:38 +01:00
seller_id = > $ org_result - > id ,
2017-09-13 16:07:23 +01:00
value = > $ _ * 100000 ,
2017-05-16 21:30:38 +01:00
proof_image = > 'a' ,
} ) ;
}
2017-05-16 22:45:49 +01:00
for ( 11 .. 20 ) {
2017-08-31 18:04:51 +01:00
$ user_result - > create_related ( 'purchases' , {
2017-05-16 22:45:49 +01:00
seller_id = > $ org_result - > id ,
2017-09-13 16:07:23 +01:00
value = > $ _ * 100000 ,
2017-05-16 22:45:49 +01:00
proof_image = > 'a' ,
2017-08-14 16:10:14 +01:00
purchase_time = > $ dtf - > format_datetime ( DateTime - > today ( ) - > subtract ( days = > 5 ) ) ,
2017-05-16 22:45:49 +01:00
} ) ;
}
for ( 21 .. 30 ) {
2017-08-31 18:04:51 +01:00
$ user_result - > create_related ( 'purchases' , {
2017-05-16 22:45:49 +01:00
seller_id = > $ org_result - > id ,
2017-09-13 16:07:23 +01:00
value = > $ _ * 100000 ,
2017-05-16 22:45:49 +01:00
proof_image = > 'a' ,
2017-08-14 16:10:14 +01:00
purchase_time = > $ dtf - > format_datetime ( DateTime - > today ( ) - > subtract ( days = > 25 ) ) ,
2017-05-16 22:45:49 +01:00
} ) ;
}
for ( 31 .. 40 ) {
2017-08-31 18:04:51 +01:00
$ user_result - > create_related ( 'purchases' , {
2017-05-16 22:45:49 +01:00
seller_id = > $ org_result - > id ,
2017-09-13 16:07:23 +01:00
value = > $ _ * 100000 ,
2017-05-16 22:45:49 +01:00
proof_image = > 'a' ,
2017-08-14 16:10:14 +01:00
purchase_time = > $ dtf - > format_datetime ( DateTime - > today ( ) - > subtract ( days = > 50 ) ) ,
2017-05-16 22:45:49 +01:00
} ) ;
}
for ( 41 .. 50 ) {
2017-08-31 18:04:51 +01:00
$ org_result - > create_related ( 'purchases' , {
2017-05-16 22:45:49 +01:00
seller_id = > $ org_result - > id ,
2017-09-13 16:07:23 +01:00
value = > $ _ * 100000 ,
2017-05-16 22:45:49 +01:00
proof_image = > 'a' ,
2017-08-14 16:10:14 +01:00
purchase_time = > $ dtf - > format_datetime ( DateTime - > today ( ) - > subtract ( days = > 50 ) ) ,
2017-05-16 22:45:49 +01:00
} ) ;
}
2017-08-31 18:04:51 +01:00
is $ user_result - > purchases - > search ( {
2017-08-14 16:10:14 +01:00
purchase_time = > {
2017-05-16 21:30:38 +01:00
- between = > [
$ dtf - > format_datetime ( DateTime - > today ( ) ) ,
$ dtf - > format_datetime ( DateTime - > today ( ) - > add ( days = > 1 ) ) ,
] ,
} ,
2017-09-13 16:07:23 +01:00
} ) - > get_column ( 'value' ) - > sum , 5500000 , 'Got correct sum' ;
is $ user_result - > purchases - > today_rs - > get_column ( 'value' ) - > sum , 5500000 , 'Got correct sum through rs' ;
2017-05-16 21:30:38 +01:00
$ t - > post_ok ( '/api/stats' = > json = > { session_key = > $ session_key } )
- > status_is ( 200 )
- > json_is ( '/success' , Mojo::JSON - > true )
- > json_is ( '/today_sum' , 55 )
2017-05-16 22:45:49 +01:00
- > json_is ( '/today_count' , 10 )
- > json_is ( '/week_sum' , 155 )
- > json_is ( '/week_count' , 10 )
- > json_is ( '/month_sum' , 410 )
- > json_is ( '/month_count' , 20 )
- > json_is ( '/user_sum' , 820 )
- > json_is ( '/user_count' , 40 )
- > json_is ( '/global_sum' , 1275 )
- > json_is ( '/global_count' , 50 ) ;
2017-05-16 21:30:38 +01:00
done_testing ;