use lib 'lib'; use Test; use Matrix::Client; plan 14; use-ok 'Matrix::Client::Room'; my $room = Matrix::Client::Room.new(:home-server, :id); can-ok $room, 'read-marker'; can-ok $room, 'typing'; # Integrations tests; unless %*ENV { skip-rest 'No test server setted'; exit; } my $home-server = %*ENV; my $username = %*ENV; my $password = %*ENV; my $device-id = %*ENV; my $public-room-id = %*ENV // '!cYTYddgfJTLTzdiDBP:localhost'; my Matrix::Client $client .= new(:$home-server); $client.login(:$username, :$password); my $room-alias = 'Room' ~ (^10).map({('a'…'z').pick}).join; my $main-room; lives-ok { $main-room = $client.create-room( :public, :preset, :room_alias_name($room-alias), :name("The Grand Duke Pub"), :topic("All about happy hour"), :creation_content({ "m.federate" => False }) ); }, 'Can create room'; isa-ok $main-room, Matrix::Client::Room; my $room-id = $main-room.id; lives-ok { $main-room.leave; }, 'Can leave room'; skip 'M_UNKNOWN: No known servers', 1; #lives-ok { # $main-room.join; #}, 'Can join a room'; lives-ok { $client.join-room($public-room-id) }, 'Can join public room'; my @rooms = $client.joined-rooms; my $public-room = @rooms.first(-> $room { $room.id eq $public-room-id }); isa-ok $public-room, Matrix::Client::Room; isa-ok $public-room.send('hi'), Str; subtest 'states' => { plan 2; isa-ok $main-room.state(), Seq; my @states = $main-room.state(); isa-ok @states.first(), Matrix::Client::Response::StateEvent; }; subtest 'creation' => { plan 3; my $new-room = Matrix::Client::Room.new( :id($public-room.id), :$home-server, :access-token($client.access-token) ); ok $new-room, 'Can .new a room with the id of the public room'; isa-ok $new-room, Matrix::Client::Room; is $new-room.id, $public-room.id, 'The id is the same as the public room'; }; subtest 'name' => { plan 4; my $name = "Name room test"; my $test-room = $client.create-room: :creation_content({ "m.federate" => False }); is $test-room.name(), ''; lives-ok { $test-room.send-state('m.room.name', :name($name)) }, 'Can change name to an unnamed room'; lives-ok { $test-room.name() }, '.name with a name set dont die'; is $test-room.name, $name, 'The name is set correctly'; $test-room.leave; }; subtest 'ban' => { plan 2; my Matrix::Client $new-user-client .= new(:$home-server); my $new-username = ('a'..'z').pick(20).join; $new-user-client.register($new-username, 'password'); $new-user-client.join-room($public-room-id); my $user-id = $new-user-client.whoami; my $room = $client.create-room( :public, :preset, :name("The Grand Duke Pub"), :topic("All about happy hour"), :creation_content({ "m.federate" => False }) ); $new-user-client.join-room($room.id); lives-ok { $room.ban($user-id, :reason) }, 'can ban usernames'; lives-ok { $room.unban($user-id, :reason); }, 'can unban'; }