diff options
-rw-r--r-- | t/app/controller/dashboard.t | 134 |
1 files changed, 127 insertions, 7 deletions
diff --git a/t/app/controller/dashboard.t b/t/app/controller/dashboard.t index 93aee9a72..4731397b7 100644 --- a/t/app/controller/dashboard.t +++ b/t/app/controller/dashboard.t @@ -47,8 +47,7 @@ $mech->content_contains( 'Summary Statistics for City of Edinburgh' ); FixMyStreet::App->model('DB::Contact')->search( { area_id => $test_council } ) ->delete; -FixMyStreet::App->model('DB::Problem')->search( { council => $test_council } ) - ->delete(); +delete_problems(); my @cats = qw( Grafitti Litter Potholes ); for my $contact ( @cats ) { @@ -97,13 +96,101 @@ foreach my $row ( @{ $res->{rows} }[1 .. 11] ) { } } -make_problem( { state => 'confirmed', conf_dt => DateTime->now } ); -$mech->get_ok('/dashboard'); -$res = $categories->scrape( $mech->content ); +foreach my $test ( + { + desc => 'confirmed today with no state', + dt => DateTime->now, + counts => [1,1,1,1], + }, + { + desc => 'confirmed last 7 days with no state', + dt => DateTime->now->subtract( days => 6, hours => 23 ), + counts => [1,2,2,2], + }, + { + desc => 'confirmed last 4 weeks with no state', + dt => DateTime->now->subtract( weeks => 2 ), + counts => [1,2,3,3], + }, + { + desc => 'confirmed this year with no state', + dt => DateTime->now->subtract( weeks => 7 ), + counts => [1,2,3,4], + }, +) { + subtest $test->{desc} => sub { + make_problem( { state => 'confirmed', conf_dt => $test->{dt} } ); + + $mech->get_ok('/dashboard'); + $res = $categories->scrape( $mech->content ); -is $res->{ totals }->[1], 1, 'Report in total'; -is $res->{ not_marked }->[1], 1, 'Report in not marked'; + check_row( $res, 'totals', $test->{counts} ); + check_row( $res, 'not_marked', $test->{counts} ); + }; +} + +delete_problems(); + +foreach my $test ( + { + desc => 'user fixed today', + confirm_dt => DateTime->now->subtract( days => 1 ), + mark_dt => DateTime->now, + state => 'fixed - user', + counts => { + totals => [1,1,1,1], + user => [1,1,1,1], + council => [0,0,0,0], + avg_fixed => [0,0,0,0], + total_fixed => [1,1,1,1], + } + }, + { + desc => 'council fixed today', + confirm_dt => DateTime->now->subtract( days => 1 ), + mark_dt => DateTime->now, + state => 'fixed - council', + counts => { + totals => [2,2,2,2], + user => [1,1,1,1], + council => [1,1,1,1], + avg_fixed => [1,1,1,1], + total_fixed => [2,2,2,2], + } + }, + { + desc => 'marked investigating today', + confirm_dt => DateTime->now->subtract( days => 1 ), + mark_dt => DateTime->now, + state => 'investigating', + counts => { + totals => [3,3,3,3], + user => [1,1,1,1], + council => [1,1,1,1], + total_fixed => [2,2,2,2], + avg_marked => [1,1,1,1], + investigating => [1,1,1,1], + } + }, +) { + subtest $test->{desc} => sub { + make_problem( + { + state => $test->{state}, + conf_dt => $test->{confirm_dt}, + mark_dt => $test->{mark_dt}, + } + ); + + $mech->get_ok('/dashboard'); + $res = $categories->scrape( $mech->content ); + + foreach my $row ( keys %{ $test->{counts} } ) { + check_row( $res, $row, $test->{counts}->{$row} ); + } + }; +} sub make_problem { my $args = shift; @@ -116,6 +203,7 @@ sub make_problem { state => $args->{state}, confirmed => $args->{conf_dt}, whensent => $args->{conf_dt}, + lastupdate => $args->{mark_dt} || $args->{conf_dt}, council => $test_council, postcode => 'EH99 1SP', latitude => '51', @@ -124,6 +212,38 @@ sub make_problem { used_map => 0, user_id => $p_user->id, } ); + + if ( $args->{state} ne 'confirmed' ) { + my $c = FixMyStreet::App->model('DB::Comment')->create( { + problem => $p, + user_id => $p_user->id, + state => 'confirmed', + problem_state => $args->{state}, + confirmed => $args->{mark_dt}, + text => 'an update', + mark_fixed => $args->{state} =~ /fixed/ ? 1 : 0, + anonymous => 1, + } ); + } +} + +sub check_row { + my $res = shift; + my $row = shift; + my $totals = shift; + + is $res->{ $row }->[0], $totals->[0], "Correct count in $row for WTD"; + is $res->{ $row }->[1], $totals->[1], "Correct count in $row for last 7 days"; + is $res->{ $row }->[2], $totals->[2], "Correct count in $row for last 4 weeks"; + is $res->{ $row }->[3], $totals->[3], "Correct count in $row for YTD"; +} + +sub delete_problems { + FixMyStreet::App->model('DB::Comment') + ->search( { 'problem.council' => $test_council }, { join => 'problem' } ) + ->delete; + FixMyStreet::App->model('DB::Problem') + ->search( { council => $test_council } )->delete(); } done_testing; |