From aab1a2eac73d7b5fe6c145b7921b88051ffb7e9e Mon Sep 17 00:00:00 2001 From: Lucas Thomazoni Date: Fri, 7 Oct 2022 16:24:17 -0300 Subject: [PATCH 1/2] feat: Channel and Group #kick APIs --- lib/rocket_chat/messages/channel.rb | 15 ++++++++ lib/rocket_chat/messages/group.rb | 15 ++++++++ spec/rocket_chat/messages/channel_spec.rb | 47 +++++++++++++++++++++++ spec/rocket_chat/messages/group_spec.rb | 47 +++++++++++++++++++++++ 4 files changed, 124 insertions(+) diff --git a/lib/rocket_chat/messages/channel.rb b/lib/rocket_chat/messages/channel.rb index 85fd5c2..b4e8398 100644 --- a/lib/rocket_chat/messages/channel.rb +++ b/lib/rocket_chat/messages/channel.rb @@ -24,6 +24,21 @@ def join(room_id: nil, name: nil) )['success'] end + # + # channels.kick REST API + # @param [String] room_id Rocket.Chat room id + # @param [String] user_id Rocket.Chat user id + # @return [Boolean] + # @raise [HTTPError, StatusError] + # + def kick(room_id: nil, user_id: nil) + session.request_json( + '/api/v1/channels.kick', + method: :post, + body: room_params(room_id, nil).merge(user_params(user_id, nil)) + )['success'] + end + # # channels.list REST API # @param [Integer] offset Query offset diff --git a/lib/rocket_chat/messages/group.rb b/lib/rocket_chat/messages/group.rb index 6d5089a..1d35679 100644 --- a/lib/rocket_chat/messages/group.rb +++ b/lib/rocket_chat/messages/group.rb @@ -40,6 +40,21 @@ def remove_leader(room_id: nil, name: nil, user_id: nil, username: nil) )['success'] end + # + # groups.kick REST API + # @param [String] room_id Rocket.Chat room id + # @param [String] user_id Rocket.Chat user id + # @return [Boolean] + # @raise [HTTPError, StatusError] + # + def kick(room_id: nil, user_id: nil) + session.request_json( + '/api/v1/groups.kick', + method: :post, + body: room_params(room_id, nil).merge(user_params(user_id, nil)) + )['success'] + end + # groups.list REST API # @param [Integer] offset Query offset # @param [Integer] count Query count/limit diff --git a/spec/rocket_chat/messages/channel_spec.rb b/spec/rocket_chat/messages/channel_spec.rb index 5efccbc..e3e389a 100644 --- a/spec/rocket_chat/messages/channel_spec.rb +++ b/spec/rocket_chat/messages/channel_spec.rb @@ -156,4 +156,51 @@ end end end + + describe '#kick' do + before do + # Stubs for /api/v1/channels.kick REST API + stub_unauthed_request :post, '/api/v1/channels.kick' + + stub_authed_request(:post, '/api/v1/channels.kick') + .to_return(not_provided_room_body) + + stub_authed_request(:post, '/api/v1/channels.kick') + .with( + body: { roomId: 'missing-room', userId: '1' } + ).to_return(invalid_room_body) + + stub_authed_request(:post, '/api/v1/channels.kick') + .with( + body: { roomId: 'a-room', userId: '1' } + ).to_return( + body: { success: true }.to_json, + status: 200 + ) + end + + context 'with a valid session' do + it 'returns success' do + expect(scope.kick(room_id: 'a-room', user_id: '1')).to be_truthy + end + + context 'with a missing room' do + it 'raises a status error' do + expect do + scope.kick(room_id: 'missing-room', user_id: '1') + end.to raise_error RocketChat::StatusError, invalid_room_message + end + end + end + + context 'with an invalid session token' do + let(:token) { RocketChat::Token.new(authToken: nil, roomId: nil) } + + it 'raises a status error' do + expect do + scope.kick(room_id: 'a-room', user_id: 'test') + end.to raise_error RocketChat::StatusError, 'You must be logged in to do this.' + end + end + end end diff --git a/spec/rocket_chat/messages/group_spec.rb b/spec/rocket_chat/messages/group_spec.rb index c99793b..662b2fd 100644 --- a/spec/rocket_chat/messages/group_spec.rb +++ b/spec/rocket_chat/messages/group_spec.rb @@ -312,4 +312,51 @@ end end end + + describe '#kick' do + before do + # Stubs for /api/v1/groups.kick REST API + stub_unauthed_request :post, '/api/v1/groups.kick' + + stub_authed_request(:post, '/api/v1/groups.kick') + .to_return(not_provided_room_body) + + stub_authed_request(:post, '/api/v1/groups.kick') + .with( + body: { roomId: 'missing-room', userId: '1' } + ).to_return(invalid_room_body) + + stub_authed_request(:post, '/api/v1/groups.kick') + .with( + body: { roomId: 'a-room', userId: '1' } + ).to_return( + body: { success: true }.to_json, + status: 200 + ) + end + + context 'with a valid session' do + it 'returns success' do + expect(scope.kick(room_id: 'a-room', user_id: '1')).to be_truthy + end + + context 'with a missing room' do + it 'raises a status error' do + expect do + scope.kick(room_id: 'missing-room', user_id: '1') + end.to raise_error RocketChat::StatusError, invalid_room_message + end + end + end + + context 'with an invalid session token' do + let(:token) { RocketChat::Token.new(authToken: nil, roomId: nil) } + + it 'raises a status error' do + expect do + scope.kick(room_id: 'a-room', user_id: 'test') + end.to raise_error RocketChat::StatusError, 'You must be logged in to do this.' + end + end + end end From 3bdfcbd5cf1ee192e4933b43592c7a107e15521f Mon Sep 17 00:00:00 2001 From: Lucas Thomazoni Date: Fri, 7 Oct 2022 16:35:07 -0300 Subject: [PATCH 2/2] feat: Add docs --- README.md | 2 ++ docs/channels.md | 9 +++++++++ docs/groups.md | 12 +++++++++++- 3 files changed, 22 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 6f2b06d..ebf3a74 100644 --- a/README.md +++ b/README.md @@ -58,6 +58,7 @@ This gem supports the following Rocket.Chat APIs (Tested against Rocket.Chat v0. * [/api/v1/channels.info](docs/channels.md#channelsinfo) * [/api/v1/channels.invite](docs/channels.md#channelsinvite) * [/api/v1/channels.join](docs/channels.md#channelsjoin) +* [/api/v1/channels.kick](docs/channels.md#channelskick) * [/api/v1/channels.leave](docs/channels.md#channelsleave) * [/api/v1/channels.list](docs/channels.md#channelslist) * [/api/v1/channels.rename](docs/channels.md#channelsrename) @@ -82,6 +83,7 @@ This gem supports the following Rocket.Chat APIs (Tested against Rocket.Chat v0. * [/api/v1/groups.removeModerator](docs/groups.md#groupsremovemoderator) * /api/v1/groups.info * /api/v1/groups.invite +* [/api/v1/groups.kick](docs/groups.md#groupskick) * /api/v1/groups.leave * [/api/v1/groups.list](docs/groups.md#groupslist) * /api/v1/groups.rename diff --git a/docs/channels.md b/docs/channels.md index 3d37524..342b7c3 100644 --- a/docs/channels.md +++ b/docs/channels.md @@ -105,6 +105,15 @@ channel = session.channels.join(name: 'some_channel_name') Either room_id (RocketChat's ID) or name can be used. +#### channels.kick + +```ruby +require 'rocketchat' + +rocket_server = RocketChat::Server.new('http://your.server.address/') +session = rocket_server.login('username', 'password') +channel = session.channels.kick(room_id: 'some-room-id', user_id: 'some-user-id') +``` #### channels.leave diff --git a/docs/groups.md b/docs/groups.md index 1a4b36c..06c2d65 100644 --- a/docs/groups.md +++ b/docs/groups.md @@ -69,4 +69,14 @@ rocket_server = RocketChat::Server.new('http://your.server.address/') session = rocket_server.login('username', 'password') session.groups.members(name: 'some_channel_name') -``` \ No newline at end of file +``` + +#### groups.kick + +```ruby +require 'rocketchat' + +rocket_server = RocketChat::Server.new('http://your.server.address/') +session = rocket_server.login('username', 'password') +channel = session.groups.kick(room_id: 'some-room-id', user_id: 'some-user-id') +```