Skip to content

Commit 6028029

Browse files
author
Eugene
authored
Permissionsv2 (#62)
* [CHAT-2584] Add permissions v2 methods * Add host env variable for CI * Run rubocop in separate step
1 parent 1a4726a commit 6028029

File tree

5 files changed

+164
-7
lines changed

5 files changed

+164
-7
lines changed

.github/workflows/ci.yml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,9 @@ jobs:
1717
ruby-version: ${{ matrix.ruby }}
1818
bundler-cache: true
1919

20+
- run: bundle exec rake rubocop
2021
- env:
2122
STREAM_CHAT_API_KEY: ${{ secrets.STREAM_CHAT_API_KEY }}
2223
STREAM_CHAT_API_SECRET: ${{ secrets.STREAM_CHAT_API_SECRET }}
23-
run: |
24-
bundle exec rake rubocop
25-
bundle exec rake test
24+
STREAM_CHAT_API_HOST: ${{ secrets.STREAM_CHAT_API_HOST }}
25+
run: bundle exec rake test

lib/stream-chat/channel.rb

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,10 @@ def remove_members(user_ids)
115115
@client.post(url, data: { remove_members: user_ids })
116116
end
117117

118+
def assign_roles(members, message = nil)
119+
@client.post(url, data: { assign_roles: members, message: message })
120+
end
121+
118122
def demote_moderators(user_ids)
119123
@client.post(url, data: { demote_moderators: user_ids })
120124
end

lib/stream-chat/client.rb

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -429,6 +429,38 @@ def list_commands
429429
get('commands')
430430
end
431431

432+
def list_permissions
433+
get('permissions')
434+
end
435+
436+
def get_permission(id)
437+
get("permissions/#{id}")
438+
end
439+
440+
def create_permission(permission)
441+
post('permissions', data: permission)
442+
end
443+
444+
def update_permission(id, permission)
445+
put("permissions/#{id}", data: permission)
446+
end
447+
448+
def delete_permission(id)
449+
delete("permissions/#{id}")
450+
end
451+
452+
def create_role(name)
453+
post('roles', data: { name: name })
454+
end
455+
456+
def delete_role(name)
457+
delete("roles/#{name}")
458+
end
459+
460+
def list_roles
461+
get('roles')
462+
end
463+
432464
private
433465

434466
def get_default_params

spec/channel_spec.rb

Lines changed: 21 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,20 @@
44
require 'stream-chat'
55

66
describe StreamChat::Channel do
7+
def loop_times(times)
8+
loop do
9+
begin
10+
yield()
11+
return
12+
rescue StandardError, RSpec::Expectations::ExpectationNotMetError
13+
raise if times == 0
14+
end
15+
16+
sleep(1)
17+
times -= 1
18+
end
19+
end
20+
721
before(:all) do
822
@client = StreamChat::Client.new(ENV['STREAM_CHAT_API_KEY'], ENV['STREAM_CHAT_API_SECRET'], base_url: ENV['STREAM_CHAT_API_HOST'])
923
end
@@ -84,9 +98,13 @@
8498

8599
it 'can truncate with message' do
86100
text = SecureRandom.uuid.to_s
87-
response = @channel.truncate(message: { text: text, user_id: @random_user[:id] })
88-
expect(response).to include 'message'
89-
expect(response['message']['text']).to eq(text)
101+
@channel.truncate(message: { text: text, user_id: @random_user[:id] })
102+
103+
loop_times 60 do
104+
channel_state = @channel.query
105+
expect(channel_state).to include 'messages'
106+
expect(channel_state['messages'][0]['text']).to eq(text)
107+
end
90108
end
91109

92110
it 'can add members' do

spec/client_spec.rb

Lines changed: 104 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,20 @@
55
require 'stream-chat'
66

77
describe StreamChat::Client do
8+
def loop_times(times)
9+
loop do
10+
begin
11+
yield()
12+
return
13+
rescue StandardError, RSpec::Expectations::ExpectationNotMetError
14+
raise if times == 0
15+
end
16+
17+
sleep(1)
18+
times -= 1
19+
end
20+
end
21+
822
before(:all) do
923
@client = StreamChat::Client.new(ENV['STREAM_CHAT_API_KEY'], ENV['STREAM_CHAT_API_SECRET'], base_url: ENV['STREAM_CHAT_API_HOST'])
1024

@@ -458,7 +472,7 @@
458472
it 'request the export for a channel that does not exist' do
459473
expect do
460474
@client.export_channels({ type: 'messaging', id: SecureRandom.uuid })
461-
end.to raise_error
475+
end.to raise_error StreamChat::StreamAPIException
462476
end
463477

464478
it 'request the channel export' do
@@ -594,4 +608,93 @@
594608
end
595609
end
596610
end
611+
612+
describe 'permissions' do
613+
before(:all) do
614+
@permission_id = SecureRandom.uuid
615+
end
616+
617+
it 'create a permission' do
618+
@client.create_permission({
619+
id: @permission_id,
620+
name: @permission_id,
621+
action: 'CreateChannel',
622+
owner: false,
623+
same_team: false,
624+
condition: {
625+
'$subject.magic_custom_field': 'custom'
626+
}
627+
})
628+
end
629+
630+
it 'get permission' do
631+
loop_times 10 do
632+
permission = @client.get_permission(@permission_id)
633+
expect(permission['id']).to eq @cmd
634+
expect(permission['name']).to eq @cmd
635+
end
636+
end
637+
638+
it 'update that permission' do
639+
loop_times 10 do
640+
@client.update_permission(@permission_id, {
641+
id: @permission_id,
642+
name: @permission_id,
643+
description: 'desc',
644+
action: 'CreateChannel',
645+
condition: {
646+
'$subject.magic_custom_field': 'custom'
647+
}
648+
})
649+
permission = @client.get_permission(@permission_id)['permission']
650+
expect(permission['name']).to eq @permission_id
651+
expect(permission['description']).to eq 'desc'
652+
end
653+
end
654+
655+
it 'list permissions' do
656+
loop_times 10 do
657+
permissions = @client.list_permissions['permissions']
658+
found = false
659+
permissions.each do |permission|
660+
if permission['id'] == @permission_id
661+
found = true
662+
break
663+
end
664+
end
665+
666+
expect(found).to be true
667+
end
668+
end
669+
670+
it 'delete that permission' do
671+
loop_times 10 do
672+
@client.delete_permission(@permission_id)
673+
end
674+
end
675+
676+
it 'create role' do
677+
@client.create_role(@permission_id)
678+
end
679+
680+
it 'list new role' do
681+
loop_times 10 do
682+
roles = @client.list_roles['roles']
683+
found = false
684+
roles.each do |role|
685+
if role['name'] == @permission_id
686+
found = true
687+
break
688+
end
689+
end
690+
expect(found).to be true
691+
end
692+
end
693+
694+
it 'delete role' do
695+
loop_times 10 do
696+
@client.delete_role @permission_id
697+
end
698+
end
699+
end
597700
end

0 commit comments

Comments
 (0)