aboutsummaryrefslogtreecommitdiffstats
path: root/perllib/FixMyStreet/TestMech.pm
diff options
context:
space:
mode:
authorEdmund von der Burg <evdb@mysociety.org>2011-03-25 11:09:46 +0000
committerEdmund von der Burg <evdb@mysociety.org>2011-03-25 11:09:46 +0000
commit1d2af6f91b3351f4cef327a3598a0554664f49f2 (patch)
treea0e1e47afa081ba027bcbbb633e275ce4aab1838 /perllib/FixMyStreet/TestMech.pm
parentd3cab6c0c601654f04b81823dbdc3753a549d54a (diff)
Created FMS specific Test::WWW:Mech wrapper
Diffstat (limited to 'perllib/FixMyStreet/TestMech.pm')
-rw-r--r--perllib/FixMyStreet/TestMech.pm87
1 files changed, 87 insertions, 0 deletions
diff --git a/perllib/FixMyStreet/TestMech.pm b/perllib/FixMyStreet/TestMech.pm
new file mode 100644
index 000000000..03ece6c47
--- /dev/null
+++ b/perllib/FixMyStreet/TestMech.pm
@@ -0,0 +1,87 @@
+package FixMyStreet::TestMech;
+use base qw(Test::WWW::Mechanize::Catalyst);
+
+use strict;
+use warnings;
+
+use Test::WWW::Mechanize::Catalyst 'FixMyStreet::App';
+
+use Test::More;
+use Web::Scraper;
+
+=head1 NAME
+
+FixMyStreet::TestMech - T::WWW::M:C but with FMS specific smarts
+
+=head1 DESCRIPTION
+
+This module subclasses L<Test::WWW::Mechanize::Catalyst> and adds some
+FixMyStreet specific smarts - such as the ability to scrape the resulting page
+for form error messages.
+
+=head1 METHODS
+
+=head2 form_errors
+
+ my $arrayref = $mech->form_errors;
+
+Find all the form errors on the current page and return them in page order as an
+arrayref of TEXTs. If none found return empty arrayref.
+
+=cut
+
+sub form_errors {
+ my $mech = shift;
+ my $result = scraper {
+ process 'div.form-error', 'errors[]', 'TEXT';
+ }
+ ->scrape( $mech->response );
+ return $result->{errors} || [];
+}
+
+=head2 pc_alternatives
+
+ my $arrayref = $mech->pc_alternatives;
+
+Find all the suggestions for near matches for a location. Return text presented to user as arrayref, empty arrayref if none found.
+
+=cut
+
+sub pc_alternatives {
+ my $mech = shift;
+ my $result = scraper {
+ process 'ul.pc_alternatives li', 'pc_alternatives[]', 'TEXT';
+ }
+ ->scrape( $mech->response );
+ return $result->{pc_alternatives} || [];
+}
+
+=head2 extract_location
+
+ $hashref = $mech->extract_location( );
+
+Extracts the location from the current page. Looks for inputs with the names
+C<pc>, C<latitude> and C<longitude> and returns their values in a hashref with
+those keys. If no values found then the values in hashrof are C<undef>.
+
+=cut
+
+sub extract_location {
+ my $mech = shift;
+
+ my $result = scraper {
+ process 'input[name="pc"]', pc => '@value';
+ process 'input[name="latitude"]', latitude => '@value';
+ process 'input[name="longitude"]', longitude => '@value';
+ }
+ ->scrape( $mech->response );
+
+ return {
+ pc => undef,
+ latitude => undef,
+ longitude => undef,
+ %$result
+ };
+}
+
+1;