The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/perl
use warnings;
use strict;
use lib qw(./lib);

use Test::More no_plan => 1;

use Bot::BasicBot::Pluggable;
use Bot::BasicBot::Pluggable::Module::Auth;

our $store;
no warnings 'redefine';
sub Bot::BasicBot::Pluggable::Module::store {
  $store ||= Bot::BasicBot::Pluggable::Store->new;
}

ok(my $auth = Bot::BasicBot::Pluggable::Module::Auth->new(), "created auth module");

ok(!$auth->authed('bob'), "bob not authed yet");
ok(command("!auth admin muppet"), "sent bad login");
ok(!$auth->authed('bob'), "bob not authed yet");
ok(command("!auth admin julia"), "sent good login");
ok($auth->authed('bob'), "bob authed now");

ok(command("!adduser bob bob"), "added bob user");
ok(command("!auth bob fred"), "not logged in as bob");
ok(!$auth->authed('bob'), "not still authed");
ok(command("!auth bob bob"), "logged in as bob");
ok($auth->authed('bob'), "still authed");

ok(command("!deluser admin"), "deleted admin user");
ok(command("!auth admin julia"), "tried login");
ok(!$auth->authed('bob'), "not authed");

ok(command("!auth bob bob"), "logged in as bob");
ok(command("!passwd bob dave"), "changed password");
ok(command("!auth bob dave"), "tried login");
ok($auth->authed('bob'), "authed");

sub command {
  my $body = shift;
  my $response = $auth->said( {
    address => 1, body => $body, who => 'bob'
  }, 1 );
  #warn "$response\n";
  return $response;
}