use strict;
use warnings;
use Hoppy;
use Hoppy::Room::Memory;
use Test::More tests => 18;
{
my $room = Hoppy::Room::Memory->new;
isa_ok( $room, 'Hoppy::Room::Memory' );
can_ok( $room, 'new' );
can_ok( $room, 'login' );
can_ok( $room, 'logout' );
can_ok( $room, 'create_room' );
can_ok( $room, 'delete_room' );
can_ok( $room, 'fetch_user_from_user_id' );
can_ok( $room, 'fetch_user_from_session_id' );
can_ok( $room, 'fetch_users_from_room_id' );
}
{
my $server = Hoppy->new;
my $room = $server->room;
$room->create_room('room1');
$room->create_room('room2');
my @room_list = keys %{ $room->{rooms} };
is_deeply(
\@room_list,
[ 'global', 'room1', 'room2' ],
'create_room() method ok'
);
$room->delete_room('room2');
@room_list = keys %{ $room->{rooms} };
is_deeply( \@room_list, [ 'global', 'room1' ], 'delete_room() method ok' );
&finish($server);
}
{
my $server = Hoppy->new;
my $room = $server->room;
$room->create_room('room1');
$room->create_room('room2');
$room->login( { user_id => 'hoge', session_id => 1 } );
$room->login( { user_id => 'fuga', session_id => 2 } );
$room->login( { user_id => 'foo', session_id => 3, room_id => 'room1' } );
$room->login( { user_id => 'bar', session_id => 4, room_id => 'room2' } );
is_deeply(
$room->{where_in},
{
'bar' => 'room2',
'fuga' => 'global',
'foo' => 'room1',
'hoge' => 'global'
},
'login() method ok'
);
my $correct = bless(
{
'session_id' => 1,
'user_id' => 'hoge'
},
'Hoppy::User'
);
my $user = $room->fetch_user_from_user_id('hoge');
is_deeply( $user, $correct, 'fetch_user_from_user_id() method ok' );
$user = $room->fetch_user_from_session_id(1);
is_deeply( $user, $correct, 'fetch_user_from_session_id() method ok' );
my $users = $room->fetch_users_from_room_id('global');
is_deeply(
$users,
[
bless(
{
'session_id' => 2,
'user_id' => 'fuga'
},
'Hoppy::User'
),
bless(
{
'session_id' => 1,
'user_id' => 'hoge'
},
'Hoppy::User'
)
],
'fetch_users_from_room_id() method ok'
);
$room->logout( { user_id => 'foo' } );
my $num = keys %{ $room->{rooms}->{room1} };
is( $num, 0, 'logout() method 1/3 ok' );
my $foo = $room->{what_room}->{foo};
is( !defined($foo), 1, 'logout() method 2/3 ok' );
my ($not_authorized) =
keys %{ $room->context->{not_authorized} };
is( $not_authorized, 3, 'logout() method 3/3 ok' );
&finish($server);
}
sub finish {
my $server = shift;
POE::Session->create(
inline_states => {
_start => sub {
$server->stop;
},
}
);
$server->start;
}