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.t265
1 files changed, 265 insertions, 0 deletions
diff --git a/t/app/controller/report_display.t b/t/app/controller/report_display.t
new file mode 100644
index 000000000..1f857a387
--- /dev/null
+++ b/t/app/controller/report_display.t
@@ -0,0 +1,265 @@
+use strict;
+use warnings;
+use Test::More;
+
+use FixMyStreet::TestMech;
+use Web::Scraper;
+use Path::Class;
+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 $dt = DateTime->new(
+ year => 2011,
+ month => 04,
+ day => 16,
+ hour => 15,
+ minute => 47,
+ 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 $report_id = $report->id;
+ok $report, "created test report - $report_id";
+
+subtest "check that no id redirects to homepage" => sub {
+ $mech->get_ok('/report');
+ is $mech->uri->path, '/', "at home page";
+};
+
+subtest "test id=NNN redirects to /NNN" => sub {
+ $mech->get_ok("/report?id=$report_id");
+ is $mech->uri->path, "/report/$report_id", "at /report/$report_id";
+};
+
+subtest "test bad council email clients web links" => sub {
+ $mech->get_ok("/report/3D$report_id");
+ is $mech->uri->path, "/report/$report_id", "at /report/$report_id";
+};
+
+subtest "test tailing non-ints get stripped" => sub {
+ $mech->get_ok("/report/${report_id}xx ");
+ is $mech->uri->path, "/report/$report_id", "at /report/$report_id";
+};
+
+subtest "test bad ids get dealt with (404)" => sub {
+ foreach my $id ( 'XXX', 99999999 ) {
+ ok $mech->get("/report/$id"), "get '/report/$id'";
+ is $mech->res->code, 404, "page not found";
+ is $mech->uri->path, "/report/$id", "at /report/$id";
+ $mech->content_contains('Unknown problem ID');
+ }
+};
+
+subtest "change report to unconfirmed and check for 404 status" => sub {
+ ok $report->update( { state => 'unconfirmed' } ), 'unconfirm report';
+ ok $mech->get("/report/$report_id"), "get '/report/$report_id'";
+ is $mech->res->code, 404, "page not found";
+ is $mech->uri->path, "/report/$report_id", "at /report/$report_id";
+ $mech->content_contains('Unknown problem ID');
+ 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'";
+ is $mech->res->code, 410, "page gone";
+ is $mech->uri->path, "/report/$report_id", "at /report/$report_id";
+ $mech->content_contains('That report has been removed from FixMyStreet.');
+ ok $report->update( { state => 'confirmed' } ), 'confirm report again';
+};
+
+subtest "test a good report" => sub {
+ $mech->get_ok("/report/$report_id");
+ is $mech->uri->path, "/report/$report_id", "at /report/$report_id";
+ is $mech->extract_problem_title, 'Test 2', 'problem title';
+ is $mech->extract_problem_meta,
+ 'Reported by Test User at 15:47, Saturday 16 April 2011',
+ 'correct problem meta information';
+ $mech->content_contains('Test 2 Detail');
+
+ my $update_form = $mech->form_name('updateForm');
+
+ my %fields = (
+ name => '',
+ rznvy => '',
+ update => '',
+ add_alert => 1, # defaults to true
+ fixed => undef
+ );
+ is $update_form->value($_), $fields{$_}, "$_ value" for keys %fields;
+};
+
+foreach my $meta (
+ {
+ anonymous => 'f',
+ category => 'Other',
+ service => '',
+ meta => 'Reported by Test User at 15:47, Saturday 16 April 2011'
+ },
+ {
+ anonymous => 'f',
+ category => 'Roads',
+ service => '',
+ meta =>
+'Reported in the Roads category by Test User at 15:47, Saturday 16 April 2011'
+ },
+ {
+ anonymous => 'f',
+ category => '',
+ service => 'Transport service',
+ meta =>
+'Reported by Transport service by Test User at 15:47, Saturday 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, Saturday 16 April 2011'
+ },
+ {
+ anonymous => 't',
+ category => 'Other',
+ service => '',
+ meta => 'Reported anonymously at 15:47, Saturday 16 April 2011'
+ },
+ {
+ anonymous => 't',
+ category => 'Roads',
+ service => '',
+ meta =>
+'Reported in the Roads category anonymously at 15:47, Saturday 16 April 2011'
+ },
+ {
+ anonymous => 't',
+ category => '',
+ service => 'Transport service',
+ meta =>
+'Reported by Transport service anonymously at 15:47, Saturday 16 April 2011'
+ },
+ {
+ anonymous => 't',
+ category => 'Roads',
+ service => 'Transport service',
+ meta =>
+'Reported by Transport service in the Roads category anonymously at 15:47, Saturday 16 April 2011'
+ },
+ )
+{
+ $report->service( $meta->{service} );
+ $report->category( $meta->{category} );
+ $report->anonymous( $meta->{anonymous} );
+ $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 (
+ {
+ description => 'new report',
+ date => DateTime->now,
+ state => 'confirmed',
+ banner_id => '',
+ banner_text => '',
+ fixed => 0
+ },
+ {
+ description => 'old report',
+ date => DateTime->new(
+ year => 2009,
+ month => 6,
+ day => 12,
+ hour => 9,
+ minute => 43,
+ second => 12
+ ),
+ state => 'confirmed',
+ banner_id => 'unknown',
+ banner_text => 'This problem is old and of unknown status.',
+ fixed => 0
+ },
+ {
+ description => 'old fixed report',
+ date => DateTime->new(
+ year => 2009,
+ month => 6,
+ day => 12,
+ hour => 9,
+ minute => 43,
+ second => 12
+ ),
+ state => 'fixed',
+ banner_id => 'fixed',
+ banner_text => 'This problem has been fixed.',
+ fixed => 1
+ },
+ {
+ description => 'fixed report',
+ date => DateTime->now,
+ state => 'fixed',
+ banner_id => 'fixed',
+ banner_text => 'This problem has been fixed.',
+ fixed => 1
+ },
+) {
+ subtest "banner for $test->{description}" => sub {
+ $report->confirmed( $test->{date}->ymd . ' ' . $test->{date}->hms );
+ $report->lastupdate( $test->{date}->ymd . ' ' . $test->{date}->hms );
+ $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;
+ $banner->{text} =~ s/^ //g;
+ $banner->{text} =~ s/ $//g;
+
+ is $banner->{id}, $test->{banner_id}, 'banner id';
+ is $banner->{text}, $test->{banner_text}, 'banner text';
+
+ my $update_form = $mech->form_name( 'updateForm' );
+ if ( $test->{fixed} ) {
+ is $update_form->find_input( 'fixed' ), undef, 'problem is fixed';
+ } else {
+ ok $update_form->find_input( 'fixed' ), 'problem is not fixed';
+ }
+ };
+}
+
+# tidy up
+$mech->delete_user('test@example.com');
+done_testing();