From 89c178e90786f668c15506f7e52206214ac29ed6 Mon Sep 17 00:00:00 2001 From: Matias Linares Date: Wed, 8 Aug 2018 22:45:01 -0300 Subject: Add /directory/room/ endpoints This allows work with the discoverability of the aliases for the rooms. The next step is allow the client to send a message, join, etc, a room with the room alias like #8 and #14 --- lib/Matrix/Client.pm6 | 15 +++++++++++++++ t/20-client.t | 35 ++++++++++++++++++++++++++++++++++- 2 files changed, 49 insertions(+), 1 deletion(-) diff --git a/lib/Matrix/Client.pm6 b/lib/Matrix/Client.pm6 index 1e080bd..5f52779 100644 --- a/lib/Matrix/Client.pm6 +++ b/lib/Matrix/Client.pm6 @@ -197,6 +197,21 @@ method send(Str $room-id, Str $body, :$type? = "m.text") { from-json($res.content) } +method get-room-id($room-alias) { + my $res = $.get("/directory/room/$room-alias"); + + from-json($res.content) +} + +method add-room-alias($room-id, $room-alias) { + $.put("/directory/room/$room-alias", + room_id => $room-id); +} + +method remove-room-alias($room-alias) { + $.delete("/directory/room/$room-alias"); +} + # Media method upload(IO::Path $path, Str $filename?) { diff --git a/t/20-client.t b/t/20-client.t index 3fd6739..2215a6b 100644 --- a/t/20-client.t +++ b/t/20-client.t @@ -1,7 +1,7 @@ use lib 'lib'; use Test; use Matrix::Client; -plan 4; +plan 5; unless %*ENV { skip-rest 'No test server setted'; @@ -62,3 +62,36 @@ subtest 'sync' => { isa-ok $client.sync(:sync-filter(room => timeline => limit => 1)), Matrix::Response::Sync, 'sync wit Hash sync-filter'; } + +subtest 'directory' => { + plan 6; + my $alias = '#testing:localhost'; + my $test-room = $client.create-room; + + throws-like { + $client.get-room-id($alias); + }, X::Matrix::Response, + message => /M_NOT_FOUND/, + "raises with unknown alias"; + + lives-ok { + $client.add-room-alias($test-room.id, $alias) + }, 'can add an alias to the room'; + + lives-ok { + $client.get-room-id($alias); + }, 'can retrieve room with an alias'; + + is $client.get-room-id($alias), $test-room.id, + 'good room when retrieve'; + + lives-ok { + $client.remove-room-alias($alias); + }, 'can remove the alias'; + + throws-like { + $client.get-room-id($alias); + }, X::Matrix::Response, + message => /M_NOT_FOUND/, + "Room not found after delete"; +} -- cgit v1.2.3-70-g09d2