aboutsummaryrefslogtreecommitdiffstats
path: root/t/app/controller/area_stats.t
diff options
context:
space:
mode:
Diffstat (limited to 't/app/controller/area_stats.t')
-rw-r--r--t/app/controller/area_stats.t234
1 files changed, 0 insertions, 234 deletions
diff --git a/t/app/controller/area_stats.t b/t/app/controller/area_stats.t
deleted file mode 100644
index ce2e3d7d6..000000000
--- a/t/app/controller/area_stats.t
+++ /dev/null
@@ -1,234 +0,0 @@
-use strict;
-use warnings;
-use Test::More;
-
-use FixMyStreet::TestMech;
-
-my $mech = FixMyStreet::TestMech->new;
-
-my $oxfordshire = $mech->create_body_ok(2237, 'Oxfordshire County Council');
-my $superuser = $mech->create_user_ok('superuser@example.com', name => 'Super User', is_superuser => 1);
-my $oxfordshireuser = $mech->create_user_ok('counciluser@example.com', name => 'Council User', from_body => $oxfordshire);
-
-$mech->create_contact_ok( body_id => $oxfordshire->id, category => 'Potholes', email => 'potholes@example.com' );
-$mech->create_contact_ok( body_id => $oxfordshire->id, category => 'Traffic lights', email => 'lights@example.com' );
-$mech->create_contact_ok( body_id => $oxfordshire->id, category => 'Litter', email => 'litter@example.com' );
-
-my $body_id = $oxfordshire->id;
-my $area_id = '20720';
-my $alt_area_id = '20721';
-
-$mech->create_problems_for_body(2, $oxfordshire->id, 'Title', { areas => ",$area_id,6753,2237,", created => \'current_timestamp', category => 'Potholes' });
-$mech->create_problems_for_body(3, $oxfordshire->id, 'Title', { areas => ",$area_id,6753,2237,", created => \'current_timestamp', category => 'Traffic lights' });
-$mech->create_problems_for_body(1, $oxfordshire->id, 'Title', { areas => ",$alt_area_id,6753,2237,", created => \'current_timestamp', category => 'Litter' });
-
-my @scheduled_problems = $mech->create_problems_for_body(7, $oxfordshire->id, 'Title', { areas => ",$area_id,6753,2237,", created => \'current_timestamp', category => 'Traffic lights' });
-my @fixed_problems = $mech->create_problems_for_body(4, $oxfordshire->id, 'Title', { areas => ",$area_id,6753,2237,", created => \'current_timestamp', category => 'Potholes' });
-my @closed_problems = $mech->create_problems_for_body(3, $oxfordshire->id, 'Title', { areas => ",$area_id,6753,2237,", created => \'current_timestamp', category => 'Traffic lights' });
-
-foreach my $problem (@scheduled_problems) {
- $problem->update({ state => 'planned' });
- $mech->create_comment_for_problem($problem, $oxfordshireuser, 'Title', 'text', 0, 'confirmed', 'planned', { confirmed => \'current_timestamp' });
-}
-
-foreach my $problem (@fixed_problems) {
- $problem->update({ state => 'fixed - council' });
- $mech->create_comment_for_problem($problem, $oxfordshireuser, 'Title', 'text', 0, 'confirmed', 'fixed', { confirmed => \'current_timestamp' });
-}
-
-foreach my $problem (@closed_problems) {
- $problem->update({ state => 'closed' });
- $mech->create_comment_for_problem($problem, $oxfordshireuser, 'Title', 'text', 0, 'confirmed', 'closed', { confirmed => \'current_timestamp' });
-}
-
-$mech->log_in_ok( $superuser->email );
-
-FixMyStreet::override_config {
- MAPIT_URL => 'http://mapit.uk/',
- ALLOWED_COBRANDS => [ 'oxfordshire' ],
-}, sub {
- subtest 'superuser gets areas listed' => sub {
- $mech->create_body_ok(1234, 'Some Other Council');
- $mech->get_ok('/admin/areastats');
- $mech->content_contains('Oxfordshire County Council', 'Oxfordshire is shown on the page');
- $mech->content_contains('Some Other Council', 'Some other council is shown on the page');
- };
-
- subtest 'body user sees whole body stats page' => sub {
- $mech->log_in_ok( $oxfordshireuser->email );
- $mech->get_ok('/admin/areastats');
- $mech->content_contains("Area stats for Oxfordshire County Council");
- $mech->content_contains('Trowbridge');
- $mech->content_contains('Bradford-on-Avon');
- };
-
- subtest 'area user can only see their area' => sub {
- $oxfordshireuser->update({area_id => 20720});
-
- $mech->get("/admin/areastats/$body_id");
- is $mech->status, 404, 'area user cannot see parent area';
-
- $mech->get("/admin/areastats/$body_id?area=20721");
- is $mech->status, 404, 'area user cannot see another area';
-
- $mech->get_ok('/admin/areastats');
- $mech->text_contains('Area 20720', 'index page displays their area to area user');
-
- $oxfordshireuser->update({area_id => undef});
- };
-
- subtest 'gets an area' => sub {
- $mech->log_in_ok( $oxfordshireuser->email );
- $mech->get_ok("/admin/areastats/$body_id?area=20720");
- $mech->content_contains('Area 20720', 'Area name is shown on the page');
-
- $mech->get('/admin/areastats/999');
- is $mech->status, 404, 'Getting a non-existent body returns 404';
-
- $mech->get("/admin/areastats/$body_id/999");
- is $mech->status, 404, 'Getting a non-existent area returns 404';
- };
-
- subtest 'shows correct stats for ward' => sub {
- $mech->get_ok("/admin/areastats/$body_id?area=20720");
- $mech->content_contains('19 opened, 7 scheduled, 3 closed, 4 fixed');
- $mech->text_contains('Potholes2004');
- $mech->text_contains('Traffic lights3730');
- $mech->text_contains('Litter0000');
-
- $mech->text_contains('Potholes6');
- $mech->text_contains('Traffic lights13');
-
- $mech->text_contains('average time between issue being opened and set to another status was 0 days');
- };
-
- subtest 'shows correct stats to area user' => sub {
- $oxfordshireuser->update({area_id => 20720});
-
- $mech->get_ok("/admin/areastats");
- $mech->content_contains('19 opened, 7 scheduled, 3 closed, 4 fixed');
- $mech->text_contains('Potholes2004');
- $mech->text_contains('Traffic lights3730');
- $mech->text_contains('Litter0000');
-
- $mech->text_contains('Potholes6');
- $mech->text_contains('Traffic lights13');
-
- $oxfordshireuser->update({area_id => undef});
- };
-
- subtest 'shows correct stats for ward using area param' => sub {
- $mech->get_ok("/admin/areastats/$body_id?area=20720");
- $mech->content_contains('19 opened, 7 scheduled, 3 closed, 4 fixed');
- $mech->text_contains('Potholes2004');
- $mech->text_contains('Traffic lights3730');
- $mech->text_contains('Litter0000');
-
- $mech->text_contains('Potholes6');
- $mech->text_contains('Traffic lights13');
- };
-
- subtest 'shows correct stats for council' => sub {
- $mech->get_ok("/admin/areastats/$body_id");
- $mech->content_contains('20 opened, 7 scheduled, 3 closed, 4 fixed');
- $mech->text_contains('Potholes2004');
- $mech->text_contains('Traffic lights3730');
- $mech->text_contains('Litter1000');
-
- $mech->text_contains('Potholes6');
- $mech->text_contains('Traffic lights13');
- };
-
- subtest 'shows average correctly' => sub {
- $fixed_problems[0]->update({ confirmed => DateTime->now->subtract(days => 2) });
- $fixed_problems[1]->update({ confirmed => DateTime->now->subtract(days => 3) });
- $fixed_problems[2]->update({ confirmed => DateTime->now->subtract(days => 7) });
- $fixed_problems[3]->update({ confirmed => DateTime->now->subtract(days => 4) });
- $scheduled_problems[0]->update({ confirmed => DateTime->now->subtract(days => 2) });
- $scheduled_problems[1]->update({ confirmed => DateTime->now->subtract(days => 4) });
- $scheduled_problems[2]->update({ confirmed => DateTime->now->subtract(days => 6) });
- $scheduled_problems[3]->update({ confirmed => DateTime->now->subtract(days => 7) });
- $scheduled_problems[4]->update({ confirmed => DateTime->now->subtract(days => 1) });
- $scheduled_problems[6]->update({ confirmed => DateTime->now->subtract(days => 1) });
- $closed_problems[0]->update({ confirmed => DateTime->now->subtract(days => 6) });
- $closed_problems[1]->update({ confirmed => DateTime->now->subtract(days => 9) });
- $closed_problems[2]->update({ confirmed => DateTime->now->subtract(days => 12) });
-
- $mech->get_ok("/admin/areastats/$body_id?area=20720");
- $mech->text_contains('average time between issue being opened and set to another status was 5 days');
- };
-
- subtest 'shows this month stats correctly' => sub {
- $fixed_problems[0]->update({ confirmed => DateTime->now->subtract(days => 50) });
- $fixed_problems[1]->update({ confirmed => DateTime->now->subtract(days => 50) });
- $scheduled_problems[1]->update({ confirmed => DateTime->now->subtract(days => 50) });
- $scheduled_problems[2]->update({ confirmed => DateTime->now->subtract(days => 50) });
-
- $mech->get_ok("/admin/areastats/$body_id?area=20720");
-
- $mech->content_contains('15 opened, 7 scheduled, 3 closed, 4 fixed');
- $mech->text_contains('Potholes2004');
- $mech->text_contains('Traffic lights3730');
-
- $mech->text_contains('Potholes4');
- $mech->text_contains('Traffic lights11');
-
- $mech->text_contains('average time between issue being opened and set to another status was 5 days');
- };
-
- subtest 'ignores multiple comments with the same state' => sub {
- $mech->create_comment_for_problem($scheduled_problems[0], $oxfordshireuser, 'Title', 'text', 0, 'confirmed', 'planned', { confirmed => \'current_timestamp' });
- $mech->get_ok("/admin/areastats/$body_id?area=20720");
-
- $mech->content_contains('15 opened, 7 scheduled, 3 closed, 4 fixed');
- $mech->text_contains('Potholes2004');
- $mech->text_contains('Traffic lights3730');
- };
-
- subtest 'ignores second state change if first was last month' => sub {
- my $comment = $scheduled_problems[0]->comments->search({}, { order_by => { '-asc' => 'id' } } )->first;
- $comment->update({ confirmed => DateTime->now->subtract(days => 40) });
- $mech->get_ok("/admin/areastats/$body_id?area=20720");
-
- $mech->content_contains('15 opened, 6 scheduled, 3 closed, 4 fixed');
- $mech->text_contains('Potholes2004');
- $mech->text_contains('Traffic lights3730');
- $comment->update({ confirmed => DateTime->now });
- };
-
- subtest 'average is only to first state change' => sub {
- for my $i (0..4) {
- $scheduled_problems[$i]->comments->first->update({ confirmed => $scheduled_problems[$i]->confirmed });
- $mech->create_comment_for_problem($scheduled_problems[$i], $oxfordshireuser, 'Title', 'text', 0, 'confirmed', 'fixed', { confirmed => \'current_timestamp' });
- }
-
- $mech->get_ok("/admin/areastats/$body_id?area=20720");
- $mech->text_contains('average time between issue being opened and set to another status was 4 days');
- };
-
- subtest 'average only includes actual state changes' => sub {
- my @probs = $mech->create_problems_for_body(2, $oxfordshire->id, 'Title',
- { areas => ",$area_id,6753,2237,", created => DateTime->now->subtract(days => 12), confirmed => DateTime->now->subtract(days => 12), category => 'Potholes' });
- $mech->create_comment_for_problem($probs[0], $oxfordshireuser, 'Title', 'text', 0, 'confirmed', 'confirmed', { confirmed => \'current_timestamp' });
-
- $mech->get_ok("/admin/areastats/$body_id?area=20720");
- $mech->text_contains('average time between issue being opened and set to another status was 4 days');
- };
-
- subtest 'shows no problems changed state if no average' => sub {
- for my $p (@scheduled_problems, @fixed_problems, @closed_problems) {
- $p->comments->delete;
- }
-
- $mech->get_ok("/admin/areastats/$body_id?area=20720");
- $mech->text_contains('17 opened, 0 scheduled, 0 closed, 0 fixed');
- $mech->text_contains('no problems changed state');
- }
-};
-
-END {
- FixMyStreet::DB->resultset('UserPlannedReport')->delete_all;
- $mech->delete_user( $superuser );
- $mech->delete_user( $oxfordshireuser );
- done_testing();
-}