X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?p=catagits%2FCatalyst-Manual.git;a=blobdiff_plain;f=lib%2FCatalyst%2FManual%2FTutorial%2F08_Testing.pod;fp=lib%2FCatalyst%2FManual%2FTutorial%2F08_Testing.pod;h=bf759d8fe433c3a029835dc7d0ba1eb60a5098dd;hp=4ade0e539aeffad5fba0a0ea5e1cfbf6ed0289bf;hb=7ce05098c9b1df9078e709e5a724e821a3b3b00d;hpb=512ec6d005f882e9f4502be3bfc9db2be2e7e1fd diff --git a/lib/Catalyst/Manual/Tutorial/08_Testing.pod b/lib/Catalyst/Manual/Tutorial/08_Testing.pod index 4ade0e5..bf759d8 100644 --- a/lib/Catalyst/Manual/Tutorial/08_Testing.pod +++ b/lib/Catalyst/Manual/Tutorial/08_Testing.pod @@ -179,21 +179,21 @@ To create a sample test case, open the C file in your editor and enter the following: #!/usr/bin/env perl - + use strict; use warnings; use Test::More; - + # Need to specify the name of your app as arg on next line # Can also do: # use Test::WWW::Mechanize::Catalyst "MyApp"; - + BEGIN { use_ok("Test::WWW::Mechanize::Catalyst" => "MyApp") } - + # Create two 'user agents' to simulate two different users ('test01' & 'test02') my $ua1 = Test::WWW::Mechanize::Catalyst->new; my $ua2 = Test::WWW::Mechanize::Catalyst->new; - + # Use a simplified for loop to do tests that are common to both users # Use get_ok() to make sure we can hit the base URL # Second arg = optional description of test (will be displayed for failed tests) @@ -204,7 +204,7 @@ editor and enter the following: # Use content_contains() to match on text in the html body $_->content_contains("You need to log in to use this application", "Check we are NOT logged in") for $ua1, $ua2; - + # Log in as each user # Specify username and password on the URL $ua1->get_ok("http://localhost/login?username=test01&password=mypass", "Login 'test01'"); @@ -214,19 +214,19 @@ editor and enter the following: username => 'test02', password => 'mypass', }); - + # Go back to the login page and it should show that we are already logged in $_->get_ok("http://localhost/login", "Return to '/login'") for $ua1, $ua2; $_->title_is("Login", "Check for login page") for $ua1, $ua2; $_->content_contains("Please Note: You are already logged in as ", "Check we ARE logged in" ) for $ua1, $ua2; - + # 'Click' the 'Logout' link (see also 'text_regex' and 'url_regex' options) $_->follow_link_ok({n => 4}, "Logout via first link on page") for $ua1, $ua2; $_->title_is("Login", "Check for login title") for $ua1, $ua2; $_->content_contains("You need to log in to use this application", "Check we are NOT logged in") for $ua1, $ua2; - + # Log back in $ua1->get_ok("http://localhost/login?username=test01&password=mypass", "Login 'test01'"); @@ -234,11 +234,11 @@ editor and enter the following: "Login 'test02'"); # Should be at the Book List page... do some checks to confirm $_->title_is("Book List", "Check for book list title") for $ua1, $ua2; - + $ua1->get_ok("http://localhost/books/list", "'test01' book list"); $ua1->get_ok("http://localhost/login", "Login Page"); $ua1->get_ok("http://localhost/books/list", "'test01' book list"); - + $_->content_contains("Book List", "Check for book list title") for $ua1, $ua2; # Make sure the appropriate logout buttons are displayed $_->content_contains("/logout\">User Logout", @@ -247,9 +247,9 @@ editor and enter the following: "'test01' should have a create link"); $ua2->content_lacks("/books/form_create\">Admin Create", "'test02' should NOT have a create link"); - + $ua1->get_ok("http://localhost/books/list", "View book list as 'test01'"); - + # User 'test01' should be able to create a book with the "formless create" URL $ua1->get_ok("http://localhost/books/url_create/TestTitle/2/4", "'test01' formless create"); @@ -260,13 +260,13 @@ editor and enter the following: # Try a regular expression to combine the previous 3 checks & account for whitespace $ua1->content_like(qr/Added book 'TestTitle'\s+by 'Stevens'\s+with a rating of 2./, "Regex check"); - + # Make sure the new book shows in the list $ua1->get_ok("http://localhost/books/list", "'test01' book list"); $ua1->title_is("Book List", "Check logged in and at book list"); $ua1->content_contains("Book List", "Book List page test"); $ua1->content_contains("TestTitle", "Look for 'TestTitle'"); - + # Make sure the new book can be deleted # Get all the Delete links on the list page my @delLinks = $ua1->find_all_links(text => 'Delete'); @@ -275,11 +275,11 @@ editor and enter the following: # Check that delete worked $ua1->content_contains("Book List", "Book List page test"); $ua1->content_like(qr/Deleted book \d+/, "Deleted book #"); - + # User 'test02' should not be able to add a book $ua2->get_ok("http://localhost/books/url_create/TestTitle2/2/5", "'test02' add"); $ua2->content_contains("Unauthorized!", "Check 'test02' cannot add"); - + done_testing; The C test cases uses copious comments to explain each step @@ -363,7 +363,7 @@ C<__PACKAGE__-Econfig(...> declaration to resemble: my $dsn = $ENV{MYAPP_DSN} ||= 'dbi:SQLite:myapp.db'; __PACKAGE__->config( schema_class => 'MyApp::Schema', - + connect_info => { dsn => $dsn, user => '', @@ -416,18 +416,18 @@ t/controller_Foo.t: use strict; use warnings; use Test::More; - + BEGIN { $ENV{ MYAPP_CONFIG_LOCAL_SUFFIX } = 'testing'; } - + eval "use Test::WWW::Mechanize::Catalyst 'MyApp'"; plan $@ ? ( skip_all => 'Test::WWW::Mechanize::Catalyst required' ) : ( tests => 2 ); - + ok( my $mech = Test::WWW::Mechanize::Catalyst->new, 'Created mech object' ); - + $mech->get_ok( 'http://localhost/foo' );