diff options
Diffstat (limited to 't/app/controller/report_new_open311.t')
-rw-r--r-- | t/app/controller/report_new_open311.t | 138 |
1 files changed, 122 insertions, 16 deletions
diff --git a/t/app/controller/report_new_open311.t b/t/app/controller/report_new_open311.t index 0224e7e47..17b489447 100644 --- a/t/app/controller/report_new_open311.t +++ b/t/app/controller/report_new_open311.t @@ -1,5 +1,6 @@ use FixMyStreet::TestMech; use FixMyStreet::App; +use Test::LongString; use Web::Scraper; # disable info logs for this test run @@ -39,32 +40,57 @@ my $contact2 = $mech->create_contact_ok( category => 'Graffiti Removal', email => '101', ); +$mech->create_contact_ok( + body_id => $body->id, # Edinburgh + category => 'Ball lighting', + email => '102', + extra => { _fields => [ + { description => 'Size', code => 'size', required => 'True', automated => '' }, + { description => 'Speed', code => 'speed', required => 'True', automated => 'server_set' }, + { description => 'Colour', code => 'colour', required => 'True', automated => 'hidden_field' }, + ] }, +); + +my $body2 = $mech->create_body_ok(2651, 'Edinburgh Council'); +my $contact4 = $mech->create_contact_ok( + body_id => $body2->id, # Edinburgh + category => 'Pothole', + email => '103', + extra => { _fields => [ + { description => 'USRN', code => 'usrn', required => 'true', automated => 'hidden_field', variable => 'true', order => '1' }, + { description => 'Asset ID', code => 'central_asset_id', required => 'true', automated => 'hidden_field', variable => 'true', order => '2' }, + ] }, +); # test that the various bit of form get filled in and errors correctly # generated. +my $empty_form = { + title => '', + detail => '', + photo1 => '', + photo2 => '', + photo3 => '', + name => '', + may_show_name => '1', + username => '', + email => '', + phone => '', + category => '', + password_sign_in => '', + password_register => '', + remember_me => undef, +}; foreach my $test ( { msg => 'all fields empty', pc => 'EH99 1SP', fields => { - title => '', - detail => '', - photo1 => '', - photo2 => '', - photo3 => '', - name => '', - may_show_name => '1', - username => '', - email => '', - phone => '', - category => 'Street lighting', - password_sign_in => '', - password_register => '', - remember_me => undef, + %$empty_form, + category => 'Street lighting', }, changes => { number => '', - type => 'old', + type => '', }, errors => [ 'This information is required', @@ -80,6 +106,7 @@ foreach my $test ( username => 'testopen311@example.com', category => 'Street lighting', number => 27, + type => 'old', }, extra => [ { @@ -94,6 +121,45 @@ foreach my $test ( } ] }, + { + msg => 'automated things', + pc => 'EH99 1SP', + fields => { + %$empty_form, + category => 'Ball lighting', + }, + changes => { + size => '', + }, + hidden => [ 'colour' ], + errors => [ + 'This information is required', + 'Please enter a subject', + 'Please enter some details', + 'Please enter your email', + 'Please enter your name', + ], + submit_with => { + title => 'test', + detail => 'test detail', + name => 'Test User', + username => 'testopen311@example.com', + size => 'big', + colour => 'red', + }, + extra => [ + { + name => 'size', + value => 'big', + description => 'Size', + }, + { + name => 'colour', + value => 'red', + description => 'Colour', + } + ] + }, ) { subtest "check form errors where $test->{msg}" => sub { @@ -139,6 +205,12 @@ foreach my $test ( }; is_deeply $mech->visible_form_values, $new_values, "values correctly changed"; + if ($test->{hidden}) { + my %hidden_fields = map { $_->name => 1 } grep { $_->type eq 'hidden' } ($mech->forms)[0]->inputs; + foreach (@{$test->{hidden}}) { + is $hidden_fields{$_}, 1; + } + } if ( $test->{fields}->{category} eq 'Street lighting' ) { my $result = scraper { @@ -146,7 +218,7 @@ foreach my $test ( } ->scrape( $mech->response ); - is_deeply $result->{option}, [ qw/old modern/], 'displayed streetlight type select'; + is_deeply $result->{option}, [ "", qw/old modern/], 'displayed streetlight type select'; } $new_values = { @@ -172,4 +244,38 @@ foreach my $test ( }; } +subtest "Category extras omits description label when all fields are hidden" => sub { + FixMyStreet::override_config { + ALLOWED_COBRANDS => [ { fixmystreet => '.' } ], + MAPIT_URL => 'http://mapit.uk/', + }, sub { + my $json = $mech->get_ok_json('/report/new/category_extras?category=Pothole&latitude=55.952055&longitude=-3.189579'); + my $category_extra = $json->{category_extra}; + contains_string($category_extra, "usrn"); + contains_string($category_extra, "central_asset_id"); + lacks_string($category_extra, "USRN", "Lacks 'USRN' label"); + lacks_string($category_extra, "Asset ID", "Lacks 'Asset ID' label"); + lacks_string($category_extra, "resolve your problem quicker, by providing some extra detail", "Lacks description text"); + }; +}; + +subtest "Category extras includes description label for user" => sub { + FixMyStreet::override_config { + ALLOWED_COBRANDS => [ { fixmystreet => '.' } ], + MAPIT_URL => 'http://mapit.uk/', + }, sub { + $contact4->push_extra_fields({ description => 'Size?', code => 'size', required => 'true', automated => '', variable => 'true', order => '3' }); + $contact4->update; + + my $json = $mech->get_ok_json('/report/new/category_extras?category=Pothole&latitude=55.952055&longitude=-3.189579'); + my $category_extra = $json->{category_extra}; + contains_string($category_extra, "usrn"); + contains_string($category_extra, "central_asset_id"); + lacks_string($category_extra, "USRN", "Lacks 'USRN' label"); + lacks_string($category_extra, "Asset ID", "Lacks 'Asset ID' label"); + contains_string($category_extra, "Size?"); + contains_string($category_extra, "resolve your problem quicker, by providing some extra detail", "Contains description text"); + }; +}; + done_testing(); |