use strict;
use warnings;

use Test::More tests => 11;
use Mojolicious::Plugin::DigestAuth::Util 'checksum';

BEGIN { use_ok('Mojolicious::Plugin::DigestAuth::DB'); }

sub each_user
{
    my ($users, $callback) = @_;
    for my $realm (keys %$users) {
	while(my ($u, $p) = each %{$users->{$realm}}) {
	    my $hash = checksum($u, $realm, $p);
	    $callback->($realm, $u, $hash);
	}
    }
}

eval { Mojolicious::Plugin::DigestAuth::DB::Hash->new };
like($@, qr/usage:/);

eval { Mojolicious::Plugin::DigestAuth::DB::File->new('does_not_exist') };
like($@, qr/no such file/i);

eval { Mojolicious::Plugin::DigestAuth::DB::File->new('t/bad_htdigest') };
like($@, qr/invalid entry: sshaw/);

my $users = {
    realm1 => {
	sshaw => 'B1gpAss',
	bob   => 'bob', 
	''    => ''
    },	    
    realm2 => {
	monkey => '_DeathMarch_'
    }
};	

my $store = Mojolicious::Plugin::DigestAuth::DB::Hash->new($users);
each_user($users, sub { 
    my ($realm, $user, $hash) = @_;
    is($store->get($realm, $user), $hash);
});

$users = {
    my_realm => {
	sshaw => 'my_password',
    },	    
    fofinha => {
	aa => ''
    },
    X => {
        '' => ''
    }
};	

my $file = 't/good_htdigest';
$store = Mojolicious::Plugin::DigestAuth::DB::File->new($file);
each_user($users, sub {
    my ($realm, $user, $hash) = @_;
    is($store->get($realm, $user), $hash);
});
