aboutsummaryrefslogtreecommitdiffstats
path: root/t
diff options
context:
space:
mode:
Diffstat (limited to 't')
-rw-r--r--t/Mock/Nominatim.pm5
-rw-r--r--t/app/controller/alert_new.t2
-rw-r--r--t/app/controller/around.t120
-rw-r--r--t/open311/populate-service-list.t64
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();