diff options
Diffstat (limited to 't/app/controller')
-rw-r--r-- | t/app/controller/about.t | 2 | ||||
-rw-r--r-- | t/app/controller/admin.t | 49 | ||||
-rw-r--r-- | t/app/controller/alert_new.t | 1 | ||||
-rw-r--r-- | t/app/controller/questionnaire.t | 132 | ||||
-rw-r--r-- | t/app/controller/report_import.t | 2 | ||||
-rw-r--r-- | t/app/controller/report_new.t | 161 | ||||
-rw-r--r-- | t/app/controller/report_updates.t | 20 | ||||
-rw-r--r-- | t/app/controller/reports.t | 4 |
8 files changed, 278 insertions, 93 deletions
diff --git a/t/app/controller/about.t b/t/app/controller/about.t index ea7b1af20..4e49cdac9 100644 --- a/t/app/controller/about.t +++ b/t/app/controller/about.t @@ -13,7 +13,7 @@ $mech->content_contains('html class="no-js" lang="en-gb"'); SKIP: { skip( "Need 'emptyhomes' in ALLOWED_COBRANDS config", 8 ) - unless FixMyStreet::App->config->{ALLOWED_COBRANDS} =~ m{emptyhomes}; + unless FixMyStreet::Cobrand->exists('emptyhomes'); # check that geting the page as EHA produces a different page ok $mech->host("reportemptyhomes.co.uk"), 'change host to reportemptyhomes'; diff --git a/t/app/controller/admin.t b/t/app/controller/admin.t index d8a1c24a1..09d99cfdf 100644 --- a/t/app/controller/admin.t +++ b/t/app/controller/admin.t @@ -105,34 +105,39 @@ subtest 'check summary counts' => sub { $mech->content_contains( "$q_count questionnaires sent" ); - ok $mech->host('barnet.fixmystreet.com'); + SKIP: { + skip( "Need 'barnet' in ALLOWED_COBRANDS config", 7 ) + unless FixMyStreet::Cobrand->exists('barnet'); - $mech->get_ok('/admin'); - $mech->title_like(qr/Summary/); + ok $mech->host('barnet.fixmystreet.com'); - my ($num_live) = $mech->content =~ /(\d+)<\/strong> live problems/; - my ($num_alerts) = $mech->content =~ /(\d+) confirmed alerts/; - my ($num_qs) = $mech->content =~ /(\d+) questionnaires sent/; + $mech->get_ok('/admin'); + $mech->title_like(qr/Summary/); - $report->council(2489); - $report->cobrand('barnet'); - $report->update; + my ($num_live) = $mech->content =~ /(\d+)<\/strong> live problems/; + my ($num_alerts) = $mech->content =~ /(\d+) confirmed alerts/; + my ($num_qs) = $mech->content =~ /(\d+) questionnaires sent/; - $alert->cobrand('barnet'); - $alert->update; + $report->council(2489); + $report->cobrand('barnet'); + $report->update; - $mech->get_ok('/admin'); + $alert->cobrand('barnet'); + $alert->update; - $mech->content_contains( ($num_live+1) . "</strong> live problems" ); - $mech->content_contains( ($num_alerts+1) . " confirmed alerts" ); - $mech->content_contains( ($num_qs+1) . " questionnaires sent" ); + $mech->get_ok('/admin'); - $report->council(2504); - $report->cobrand(''); - $report->update; + $mech->content_contains( ($num_live+1) . "</strong> live problems" ); + $mech->content_contains( ($num_alerts+1) . " confirmed alerts" ); + $mech->content_contains( ($num_qs+1) . " questionnaires sent" ); + + $report->council(2504); + $report->cobrand(''); + $report->update; - $alert->cobrand(''); - $alert->update; + $alert->cobrand(''); + $alert->update; + } FixMyStreet::App->model('DB::Problem')->search( { council => 1 } )->update( { council => 2489 } ); ok $mech->host('fixmystreet.com'); @@ -222,6 +227,8 @@ subtest 'check open311 configuring' => sub { api_key => 'api key', endpoint => 'http://example.com/open311', jurisdiction => 'mySociety', + send_comments => 0, + send_method => 'Open311', } } ); @@ -244,6 +251,8 @@ subtest 'check open311 configuring' => sub { api_key => 'new api key', endpoint => 'http://example.org/open311', jurisdiction => 'open311', + send_comments => 0, + send_method => 'Open311', } } ); diff --git a/t/app/controller/alert_new.t b/t/app/controller/alert_new.t index 420ec44e6..7ba887824 100644 --- a/t/app/controller/alert_new.t +++ b/t/app/controller/alert_new.t @@ -440,6 +440,7 @@ subtest "Test normal alert signups and that alerts are sent" => sub { ok $update, "created test update - $update_id"; FixMyStreet::App->model('DB::AlertType')->email_alerts(); + # TODO Note the below will fail if the db has an existing alert that matches $mech->email_count_is(3); my @emails = $mech->get_email; my $count; diff --git a/t/app/controller/questionnaire.t b/t/app/controller/questionnaire.t index 0e2a71184..2d4fdb711 100644 --- a/t/app/controller/questionnaire.t +++ b/t/app/controller/questionnaire.t @@ -322,67 +322,79 @@ for my $test ( }; } -# EHA extra checking -ok $mech->host("reportemptyhomes.com"), 'change host to reportemptyhomes'; - -# Reset, and all the questionaire sending function - FIXME should it detect site itself somehow? -$report->send_questionnaire( 1 ); -$report->update; -$questionnaire->delete; -FixMyStreet::App->model('DB::Questionnaire')->send_questionnaires( { - site => 'emptyhomes' -} ); -$email = $mech->get_email; -ok $email, "got an email"; -$mech->clear_emails_ok; - -like $email->body, qr/fill in this short questionnaire/i, "got questionnaire email"; -($token) = $email->body =~ m{http://.*?/Q/(\S+)}; -ok $token, "extracted questionnaire token '$token'"; - -$mech->get_ok("/Q/" . $token); -$mech->content_contains( 'should have reported what they have done' ); - -# Test already answered the ever reported question, so not shown again -$dt = $dt->add( weeks => 4 ); -my $questionnaire2 = FixMyStreet::App->model('DB::Questionnaire')->find_or_create( - { - problem_id => $report->id, - whensent => $dt->ymd . ' ' . $dt->hms, - ever_reported => 1, - } -); -ok $questionnaire2, 'added another questionnaire'; -ok $mech->host("fixmystreet.com"), 'change host to fixmystreet'; -$mech->get_ok("/Q/" . $token); -$mech->title_like( qr/Questionnaire/ ); -$mech->content_contains( 'Has this problem been fixed?' ); -$mech->content_lacks( 'ever reported' ); - -# EHA extra checking -ok $mech->host("reportemptyhomes.com"), 'change host to reportemptyhomes'; -$mech->get_ok("/Q/" . $token); -$mech->content_contains( 'made a lot of progress' ); - -$token = FixMyStreet::App->model("DB::Token")->find( { scope => 'questionnaire', token => $token } ); -ok $token, 'found token for questionnaire'; -$questionnaire = FixMyStreet::App->model('DB::Questionnaire')->find( { id => $token->data } ); -ok $questionnaire, 'found questionnaire'; - -# I18N Unicode extra testing using FiksGataMi -$report->send_questionnaire( 1 ); -$report->cobrand( 'fiksgatami' ); -$report->update; -$questionnaire->delete; -$questionnaire2->delete; -FixMyStreet::App->model('DB::Questionnaire')->send_questionnaires( { site => 'fixmystreet' } ); # It's either fixmystreet or emptyhomes -$email = $mech->get_email; -ok $email, "got an email"; -$mech->clear_emails_ok; +SKIP: { + skip( "Need 'emptyhomes' in ALLOWED_COBRANDS config", 18 ) + unless FixMyStreet::Cobrand->exists('emptyhomes'); + + # EHA extra checking + ok $mech->host("reportemptyhomes.com"), 'change host to reportemptyhomes'; + + # Reset, and all the questionaire sending function - FIXME should it detect site itself somehow? + $report->send_questionnaire( 1 ); + $report->update; + $questionnaire->delete; + + FixMyStreet::App->model('DB::Questionnaire')->send_questionnaires( { + site => 'emptyhomes' + } ); + $email = $mech->get_email; + ok $email, "got an email"; + $mech->clear_emails_ok; + + like $email->body, qr/fill in this short questionnaire/i, "got questionnaire email"; + ($token) = $email->body =~ m{http://.*?/Q/(\S+)}; + ok $token, "extracted questionnaire token '$token'"; + + $mech->get_ok("/Q/" . $token); + $mech->content_contains( 'should have reported what they have done' ); + + # Test already answered the ever reported question, so not shown again + $dt = $dt->add( weeks => 4 ); + my $questionnaire2 = FixMyStreet::App->model('DB::Questionnaire')->find_or_create( + { + problem_id => $report->id, + whensent => $dt->ymd . ' ' . $dt->hms, + ever_reported => 1, + } + ); + ok $questionnaire2, 'added another questionnaire'; + ok $mech->host("fixmystreet.com"), 'change host to fixmystreet'; + $mech->get_ok("/Q/" . $token); + $mech->title_like( qr/Questionnaire/ ); + $mech->content_contains( 'Has this problem been fixed?' ); + $mech->content_lacks( 'ever reported' ); + + # EHA extra checking + ok $mech->host("reportemptyhomes.com"), 'change host to reportemptyhomes'; + $mech->get_ok("/Q/" . $token); + $mech->content_contains( 'made a lot of progress' ); + + $token = FixMyStreet::App->model("DB::Token")->find( { scope => 'questionnaire', token => $token } ); + ok $token, 'found token for questionnaire'; + $questionnaire = FixMyStreet::App->model('DB::Questionnaire')->find( { id => $token->data } ); + ok $questionnaire, 'found questionnaire'; + + $questionnaire2->delete; +} -like $email->body, qr/Testing =96 Detail/, 'email contains encoded character from user'; -like $email->body, qr/sak p=E5 FiksGataMi/, 'email contains encoded character from template'; -is $email->header('Content-Type'), 'text/plain; charset="windows-1252"', 'email is in right encoding'; +SKIP: { + skip( "Need 'fiksgatami' in ALLOWED_COBRANDS config", 5 ) + unless FixMyStreet::Cobrand->exists('fiksgatami'); + + # I18N Unicode extra testing using FiksGataMi + $report->send_questionnaire( 1 ); + $report->cobrand( 'fiksgatami' ); + $report->update; + $questionnaire->delete; + FixMyStreet::App->model('DB::Questionnaire')->send_questionnaires( { site => 'fixmystreet' } ); # It's either fixmystreet or emptyhomes + $email = $mech->get_email; + ok $email, "got an email"; + $mech->clear_emails_ok; + + like $email->body, qr/Testing =96 Detail/, 'email contains encoded character from user'; + like $email->body, qr/sak p=E5 FiksGataMi/, 'email contains encoded character from template'; + is $email->header('Content-Type'), 'text/plain; charset="windows-1252"', 'email is in right encoding'; +} $mech->delete_user('test@example.com'); done_testing(); diff --git a/t/app/controller/report_import.t b/t/app/controller/report_import.t index 934bf0346..eb686b44e 100644 --- a/t/app/controller/report_import.t +++ b/t/app/controller/report_import.t @@ -266,7 +266,7 @@ subtest "Submit a correct entry (with location) to cobrand" => sub { SKIP: { skip( "Need 'fiksgatami' in ALLOWED_COBRANDS config", 20 ) - unless FixMyStreet::App->config->{ALLOWED_COBRANDS} =~ m{fiksgatami}; + unless FixMyStreet::Cobrand->exists('fiksgatami'); mySociety::MaPit::configure('http://mapit.nuug.no/'); ok $mech->host("fiksgatami.no"), 'change host to fiksgatami'; diff --git a/t/app/controller/report_new.t b/t/app/controller/report_new.t index c16befd37..74355c2d4 100644 --- a/t/app/controller/report_new.t +++ b/t/app/controller/report_new.t @@ -52,9 +52,23 @@ my $contact3 = FixMyStreet::App->model('DB::Contact')->find_or_create( { category => 'Trees', email => 'trees@example.com', } ); +my $contact4 = FixMyStreet::App->model('DB::Contact')->find_or_create( { + %contact_params, + area_id => 2482, # Bromley + category => 'Trees', + email => 'trees@example.com', +} ); +my $contact5 = FixMyStreet::App->model('DB::Contact')->find_or_create( { + %contact_params, + area_id => 2651, # Edinburgh + category => 'Trees', + email => 'trees@example.com', +} ); ok $contact1, "created test contact 1"; ok $contact2, "created test contact 2"; ok $contact3, "created test contact 3"; +ok $contact4, "created test contact 4"; +ok $contact5, "created test contact 5"; # test that the various bit of form get filled in and errors correctly # generated. @@ -360,7 +374,7 @@ foreach my $test ( is_deeply $mech->form_errors, [], "no errors for pc '$test->{pc}'"; # click through to the report page - $mech->follow_link_ok( { text => 'skip this step', }, + $mech->follow_link_ok( { text_regex => qr/skip this step/i, }, "follow 'skip this step' link" ); # submit the main form @@ -540,7 +554,7 @@ subtest "test password errors for a user who is signing in as they report" => su "submit location" ); # click through to the report page - $mech->follow_link_ok( { text => 'Skip this step', }, + $mech->follow_link_ok( { text_regex => qr/skip this step/i, }, "follow 'skip this step' link" ); $mech->submit_form_ok( @@ -587,7 +601,7 @@ subtest "test report creation for a user who is signing in as they report" => su "submit location" ); # click through to the report page - $mech->follow_link_ok( { text => 'Skip this step', }, + $mech->follow_link_ok( { text_regex => qr/skip this step/i, }, "follow 'skip this step' link" ); $mech->submit_form_ok( @@ -681,7 +695,7 @@ foreach my $test ( "submit location" ); # click through to the report page - $mech->follow_link_ok( { text => 'Skip this step', }, + $mech->follow_link_ok( { text_regex => qr/skip this step/i, }, "follow 'skip this step' link" ); # check that the fields are correctly prefilled @@ -784,7 +798,7 @@ subtest "check that a lat/lon off coast leads to /around" => sub { is $mech->uri->path, '/around', "redirected to '/around'"; is_deeply # - $mech->page_errors, + $mech->form_errors, [ 'That spot does not appear to be covered by a council. If you have' . ' tried to report an issue past the shoreline, for example, please' . ' specify the closest point on land.' ], # @@ -792,8 +806,145 @@ subtest "check that a lat/lon off coast leads to /around" => sub { }; +for my $test ( + { + desc => 'user title not set if not bromley problem', + host => 'http://www.fixmystreet.com', + postcode => 'EH99 1SP', + fms_extra_title => '', + extra => undef, + user_title => undef, + }, + { + desc => 'title shown for bromley problem on main site', + host => 'http://www.fixmystreet.com', + postcode => 'BR1 3UH', + fms_extra_title => 'MR', + extra => [ + { + name => 'fms_extra_title', + value => 'MR', + description => 'FMS_EXTRA_TITLE', + }, + ], + user_title => 'MR', + }, + { + desc => + 'title, first and last name shown for bromley problem on cobrand', + host => 'http://bromley.fixmystreet.com', + postcode => 'BR1 3UH', + first_name => 'Test', + last_name => 'User', + fms_extra_title => 'MR', + extra => [ + { + name => 'fms_extra_title', + value => 'MR', + description => 'FMS_EXTRA_TITLE', + }, + { + name => 'first_name', + value => 'Test', + description => 'FIRST_NAME', + }, + { + name => 'last_name', + value => 'User', + description => 'LAST_NAME', + }, + ], + user_title => 'MR', + }, + ) +{ + subtest $test->{desc} => sub { + $mech->host( $test->{host} ); + + $mech->log_out_ok; + $mech->clear_emails_ok; + + $mech->get_ok('/'); + $mech->submit_form_ok( { with_fields => { pc => $test->{postcode}, } }, + "submit location" ); + $mech->follow_link_ok( + { text_regex => qr/skip this step/i, }, + "follow 'skip this step' link" + ); + + my $fields = $mech->visible_form_values('mapSkippedForm'); + if ( $test->{fms_extra_title} ) { + ok exists( $fields->{fms_extra_title} ), 'user title field displayed'; + } else { + ok !exists( $fields->{fms_extra_title} ), 'user title field not displayed'; + } + if ( $test->{first_name} ) { + ok exists( $fields->{first_name} ), 'first name field displayed'; + ok exists( $fields->{last_name} ), 'last name field displayed'; + ok !exists( $fields->{name} ), 'no name field displayed'; + } + else { + ok !exists( $fields->{first_name} ), + 'first name field not displayed'; + ok !exists( $fields->{last_name} ), 'last name field not displayed'; + ok exists( $fields->{name} ), 'name field displayed'; + } + + my $submission_fields = { + title => "Test Report", + detail => 'Test report details.', + photo => '', + email => 'firstlast@example.com', + may_show_name => '1', + phone => '07903 123 456', + category => 'Trees', + password_register => '', + }; + + $submission_fields->{fms_extra_title} = $test->{fms_extra_title} + if $test->{fms_extra_title}; + + if ( $test->{first_name} ) { + $submission_fields->{first_name} = $test->{first_name}; + $submission_fields->{last_name} = $test->{last_name}; + } + else { + $submission_fields->{name} = 'Test User'; + } + + $mech->submit_form_ok( { with_fields => $submission_fields }, + "submit good details" ); + + my $email = $mech->get_email; + ok $email, "got an email"; + like $email->body, qr/confirm the problem/i, "confirm the problem"; + + my ($url) = $email->body =~ m{(http://\S+)}; + ok $url, "extracted confirm url '$url'"; + + # confirm token in order to update the user details + $mech->get_ok($url); + + my $user = + FixMyStreet::App->model('DB::User') + ->find( { email => 'firstlast@example.com' } ); + + my $report = $user->problems->first; + ok $report, "Found the report"; + my $extras = $report->extra; + is $user->title, $test->{'user_title'}, 'user title correct'; + is_deeply $extras, $test->{extra}, 'extra contains correct values'; + + $user->problems->delete; + $user->alerts->delete; + $user->delete; + }; +} + $contact1->delete; $contact2->delete; $contact3->delete; +$contact4->delete; +$contact5->delete; done_testing(); diff --git a/t/app/controller/report_updates.t b/t/app/controller/report_updates.t index 9c2b0861b..0337a881b 100644 --- a/t/app/controller/report_updates.t +++ b/t/app/controller/report_updates.t @@ -872,7 +872,11 @@ for my $test ( is_deeply $values, $test->{initial_values}, 'initial form values'; - is $mech->extract_problem_banner->{text}, $test->{initial_banner}, 'initial banner'; + if ( !defined( $test->{initial_banner} ) ) { + is $mech->extract_problem_banner->{text}, undef, 'initial banner'; + } else { + like $mech->extract_problem_banner->{text}, qr/@{[ $test->{initial_banner} ]}/i, 'initial banner'; + } $mech->submit_form_ok( { @@ -883,7 +887,11 @@ for my $test ( is $mech->uri->path, "/report/" . $report_id, "redirected to report page"; - is $mech->extract_problem_banner->{text}, $test->{endstate_banner}, 'submitted banner'; + if ( !defined( $test->{endstate_banner} ) ) { + is $mech->extract_problem_banner->{text}, undef, 'endstate banner'; + } else { + like $mech->extract_problem_banner->{text}, qr/@{[ $test->{endstate_banner} ]}/i, 'endstate banner'; + } $mech->email_count_is(0); @@ -1029,8 +1037,12 @@ foreach my $test ( is_deeply $values, $test->{initial_values}, 'initial form values'; - is $mech->extract_problem_banner->{text}, $test->{initial_banner}, - 'initial banner'; + if ( !defined( $test->{initial_banner} ) ) { + is $mech->extract_problem_banner->{text}, undef, 'initial banner'; + } else { + like $mech->extract_problem_banner->{text}, qr/@{[ $test->{initial_banner} ]}/i, + 'initial banner'; + } $mech->submit_form_ok( { with_fields => $test->{fields}, }, 'submit update' ); diff --git a/t/app/controller/reports.t b/t/app/controller/reports.t index 58803d778..801dbeddb 100644 --- a/t/app/controller/reports.t +++ b/t/app/controller/reports.t @@ -17,14 +17,14 @@ $mech->follow_link_ok( { text_regex => qr/Birmingham/ } ); SKIP: { skip( "Need 'emptyhomes' in ALLOWED_COBRANDS config", 8 ) - unless FixMyStreet::App->config->{ALLOWED_COBRANDS} =~ m{emptyhomes}; + unless FixMyStreet::Cobrand->exists('emptyhomes'); ok $mech->host("reportemptyhomes.com"), 'change host to reportemptyhomes'; $mech->get_ok('/reports'); # EHA lacks one column the others have $mech->content_lacks('state unknown'); skip( "Need 'fiksgatami' in ALLOWED_COBRANDS config", 8 ) - unless FixMyStreet::App->config->{ALLOWED_COBRANDS} =~ m{fiksgatami}; + unless FixMyStreet::Cobrand->exists('fiksgatami'); mySociety::MaPit::configure('http://mapit.nuug.no/'); ok $mech->host("fiksgatami.no"), 'change host to fiksgatami'; $mech->get_ok('/reports'); |