The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
# -*- mode: cperl; tab-width: 8; indent-tabs-mode: nil; basic-offset: 2 -*-
# vim:ts=8:sw=2:et:sta:sts=2
use strict;
use warnings;
use Test::More;
use t::util;
use English qw(-no_match_vars);

eval {
  require Digest::SHA;
  require DBD::SQLite;
  plan tests => 3;

} or do {

  plan skip_all => 'Digest::SHA or DBD::SQLite not installed';
};

our $PKG = 'ClearPress::authenticator::db';
use ClearPress::authenticator::db;
my $util = t::util->new();
my $dbh  = $util->dbh();

{
  $dbh->do(q[CREATE TABLE user(username,pass)]);
  my $auth = $PKG->new({dbh=>$dbh});
  is($auth->authen_credentials({
				username => 'missing',
				password => 'something',
			       }), undef, 'unknown user');
  $dbh->do(q[DROP TABLE user]);
}

{
  my $crypt = Digest::SHA::sha1_hex('notthesame');
  $dbh->do(q[CREATE TABLE user(username,pass)]);
  $dbh->do(qq[INSERT INTO user(username,pass) VALUES('dummyuser','$crypt')]);
  my $auth = $PKG->new({dbh => $dbh});
  my $ref  = {
	      username => 'dummyuser',
	      password => 'dummypass',
	     };
  my $result = $auth->authen_credentials($ref);
  is_deeply($result, undef, 'valid user, bad password');
  $dbh->do(q[DROP TABLE user]);
}

{
  my $crypt = Digest::SHA::sha1_hex('dummy');
  $dbh->do(q[CREATE TABLE user(username,pass)]);
  $dbh->do(qq[INSERT INTO user(username,pass) VALUES('dummyuser','$crypt')]);
  my $auth = $PKG->new({dbh => $dbh});
  my $ref  = {
	      username => 'dummyuser',
	      password => 'dummy',
	     };
  my $result = $auth->authen_credentials($ref);
  is_deeply($result, $ref, 'valid user');
  $dbh->do(q[DROP TABLE user]);
}