diff options
Diffstat (limited to 'perllib/FixMyStreet/TestMech.pm')
-rw-r--r-- | perllib/FixMyStreet/TestMech.pm | 62 |
1 files changed, 50 insertions, 12 deletions
diff --git a/perllib/FixMyStreet/TestMech.pm b/perllib/FixMyStreet/TestMech.pm index 35f934299..4c4a3b3eb 100644 --- a/perllib/FixMyStreet/TestMech.pm +++ b/perllib/FixMyStreet/TestMech.pm @@ -15,6 +15,7 @@ use Web::Scraper; use Carp; use Email::Send::Test; use Digest::SHA1 'sha1_hex'; +use JSON; =head1 NAME @@ -53,6 +54,26 @@ sub logged_in_ok { "logged in" ); } +=head2 create_user_ok + + $user = $mech->create_user_ok( $email ); + +Create a test user (or find it and return if it already exists). + +=cut + +sub create_user_ok { + my $self = shift; + my ($email) = @_; + + my $user = + FixMyStreet::App->model('DB::User') + ->find_or_create( { email => $email } ); + ok $user, "found/created user for $email"; + + return $user; +} + =head2 log_in_ok $user = $mech->log_in_ok( $email_address ); @@ -65,10 +86,7 @@ sub log_in_ok { my $mech = shift; my $email = shift; - my $user = - FixMyStreet::App->model('DB::User') - ->find_or_create( { email => $email } ); - ok $user, "found/created user for $email"; + my $user = $mech->create_user_ok($email); # store the old password and then change it my $old_password_sha1 = $user->password; @@ -129,14 +147,11 @@ sub delete_user { $mech->log_out_ok; for my $p ( $user->problems ) { - ok( $_->delete, "delete comment " . $_->text ) - for $p->comments; + ok( $_->delete, "delete comment " . $_->text ) for $p->comments; ok( $p->delete, "delete problem " . $p->title ); } - ok( $_->delete, "delete comment " . $_->text ) - for $user->comments; - ok( $_->delete, "delete alert " . $_->alert_type ) - for $user->alerts; + ok( $_->delete, "delete comment " . $_->text ) for $user->comments; + ok( $_->delete, "delete alert " . $_->alert_type ) for $user->alerts; ok $user->delete, "delete test user " . $user->email; return 1; @@ -223,7 +238,7 @@ arrayref of TEXTs. If none found return empty arrayref. sub page_errors { my $mech = shift; my $result = scraper { - process 'p.error', 'errors[]', 'TEXT'; + process 'p.error', 'errors[]', 'TEXT'; process 'ul.error', 'errors[]', 'TEXT'; } ->scrape( $mech->response ); @@ -332,7 +347,6 @@ sub extract_problem_title { return $result->{title}; } - =head2 extract_problem_banner $banner = $mech->extract_problem_banner; @@ -434,4 +448,28 @@ sub session_cookie_expiry { return $expires || 0; } +=head2 get_ok_json + + $decoded = $mech->get_ok_json( $url ); + +Get the url, check that it was JSON and then decode and return the body. + +=cut + +sub get_ok_json { + my $mech = shift; + my $url = shift; + + # try to get the response + $mech->get_ok($url) + || return undef; + my $res = $mech->response; + + # check that the content-type of response is correct + croak "Response was not JSON" + unless $res->header('Content-Type') =~ m{^application/json\b}; + + return decode_json( $res->content ); +} + 1; |