aboutsummaryrefslogtreecommitdiffstats
path: root/t/app/controller/report_display.t
diff options
context:
space:
mode:
Diffstat (limited to 't/app/controller/report_display.t')
-rw-r--r--t/app/controller/report_display.t304
1 files changed, 247 insertions, 57 deletions
diff --git a/t/app/controller/report_display.t b/t/app/controller/report_display.t
index 39f1b59a7..b35a4a026 100644
--- a/t/app/controller/report_display.t
+++ b/t/app/controller/report_display.t
@@ -5,21 +5,16 @@ use Test::More;
use FixMyStreet::TestMech;
use Web::Scraper;
use Path::Class;
+use Test::LongString;
use DateTime;
my $mech = FixMyStreet::TestMech->new;
# create a test user and report
$mech->delete_user('test@example.com');
-my $user =
- FixMyStreet::App->model('DB::User')
- ->find_or_create( { email => 'test@example.com', name => 'Test User' } );
-ok $user, "created test user";
+my $user = $mech->create_user_ok('test@example.com', name => 'Test User');
-my $user2 =
- FixMyStreet::App->model('DB::User')
- ->find_or_create( { email => 'test2@example.com', name => 'Other User' } );
-ok $user2, "created test user";
+my $user2 = $mech->create_user_ok('test2@example.com', name => 'Other User');
my $dt = DateTime->new(
year => 2011,
@@ -30,31 +25,16 @@ my $dt = DateTime->new(
second => 23
);
-my $report = FixMyStreet::App->model('DB::Problem')->find_or_create(
- {
- postcode => 'SW1A 1AA',
- council => '2504',
- areas => ',105255,11806,11828,2247,2504,',
- category => 'Other',
- title => 'Test 2',
- detail => 'Test 2 Detail',
- used_map => 't',
- name => 'Test User',
- anonymous => 'f',
- state => 'confirmed',
- confirmed => $dt->ymd . ' ' . $dt->hms,
- lang => 'en-gb',
- service => '',
- cobrand => 'default',
- cobrand_data => '',
- send_questionnaire => 't',
- latitude => '51.5016605453401',
- longitude => '-0.142497580865087',
- user_id => $user->id,
- }
-);
+my $westminster = $mech->create_body_ok(2504, 'Westminster City Council');
+my ($report, $report2) = $mech->create_problems_for_body(2, $westminster->id, "Example", {
+ user => $user,
+ confirmed => $dt->ymd . ' ' . $dt->hms,
+});
+$report->update({
+ title => 'Test 2',
+ detail => 'Test 2 Detail'
+});
my $report_id = $report->id;
-ok $report, "created test report - $report_id";
subtest "check that no id redirects to homepage" => sub {
$mech->get_ok('/report');
@@ -94,6 +74,7 @@ subtest "change report to unconfirmed and check for 404 status" => sub {
ok $report->update( { state => 'confirmed' } ), 'confirm report again';
};
+
subtest "change report to hidden and check for 410 status" => sub {
ok $report->update( { state => 'hidden' } ), 'hide report';
ok $mech->get("/report/$report_id"), "get '/report/$report_id'";
@@ -129,6 +110,22 @@ subtest "check owner of report can view non public reports" => sub {
ok $report->update( { non_public => 0 } ), 'make report public';
};
+subtest "duplicate reports are signposted correctly" => sub {
+ $report2->set_extra_metadata(duplicate_of => $report->id);
+ $report2->state('duplicate');
+ $report2->update;
+
+ my $report2_id = $report2->id;
+ ok $mech->get("/report/$report2_id"), "get '/report/$report2_id'";
+ $mech->content_contains('This report is a duplicate');
+ $mech->content_contains($report->title);
+ $mech->log_out_ok;
+
+ $report2->unset_extra_metadata('duplicate_of');
+ $report2->state('confirmed');
+ $report2->update;
+};
+
subtest "test a good report" => sub {
$mech->get_ok("/report/$report_id");
is $mech->uri->path, "/report/$report_id", "at /report/$report_id";
@@ -169,14 +166,14 @@ foreach my $meta (
category => '',
service => 'Transport service',
meta =>
-'Reported by Transport service by Test User at 15:47, Sat 16 April 2011'
+'Reported via Transport service by Test User at 15:47, Sat 16 April 2011'
},
{
anonymous => 'f',
category => 'Roads',
service => 'Transport service',
meta =>
-'Reported by Transport service in the Roads category by Test User at 15:47, Sat 16 April 2011'
+'Reported via Transport service in the Roads category by Test User at 15:47, Sat 16 April 2011'
},
{
anonymous => 't',
@@ -196,14 +193,14 @@ foreach my $meta (
category => '',
service => 'Transport service',
meta =>
-'Reported by Transport service anonymously at 15:47, Sat 16 April 2011'
+'Reported via Transport service anonymously at 15:47, Sat 16 April 2011'
},
{
anonymous => 't',
category => 'Roads',
service => 'Transport service',
meta =>
-'Reported by Transport service in the Roads category anonymously at 15:47, Sat 16 April 2011'
+'Reported via Transport service in the Roads category anonymously at 15:47, Sat 16 April 2011'
},
)
{
@@ -213,13 +210,13 @@ foreach my $meta (
$report->update;
subtest "test correct problem meta information" => sub {
$mech->get_ok("/report/$report_id");
-
+
is $mech->extract_problem_meta, $meta->{meta};
};
}
-for my $test (
+for my $test (
{
description => 'new report',
date => DateTime->now,
@@ -283,6 +280,38 @@ for my $test (
fixed => 1
},
{
+ description => 'duplicate report',
+ date => DateTime->now,
+ state => 'duplicate',
+ banner_id => 'closed',
+ banner_text => 'closed',
+ fixed => 0
+ },
+ {
+ description => 'not responsible report',
+ date => DateTime->now,
+ state => 'not responsible',
+ banner_id => 'closed',
+ banner_text => 'closed',
+ fixed => 0
+ },
+ {
+ description => 'unable to fix report',
+ date => DateTime->now,
+ state => 'unable to fix',
+ banner_id => 'closed',
+ banner_text => 'closed',
+ fixed => 0
+ },
+ {
+ description => 'internal referral report',
+ date => DateTime->now,
+ state => 'internal referral',
+ banner_id => 'closed',
+ banner_text => 'closed',
+ fixed => 0
+ },
+ {
description => 'closed report',
date => DateTime->now,
state => 'closed',
@@ -299,6 +328,14 @@ for my $test (
fixed => 0
},
{
+ description => 'action scheduled report',
+ date => DateTime->now,
+ state => 'action scheduled',
+ banner_id => 'progress',
+ banner_text => 'progress',
+ fixed => 0
+ },
+ {
description => 'planned report',
date => DateTime->now,
state => 'planned',
@@ -307,7 +344,7 @@ for my $test (
fixed => 0
},
{
- description => 'in progressreport',
+ description => 'in progress report',
date => DateTime->now,
state => 'in progress',
banner_id => 'progress',
@@ -345,30 +382,33 @@ for my $test (
};
}
-for my $test (
+my $body_westminster = $mech->create_body_ok(2504, 'Westminster City Council');
+my $body_camden = $mech->create_body_ok(2505, 'Camden Borough Council');
+
+for my $test (
{
desc => 'no state dropdown if user not from authority',
- from_body => 0,
+ from_body => undef,
no_state => 1,
- report_council => '2504',
+ report_body => $body_westminster->id,
},
{
desc => 'state dropdown if user from authority',
- from_body => 2504,
+ from_body => $body_westminster->id,
no_state => 0,
- report_council => '2504',
+ report_body => $body_westminster->id,
},
{
- desc => 'no state dropdown if user not from same council as problem',
- from_body => 2505,
+ desc => 'no state dropdown if user not from same body as problem',
+ from_body => $body_camden->id,
no_state => 1,
- report_council => '2504',
+ report_body => $body_westminster->id,
},
{
- desc => 'state dropdown if user from authority and problem sent to multiple councils',
- from_body => 2504,
+ desc => 'state dropdown if user from authority and problem sent to multiple bodies',
+ from_body => $body_westminster->id,
no_state => 0,
- report_council => '2504,2506',
+ report_body => $body_westminster->id . ',2506',
},
) {
subtest $test->{desc} => sub {
@@ -377,7 +417,7 @@ for my $test (
$user->update;
$report->discard_changes;
- $report->council( $test->{report_council} );
+ $report->bodies_str( $test->{report_body} );
$report->update;
$mech->get_ok("/report/$report_id");
@@ -390,10 +430,160 @@ for my $test (
};
}
-$report->discard_changes;
-$report->council( 2504 );
-$report->update;
+subtest "Zurich unconfirmeds are 200" => sub {
+ FixMyStreet::override_config {
+ ALLOWED_COBRANDS => [ 'zurich' ],
+ MAP_TYPE => 'Zurich,OSM',
+ }, sub {
+ $mech->host( 'zurich.example.com' );
+ ok $report->update( { state => 'unconfirmed' } ), 'unconfirm report';
+ $mech->get_ok("/report/$report_id");
+ $mech->content_contains( 'Überprüfung ausstehend' );
+ ok $report->update( { state => 'confirmed' } ), 'confirm report again';
+ $mech->host( 'www.fixmystreet.com' );
+ };
+};
+
+subtest "Zurich banners are displayed correctly" => sub {
+ FixMyStreet::override_config {
+ ALLOWED_COBRANDS => [ 'zurich' ],
+ MAP_TYPE => 'Zurich,OSM',
+ }, sub {
+ $mech->host( 'zurich.example.com' );
-# tidy up
-$mech->delete_user('test@example.com');
-done_testing();
+ for my $test (
+ {
+ description => 'new report',
+ state => 'unconfirmed',
+ banner_id => 'closed',
+ banner_text => 'Erfasst'
+ },
+ {
+ description => 'confirmed report',
+ state => 'confirmed',
+ banner_id => 'closed',
+ banner_text => 'Aufgenommen',
+ },
+ {
+ description => 'fixed report',
+ state => 'fixed - council',
+ banner_id => 'fixed',
+ banner_text => 'Beantwortet',
+ },
+ {
+ description => 'closed report',
+ state => 'closed',
+ banner_id => 'closed',
+ banner_text => _('Extern'),
+ },
+ {
+ description => 'in progress report',
+ state => 'in progress',
+ banner_id => 'progress',
+ banner_text => 'In Bearbeitung',
+ },
+ {
+ description => 'planned report',
+ state => 'planned',
+ banner_id => 'progress',
+ banner_text => 'In Bearbeitung',
+ },
+ {
+ description => 'planned report',
+ state => 'planned',
+ banner_id => 'progress',
+ banner_text => 'In Bearbeitung',
+ },
+ {
+ description => 'jurisdiction unknown',
+ state => 'unable to fix',
+ banner_id => 'fixed',
+ # We can't use _('Jurisdiction Unknown') here because
+ # TestMech::extract_problem_banner decodes the HTML entities before
+ # the string is passed back.
+ banner_text => 'Zust\x{e4}ndigkeit unbekannt',
+ },
+ ) {
+ subtest "banner for $test->{description}" => sub {
+ $report->state( $test->{state} );
+ $report->update;
+
+ $mech->get_ok("/report/$report_id");
+ is $mech->uri->path, "/report/$report_id", "at /report/$report_id";
+ my $banner = $mech->extract_problem_banner;
+ if ( $banner->{text} ) {
+ $banner->{text} =~ s/^ //g;
+ $banner->{text} =~ s/ $//g;
+ }
+
+ is $banner->{id}, $test->{banner_id}, 'banner id';
+ if ($test->{banner_text}) {
+ like_string( $banner->{text}, qr/$test->{banner_text}/i, 'banner text is ' . $test->{banner_text} );
+ } else {
+ is $banner->{text}, $test->{banner_text}, 'banner text';
+ }
+
+ };
+ }
+
+ $mech->host( 'www.fixmystreet.com' );
+ };
+};
+
+my $oxfordshire = $mech->create_body_ok(2237, 'Oxfordshire County Council', id => 2237);
+my $oxfordshireuser = $mech->create_user_ok('counciluser@example.com', name => 'Council User', from_body => $oxfordshire);
+
+subtest "check user details show when a user has correct permissions" => sub {
+ $report->update( {
+ name => 'Oxfordshire County Council',
+ user_id => $oxfordshireuser->id,
+ service => '',
+ anonymous => 'f',
+ bodies_str => $oxfordshire->id,
+ confirmed => '2012-01-10 15:17:00'
+ });
+
+ ok $oxfordshireuser->user_body_permissions->create({
+ body => $oxfordshire,
+ permission_type => 'view_body_contribute_details',
+ });
+
+ $mech->log_in_ok( $oxfordshireuser->email );
+ ok $mech->get("/report/$report_id"), "get '/report/$report_id'";
+ is $mech->extract_problem_meta,
+ 'Reported in the Roads category by Oxfordshire County Council (Council User) at 15:17, Tue 10 January 2012',
+ 'correct problem meta information';
+
+ ok $oxfordshireuser->user_body_permissions->delete_all, "Remove view_body_contribute_details permissions";
+
+ ok $mech->get("/report/$report_id"), "get '/report/$report_id'";
+ is $mech->extract_problem_meta,
+ 'Reported in the Roads category by Oxfordshire County Council at 15:17, Tue 10 January 2012',
+ 'correct problem meta information for user without relevant permissions';
+
+ $mech->log_out_ok;
+
+ ok $mech->get("/report/$report_id"), "get '/report/$report_id'";
+ is $mech->extract_problem_meta,
+ 'Reported in the Roads category by Oxfordshire County Council at 15:17, Tue 10 January 2012',
+ 'correct problem meta information for logged out user';
+
+};
+
+subtest "check brackets don't appear when username and report name are the same" => sub {
+ $report->update( {
+ name => 'Council User'
+ });
+
+ $mech->log_in_ok( $oxfordshireuser->email );
+ ok $mech->get("/report/$report_id"), "get '/report/$report_id'";
+ is $mech->extract_problem_meta,
+ 'Reported in the Roads category by Council User at 15:17, Tue 10 January 2012',
+ 'correct problem meta information';
+};
+
+END {
+ $mech->delete_user('test@example.com');
+ $mech->delete_body($westminster);
+ done_testing();
+}