aboutsummaryrefslogtreecommitdiff
path: root/t/30-room.t
blob: e12a17c5b74ce862d3b72a07452840af627ec26d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
use lib 'lib';
use Test;
use Matrix::Client;
plan 10;

unless %*ENV<MATRIX_CLIENT_TEST_SERVER> {
    skip-rest 'No test server setted';
    exit;
}

my $home-server = %*ENV<MATRIX_CLIENT_TEST_SERVER>;
my $username = %*ENV<MATRIX_CLIENT_USERNAME>;
my $password = %*ENV<MATRIX_CLIENT_PASSWORD>;
my $device-id = %*ENV<MATRIX_CLIENT_DEVICE_ID>;
my $public-room-id = %*ENV<MATRIX_CLIENT_PUBLIC_ROOM> // '!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<public_chat>,
        :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';

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::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
    });

    throws-like {
        $test-room.name()
    }, X::Matrix::Response,
    message => /M_NOT_FOUND/,
    '.name without name gives event not found';

    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;
};