use strict;
use warnings FATAL => 'all';

use Test::More tests => 22;
use T::TempDB;
use Digest::MD5 qw(md5_hex);

BEGIN { use_ok('T::Test'); }

my @users = Apache::SWIT::Security::DB::User->retrieve_all;
is(scalar(@users), 1);
is($users[0]->name, 'admin');
is($users[0]->password, md5_hex('password'));
is_deeply([ $users[0]->role_ids ], [ 1 ]);

my $u = Apache::SWIT::Security::DB::User->create({
		name => 'another',
		password => 'p' });
ok($u);
is_deeply([ $u->role_ids ], []);

$u->add_role_id(2);
is_deeply([ $u->role_ids ], [ 2 ]);

$u->add_role_id(1);
is_deeply([ sort $u->role_ids ], [ 1, 2 ]);

eval { $u->add_role_id(3) };
like($@, qr/valid_role_id_chk/);
is_deeply([ sort $u->role_ids ], [ 1, 2 ]);

$u->delete_role_id(1);
is_deeply([ $u->role_ids ], [ 2 ]);

$u->add_role_id(1);
is_deeply([ sort $u->role_ids ], [ 1, 2 ]);

@users = sort { $a->id <=> $b->id || $a->role_id <=> $b->role_id }
		Apache::SWIT::Security::DB::User->search_all_with_roles;
is(scalar(@users), 3);
is($users[0]->name, 'admin');
is($users[1]->name, 'another');
is($users[1]->role_id, 1);
is($users[2]->role_id, 2);

@users = sort { $a->id <=> $b->id || $a->role_id <=> $b->role_id }
		Apache::SWIT::Security::DB::User->search_all_with_roles;
is(scalar(@users), 3);
is($users[2]->role_id, 2);
ok($users[2]->delete);

eval { $users[0]->add_role_id(1); };
like($@, qr/user_roles_pk/);
