The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/perl

use strict;
use vars qw{$VERSION};
BEGIN {
	$|       = 1;
	$^W      = 1;
	$VERSION = '0.98';
}

use Test::More tests => 45;

use File::Spec::Functions ':ALL';
use YAML::Tiny;
use t::lib::Test;
use t::lib::TinyAuth;

$ENV{SCRIPT_NAME} = '/cgi-bin/foobar';





#####################################################################
# Normal Index Page

SCOPE: {
	my $instance = t::lib::TinyAuth->new( "02_login1.cgi" );

	# Run the instance
	is( $instance->run, 1, '->run ok' );

	# Check the output
	cgi_cmp( $instance->stdout, <<"END_HTML", '->stdout returns as expect' );
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>TinyAuth $VERSION</title>
</head>

<body>
<h2>User</h2>
<p><a href="$ENV{SCRIPT_NAME}?a=f">I forgot my password</a></p>
<p><a href="$ENV{SCRIPT_NAME}?a=c">I want to change my password</a></p>
<h2>Admin</h2>
<form method="post" name="f" action="$ENV{SCRIPT_NAME}">
<p>Email</p>
<p><input type="text" name="E" size="30"></p>
<p>Password</p>
<p><input type="password" name="P" size="30"></p>
<p><input type="submit" name="s" value="Login"></p>
</form>
<hr>
<p><i>Powered by <a href="http://search.cpan.org/perldoc?TinyAuth">TinyAuth</a></i></p>
</body>
</html>
END_HTML
}





#####################################################################
# Login

SCOPE: {
	my $instance = t::lib::TinyAuth->new( "02_login2.cgi" );

	# Was an admin user found and set?
        ok( $instance->user, 'Admin user set' );
        isa_ok( $instance->user, 'Authen::Htpasswd::User' );

	# Run the instance
	is( $instance->run, 1, '->run ok' );

	# Check the output
	cgi_cmp( $instance->stdout, <<"END_HTML", '->stdout returns as expect' );
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>TinyAuth $VERSION</title>
</head>

<body>
<h2>User</h2>
<p><a href="$ENV{SCRIPT_NAME}?a=f">I forgot my password</a></p>
<p><a href="$ENV{SCRIPT_NAME}?a=c">I want to change my password</a></p>
<h2>Admin</h2>
<p><a href="$ENV{SCRIPT_NAME}?a=n">Add a new account</a></p>
<p><a href="$ENV{SCRIPT_NAME}?a=l">List all accounts</a></p>
<p><a href="$ENV{SCRIPT_NAME}?a=d">Delete an account</a></p>
<p><a href="$ENV{SCRIPT_NAME}?a=m">Promote an account</a></p>
<p><a href="$ENV{SCRIPT_NAME}?a=o">Logout</a></p>
<hr>
<p><i>Powered by <a href="http://search.cpan.org/perldoc?TinyAuth">TinyAuth</a></i></p>
</body>
</html>

END_HTML
}





#####################################################################
# Bad Login

SCOPE: {
	my $instance = t::lib::TinyAuth->new( "02_login4.cgi" );
	is( $instance->user, undef, '->user is not set' );

	# Run the instance
	is( $instance->run, 1, '->run ok' );

	# Check the output
	cgi_cmp( $instance->stdout, <<"END_HTML", '->stdout returns as expect' );
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>TinyAuth $VERSION</title>
</head>

<body>
<h1>Error</h1>
<h2>Incorrect password</h2>
</body>
</html>

END_HTML
}





#####################################################################
# Normal Index Page

SCOPE: {
	$ENV{HTTP_COOKIE} = 'e=adamk@cpan.org;p=foo';
	my $instance = t::lib::TinyAuth->new( "02_login1.cgi" );

	# Run the instance
	is( $instance->run, 1, '->run ok' );

	# Check the output
	cgi_cmp( $instance->stdout, <<"END_HTML", '->stdout returns as expect' );
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>TinyAuth $VERSION</title>
</head>

<body>
<h2>User</h2>
<p><a href="$ENV{SCRIPT_NAME}?a=f">I forgot my password</a></p>
<p><a href="$ENV{SCRIPT_NAME}?a=c">I want to change my password</a></p>
<h2>Admin</h2>
<p><a href="$ENV{SCRIPT_NAME}?a=n">Add a new account</a></p>
<p><a href="$ENV{SCRIPT_NAME}?a=l">List all accounts</a></p>
<p><a href="$ENV{SCRIPT_NAME}?a=d">Delete an account</a></p>
<p><a href="$ENV{SCRIPT_NAME}?a=m">Promote an account</a></p>
<p><a href="$ENV{SCRIPT_NAME}?a=o">Logout</a></p>
<hr>
<p><i>Powered by <a href="http://search.cpan.org/perldoc?TinyAuth">TinyAuth</a></i></p>
</body>
</html>
END_HTML
}









#####################################################################
# Logout

SCOPE: {
	my $instance = t::lib::TinyAuth->new( "02_login3.cgi" );

	# Was an admin user found and set?
	# (This time via the cookies)
        ok( $instance->user, 'Admin user set' );
        isa_ok( $instance->user, 'Authen::Htpasswd::User' );

	# Run the instance
	is( $instance->run, 1, '->run ok' );

	# Check the output
	cgi_cmp( $instance->stdout, <<"END_HTML", '->stdout returns as expect' );
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>TinyAuth $VERSION</title>
</head>

<body>
<h2>User</h2>
<p><a href="$ENV{SCRIPT_NAME}?a=f">I forgot my password</a></p>
<p><a href="$ENV{SCRIPT_NAME}?a=c">I want to change my password</a></p>
<h2>Admin</h2>
<form method="post" name="f" action="$ENV{SCRIPT_NAME}">
<p>Email</p>
<p><input type="text" name="E" size="30"></p>
<p>Password</p>
<p><input type="password" name="P" size="30"></p>
<p><input type="submit" name="s" value="Login"></p>
</form>
<hr>
<p><i>Powered by <a href="http://search.cpan.org/perldoc?TinyAuth">TinyAuth</a></i></p>
</body>
</html>
END_HTML
}