diff options
Diffstat (limited to 't/app/controller/report_new_unresponsive.t')
-rw-r--r-- | t/app/controller/report_new_unresponsive.t | 122 |
1 files changed, 122 insertions, 0 deletions
diff --git a/t/app/controller/report_new_unresponsive.t b/t/app/controller/report_new_unresponsive.t new file mode 100644 index 000000000..033475c25 --- /dev/null +++ b/t/app/controller/report_new_unresponsive.t @@ -0,0 +1,122 @@ +use FixMyStreet::TestMech; + +# disable info logs for this test run +FixMyStreet::App->log->disable('info'); +END { FixMyStreet::App->log->enable('info'); } + +my $mech = FixMyStreet::TestMech->new; + +my $body_edin = $mech->create_body_ok(2651, 'City of Edinburgh Council', { send_method => 'Refused' }); +my $body_chelt = $mech->create_body_ok(2326, 'Cheltenham Borough Council'); +$mech->create_contact_ok(body_id => $body_edin->id, category => 'Street lighting', email => 'highways@example.com'); +my $contact = $mech->create_contact_ok(body_id => $body_chelt->id, category => 'Trees', email => 'trees@example.org'); +$mech->create_contact_ok(body_id => $body_edin->id, category => 'Trees', email => 'trees@example.com'); +my $user = $mech->create_user_ok('test-2@example.com'); + +FixMyStreet::override_config { + ALLOWED_COBRANDS => 'fixmystreet', + MAPIT_URL => 'http://mapit.uk/', +}, sub { + subtest "unresponsive body handling, body-level send method" => sub { + my $body_id = $body_edin->id; + my $extra_details = $mech->get_ok_json('/report/new/ajax?latitude=55.952055&longitude=-3.189579'); + like $extra_details->{top_message}, qr{Edinburgh.*accept reports.*/unresponsive\?body=$body_id}; + is_deeply $extra_details->{unresponsive}, { $body_id => 1 }, "unresponsive json set"; + $extra_details = $mech->get_ok_json('/report/new/category_extras?category=Street%20lighting&latitude=55.952055&longitude=-3.189579'); + is_deeply $extra_details->{unresponsive}, { $body_id => 1 }, "unresponsive json set"; + + make_report('EH1 1BB'); + + like $mech->get_text_body_from_email, qr/despite not being sent/i, "correct email sent"; + + $user->problems->delete; + }; + + subtest "unresponsive body handling from mobile app" => sub { + $mech->log_out_ok; + $mech->post_ok( '/report/new/mobile', { + title => "Test Report at café", + detail => 'Test report details.', + photo1 => '', + name => 'Joe Bloggs', + email => $user->email, + may_show_name => '1', + phone => '07903 123 456', + category => 'Trees', + service => 'iOS', + lat => 55.952055, + lon => -3.189579, + pc => '', + used_map => '1', + submit_register => '1', + password_register => '', + }); + my $res = $mech->response; + ok $res->header('Content-Type') =~ m{^application/json\b}, 'response should be json'; + + my $report = $user->problems->first; + ok $report, "Found the report"; + is $report->bodies_str, undef, "Report not going anywhere"; + + like $mech->get_text_body_from_email, qr/despite not being sent/i, "correct email sent"; + + $body_edin->update({ send_method => undef }); + $user->problems->delete; + }; + + subtest "unresponsive body handling, per-category refusing" => sub { + $contact->update({ email => 'REFUSED' }); + my $extra_details = $mech->get_ok_json('/report/new/ajax?latitude=51.896268&longitude=-2.093063'); + like $extra_details->{by_category}{Trees}{category_extra}, qr/Cheltenham.*Trees.*unresponsive.*category=Trees/s; + $extra_details = $mech->get_ok_json('/report/new/category_extras?category=Trees&latitude=51.896268&longitude=-2.093063'); + is_deeply $extra_details->{unresponsive}, { $body_chelt->id => 1 }, "unresponsive json set"; + + make_report('GL50 2PR'); + + $contact->update({ email => 'trees@example.org' }); + }; + + subtest "unresponsive body page works" => sub { + my $url = "/unresponsive?body=" . $body_edin->id; + is $mech->get($url)->code, 404, "page not found"; + $body_edin->update({ send_method => 'Refused' }); + $mech->get_ok($url); + $mech->content_contains('Edinburgh'); + $body_edin->update({ send_method => undef }); + + $url = "/unresponsive?body=" . $body_chelt->id . ";category=Trees"; + is $mech->get($url)->code, 404, "page not found"; + $contact->update({ email => 'REFUSED' }); + $mech->get_ok($url); + $mech->content_contains('Cheltenham'); + $mech->content_contains('Trees'); + }; +}; + +done_testing; + +sub make_report { + my $pc = shift; + $mech->get_ok('/around'); + $mech->submit_form_ok( { with_fields => { pc => $pc } }, "submit location" ); + $mech->follow_link_ok( { text_regex => qr/skip this step/i, }, "follow 'skip this step' link" ); + $mech->submit_form_ok( + { + with_fields => { + title => "Test Report at café", + detail => 'Test report details.', + photo1 => '', + name => 'Joe Bloggs', + username => $user->email, + may_show_name => '1', + phone => '07903 123 456', + category => 'Trees', + } + }, + "submit good details" + ); + + my $report = $user->problems->first; + ok $report, "Found the report"; + is $report->bodies_str, undef, "Report not going anywhere"; +} |