diff options
Diffstat (limited to 't')
-rw-r--r-- | t/Mock/Nominatim.pm | 5 | ||||
-rw-r--r-- | t/app/controller/alert_new.t | 2 | ||||
-rw-r--r-- | t/app/controller/around.t | 120 | ||||
-rw-r--r-- | t/open311/populate-service-list.t | 64 |
4 files changed, 106 insertions, 85 deletions
diff --git a/t/Mock/Nominatim.pm b/t/Mock/Nominatim.pm index 806ebbfd3..d108256f5 100644 --- a/t/Mock/Nominatim.pm +++ b/t/Mock/Nominatim.pm @@ -1,6 +1,7 @@ package t::Mock::Nominatim; use JSON::MaybeXS; +use LWP::Protocol::PSGI; use Web::Simple; has json => ( @@ -35,6 +36,10 @@ sub query { {"osm_type"=>"way","osm_id"=>"4684282","lat"=>"55.9504009","lon"=>"-3.1858425","display_name"=>"High Street, Old Town, City of Ed\x{ed}nburgh, Scotland, EH1 1SP, United Kingdom","class"=>"highway","type"=>"tertiary","importance"=>0.55892577838734}, {"osm_type"=>"node","osm_id"=>"27424410","lat"=>"55.8596449","lon"=>"-4.240377","display_name"=>"High Street, Collegelands, Merchant City, Glasgow, Glasgow City, Scotland, G, United Kingdom","class"=>"railway","type"=>"station","importance"=>0.53074299592768} ]; + } elsif ($q eq 'edinburgh') { + return [ + {"osm_type"=>"node","osm_id"=>"17898859","lat"=>"55.9533456","lon"=>"-3.1883749","display_name"=>"Edinburgh","class"=>"place","type"=>"place:city","importance"=>0.676704} + ]; } return []; } diff --git a/t/app/controller/alert_new.t b/t/app/controller/alert_new.t index 7eba90530..d968b56b1 100644 --- a/t/app/controller/alert_new.t +++ b/t/app/controller/alert_new.t @@ -523,6 +523,8 @@ subtest "Test alerts are not sent for no-text updates" => sub { }; $mech->email_count_is(1); + $user2->discard_changes; + isnt $user2->last_active, undef, 'Last active has been set'; $mech->delete_user($user1); $mech->delete_user($user2); diff --git a/t/app/controller/around.t b/t/app/controller/around.t index 6e49c6f29..784801517 100644 --- a/t/app/controller/around.t +++ b/t/app/controller/around.t @@ -9,6 +9,7 @@ use constant MIN_ZOOM_LEVEL => 88; package main; use Test::MockModule; +use t::Mock::Nominatim; use FixMyStreet::TestMech; my $mech = FixMyStreet::TestMech->new; @@ -53,6 +54,11 @@ foreach my $test ( }; } +FixMyStreet::override_config { + ALLOWED_COBRANDS => 'fixmystreet', + MAPIT_URL => 'http://mapit.uk/', +}, sub { + # check that exact queries result in the correct lat,lng foreach my $test ( { @@ -69,19 +75,45 @@ foreach my $test ( { subtest "check lat/lng for '$test->{pc}'" => sub { $mech->get_ok('/'); - FixMyStreet::override_config { - ALLOWED_COBRANDS => [ { 'fixmystreet' => '.' } ], - MAPIT_URL => 'http://mapit.uk/', - }, sub { - $mech->submit_form_ok( { with_fields => { pc => $test->{pc} } }, - "good location" ); - }; + $mech->submit_form_ok( { with_fields => { pc => $test->{pc} } }, + "good location" ); is_deeply $mech->page_errors, [], "no errors for pc '$test->{pc}'"; is_deeply $mech->extract_location, $test, "got expected location for pc '$test->{pc}'"; + $mech->get_ok('/'); + my $pc = "$test->{latitude},$test->{longitude}"; + $mech->submit_form_ok( { with_fields => { pc => $pc } }, + "good location" ); + is_deeply $mech->page_errors, [], "no errors for pc '$pc'"; + is_deeply $mech->extract_location, { %$test, pc => $pc }, + "got expected location for pc '$pc'"; }; } +subtest "check lat/lng for full plus code" => sub { + $mech->get_ok('/'); + $mech->submit_form_ok( { with_fields => { pc => "9C7RXR26+R5" } } ); + is_deeply $mech->page_errors, [], "no errors for plus code"; + is_deeply $mech->extract_location, { + pc => "9C7RXR26+R5", + latitude => 55.952063, + longitude => -3.189562, + }, + "got expected location for full plus code"; +}; + +subtest "check lat/lng for short plus code" => sub { + $mech->get_ok('/'); + $mech->submit_form_ok( { with_fields => { pc => "XR26+R5 Edinburgh" } } ); + is_deeply $mech->page_errors, [], "no errors for plus code"; + is_deeply $mech->extract_location, { + pc => "XR26+R5 Edinburgh", + latitude => 55.952063, + longitude => -3.189562, + }, + "got expected location for short plus code"; +}; + my $body_edin_id = $mech->create_body_ok(2651, 'City of Edinburgh Council')->id; my $body_west_id = $mech->create_body_ok(2504, 'Westminster City Council')->id; @@ -93,10 +125,10 @@ my @edinburgh_problems = $mech->create_problems_for_body( 5, $body_edin_id, 'Aro subtest 'check lookup by reference' => sub { $mech->get_ok('/'); - $mech->submit_form_ok( { with_fields => { pc => 'ref:12345' } }, 'bad ref'); + $mech->submit_form_ok( { with_fields => { pc => '12345' } }, 'bad ref'); $mech->content_contains('Searching found no reports'); my $id = $edinburgh_problems[0]->id; - $mech->submit_form_ok( { with_fields => { pc => "ref:$id" } }, 'good ref'); + $mech->submit_form_ok( { with_fields => { pc => $id } }, 'good ref'); is $mech->uri->path, "/report/$id", "redirected to report page"; }; @@ -106,19 +138,14 @@ subtest 'check lookup by reference does not show non_public reports' => sub { }); my $id = $edinburgh_problems[0]->id; $mech->get_ok('/'); - $mech->submit_form_ok( { with_fields => { pc => "ref:$id" } }, 'non_public ref'); + $mech->submit_form_ok( { with_fields => { pc => $id } }, 'non_public ref'); $mech->content_contains('Searching found no reports'); }; subtest 'check non public reports are not displayed on around page' => sub { $mech->get_ok('/'); - FixMyStreet::override_config { - ALLOWED_COBRANDS => [ { 'fixmystreet' => '.' } ], - MAPIT_URL => 'http://mapit.uk/', - }, sub { - $mech->submit_form_ok( { with_fields => { pc => 'EH1 1BB' } }, - "good location" ); - }; + $mech->submit_form_ok( { with_fields => { pc => 'EH1 1BB' } }, + "good location" ); $mech->content_contains( "Around page Test 3 for $body_edin_id", 'problem to be marked non public visible' ); @@ -126,26 +153,16 @@ subtest 'check non public reports are not displayed on around page' => sub { ok $private->update( { non_public => 1 } ), 'problem marked non public'; $mech->get_ok('/'); - FixMyStreet::override_config { - ALLOWED_COBRANDS => [ { 'fixmystreet' => '.' } ], - MAPIT_URL => 'http://mapit.uk/', - }, sub { - $mech->submit_form_ok( { with_fields => { pc => 'EH1 1BB' } }, - "good location" ); - }; + $mech->submit_form_ok( { with_fields => { pc => 'EH1 1BB' } }, + "good location" ); $mech->content_lacks( "Around page Test 3 for $body_edin_id", 'problem marked non public is not visible' ); }; subtest 'check missing body message not shown when it does not need to be' => sub { $mech->get_ok('/'); - FixMyStreet::override_config { - ALLOWED_COBRANDS => 'fixmystreet', - MAPIT_URL => 'http://mapit.uk/', - }, sub { - $mech->submit_form_ok( { with_fields => { pc => 'EH1 1BB' } }, - "good location" ); - }; + $mech->submit_form_ok( { with_fields => { pc => 'EH1 1BB' } }, + "good location" ); $mech->content_lacks('yet have details for the other councils that cover this location'); }; @@ -162,24 +179,14 @@ for my $permission ( qw/ report_inspect report_mark_private/ ) { }); $mech->get_ok('/'); - FixMyStreet::override_config { - ALLOWED_COBRANDS => [ { 'fixmystreet' => '.' } ], - MAPIT_URL => 'http://mapit.uk/', - }, sub { - $mech->submit_form_ok( { with_fields => { pc => 'EH1 1BB' } }, - "good location" ); - }; + $mech->submit_form_ok( { with_fields => { pc => 'EH1 1BB' } }, + "good location" ); $mech->content_contains( "Around page Test 3 for $body_edin_id", 'problem marked non public is visible' ); $mech->content_contains( "Around page Test 2 for $body_edin_id", 'problem marked public is visible' ); - FixMyStreet::override_config { - ALLOWED_COBRANDS => [ { 'fixmystreet' => '.' } ], - MAPIT_URL => 'http://mapit.uk/', - }, sub { - $mech->get_ok('/around?pc=EH1+1BB&status=non_public'); - }; + $mech->get_ok('/around?pc=EH1+1BB&status=non_public'); $mech->content_contains( "Around page Test 3 for $body_edin_id", 'problem marked non public is visible' ); $mech->content_lacks( "Around page Test 2 for $body_edin_id", @@ -193,24 +200,14 @@ for my $permission ( qw/ report_inspect report_mark_private/ ) { }); $mech->get_ok('/'); - FixMyStreet::override_config { - ALLOWED_COBRANDS => [ { 'fixmystreet' => '.' } ], - MAPIT_URL => 'http://mapit.uk/', - }, sub { - $mech->submit_form_ok( { with_fields => { pc => 'EH1 1BB' } }, - "good location" ); - }; + $mech->submit_form_ok( { with_fields => { pc => 'EH1 1BB' } }, + "good location" ); $mech->content_lacks( "Around page Test 3 for $body_edin_id", 'problem marked non public is not visible' ); $mech->content_contains( "Around page Test 2 for $body_edin_id", 'problem marked public is visible' ); - FixMyStreet::override_config { - ALLOWED_COBRANDS => [ { 'fixmystreet' => '.' } ], - MAPIT_URL => 'http://mapit.uk/', - }, sub { - $mech->get_ok('/around?pc=EH1+1BB&status=non_public'); - }; + $mech->get_ok('/around?pc=EH1+1BB&status=non_public'); $mech->content_lacks( "Around page Test 3 for $body_edin_id", 'problem marked non public is not visible' ); $mech->content_lacks( "Around page Test 2 for $body_edin_id", @@ -230,17 +227,14 @@ subtest 'check assigned-only list items do not display shortlist buttons' => sub $user->update({ from_body => $body }); $user->user_body_permissions->find_or_create({ body => $body, permission_type => 'planned_reports' }); - FixMyStreet::override_config { - ALLOWED_COBRANDS => 'fixmystreet', - MAPIT_URL => 'http://mapit.uk/', - }, sub { - $mech->get_ok('/around?pc=EH1+1BB'); - }; + $mech->get_ok('/around?pc=EH1+1BB'); $mech->content_contains('shortlist-add-' . $edinburgh_problems[4]->id); $mech->content_lacks('shortlist-add-' . $edinburgh_problems[3]->id); $mech->content_lacks('shortlist-add-' . $edinburgh_problems[1]->id); }; +}; # End big override_config + my $body = $mech->create_body_ok(2237, "Oxfordshire"); subtest 'check category, status and extra filtering works on /around' => sub { diff --git a/t/open311/populate-service-list.t b/t/open311/populate-service-list.t index bd837f203..20f092da4 100644 --- a/t/open311/populate-service-list.t +++ b/t/open311/populate-service-list.t @@ -175,33 +175,53 @@ subtest "set multiple groups with groups element" => sub { is_deeply $contact->get_extra->{group}, ['sanitation & cleaning','street'], "groups set correctly"; }; -subtest 'check non open311 contacts marked as deleted' => sub { - FixMyStreet::DB->resultset('Contact')->search( { body_id => $body->id } )->delete(); +$body->update({ can_be_devolved => 1 }); +for my $test ( + { + test => 'check non open311 contacts marked as deleted', + contact_params => { + email => 'contact@example.com', + }, + deleted => 1, + }, + { + test => 'check devolved non open311 contacts not marked as deleted', + contact_params => { + email => 'contact', + send_method => 'Open311', + }, + deleted => 0, + }, +) { + subtest $test->{test} => sub { + FixMyStreet::DB->resultset('Contact')->search( { body_id => $body->id } )->delete(); - my $contact = FixMyStreet::DB->resultset('Contact')->create( - { - body_id => $body->id, - email => 'contact@example.com', - category => 'An old category', - state => 'confirmed', - editor => $0, - whenedited => \'current_timestamp', - note => 'test contact', - } - ); + my $contact = FixMyStreet::DB->resultset('Contact')->create( + { + body_id => $body->id, + category => 'An old category', + state => 'confirmed', + editor => $0, + whenedited => \'current_timestamp', + note => 'test contact', + %{$test->{contact_params}}, + } + ); - my $service_list = get_xml_simple_object( get_standard_xml() ); + my $service_list = get_xml_simple_object( get_standard_xml() ); - my $processor = Open311::PopulateServiceList->new(); - $processor->_current_body( $body ); - $processor->process_services( $service_list ); + my $processor = Open311::PopulateServiceList->new(); + $processor->_current_body( $body ); + $processor->process_services( $service_list ); - my $contact_count = FixMyStreet::DB->resultset('Contact')->search( { body_id => $body->id } )->count(); - is $contact_count, 4, 'correct number of contacts'; + my $contact_count = FixMyStreet::DB->resultset('Contact')->search( { body_id => $body->id } )->count(); + is $contact_count, 4, 'correct number of contacts'; - $contact_count = FixMyStreet::DB->resultset('Contact')->search( { body_id => $body->id, state => 'deleted' } )->count(); - is $contact_count, 1, 'correct number of deleted contacts'; -}; + $contact_count = FixMyStreet::DB->resultset('Contact')->search( { body_id => $body->id, state => 'deleted' } )->count(); + is $contact_count, $test->{deleted}, 'correct number of deleted contacts'; + }; +} +$body->update({ can_be_devolved => 0 }); subtest 'check email changed if matching category' => sub { FixMyStreet::DB->resultset('Contact')->search( { body_id => $body->id } )->delete(); |