zoom_rb 0.11.0 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (45) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +55 -0
  3. data/Gemfile.lock +6 -6
  4. data/README.md +0 -4
  5. data/lib/zoom/actions/account.rb +18 -51
  6. data/lib/zoom/actions/billing.rb +30 -27
  7. data/lib/zoom/actions/dashboard.rb +11 -22
  8. data/lib/zoom/actions/groups.rb +11 -9
  9. data/lib/zoom/actions/im/chat.rb +11 -24
  10. data/lib/zoom/actions/meeting.rb +34 -67
  11. data/lib/zoom/actions/phone.rb +5 -17
  12. data/lib/zoom/actions/recording.rb +8 -26
  13. data/lib/zoom/actions/report.rb +10 -20
  14. data/lib/zoom/actions/roles.rb +11 -28
  15. data/lib/zoom/actions/sip_audio.rb +16 -57
  16. data/lib/zoom/actions/token.rb +21 -24
  17. data/lib/zoom/actions/user.rb +65 -123
  18. data/lib/zoom/actions/webinar.rb +37 -77
  19. data/lib/zoom/actions.rb +68 -0
  20. data/lib/zoom/client.rb +10 -4
  21. data/lib/zoom/clients/oauth.rb +9 -3
  22. data/lib/zoom/utils.rb +10 -7
  23. data/lib/zoom/version.rb +1 -1
  24. data/lib/zoom_rb.rb +1 -0
  25. data/spec/fixtures/error/admin_cannot_activated.json +4 -0
  26. data/spec/fixtures/error/group_not_exist.json +4 -0
  27. data/spec/fixtures/error/not_found_administrator.json +4 -0
  28. data/spec/fixtures/groups/create.json +5 -0
  29. data/spec/fixtures/groups/update.json +0 -0
  30. data/spec/fixtures/token/revoke_token.json +3 -0
  31. data/spec/fixtures/user/update_email.json +0 -0
  32. data/spec/fixtures/user/update_status.json +0 -0
  33. data/spec/lib/zoom/actions/groups/create_spec.rb +96 -1
  34. data/spec/lib/zoom/actions/groups/update_spec.rb +59 -0
  35. data/spec/lib/zoom/actions/meeting/create_spec.rb +1 -1
  36. data/spec/lib/zoom/actions/token/access_token_spec.rb +34 -8
  37. data/spec/lib/zoom/actions/token/data_compliance_spec.rb +6 -1
  38. data/spec/lib/zoom/actions/token/refresh_token_spec.rb +33 -8
  39. data/spec/lib/zoom/actions/token/revoke_token_spec.rb +52 -0
  40. data/spec/lib/zoom/actions/user/create_spec.rb +18 -46
  41. data/spec/lib/zoom/actions/user/update_email_spec.rb +59 -0
  42. data/spec/lib/zoom/actions/user/update_status_spec.rb +59 -0
  43. data/spec/lib/zoom/actions_spec.rb +117 -0
  44. data/spec/lib/zoom/utils_spec.rb +1 -1
  45. metadata +33 -6
data/lib/zoom/client.rb CHANGED
@@ -35,14 +35,20 @@ module Zoom
35
35
 
36
36
  def oauth_request_headers
37
37
  {
38
- 'Authorization' => "Basic #{auth_token}"
39
- }.merge(headers)
38
+ 'Authorization' => "Basic #{auth_token}",
39
+ 'Accept' => 'application/json',
40
+ 'Content-Type' => 'application/x-www-form-urlencoded',
41
+ }
40
42
  end
41
43
 
42
- def request_headers
44
+ def bearer_authorization_header
43
45
  {
44
46
  'Authorization' => "Bearer #{access_token}"
45
- }.merge(headers)
47
+ }
48
+ end
49
+
50
+ def request_headers
51
+ bearer_authorization_header.merge(headers)
46
52
  end
47
53
 
48
54
  def auth_token
@@ -13,7 +13,7 @@ module Zoom
13
13
  # Returns (access_token, refresh_token)
14
14
  #
15
15
  def initialize(config)
16
- Zoom::Params.new(config).permit( %i[auth_token auth_code redirect_uri access_token refresh_token timeout])
16
+ Zoom::Params.new(config).permit( %i[auth_token auth_code redirect_uri access_token refresh_token timeout code_verifier])
17
17
  Zoom::Params.new(config).require_one_of(%i[access_token refresh_token auth_code])
18
18
  if (config.keys & [:auth_code, :redirect_uri]).any?
19
19
  Zoom::Params.new(config).require( %i[auth_code redirect_uri])
@@ -28,13 +28,19 @@ module Zoom
28
28
  end
29
29
 
30
30
  def refresh
31
- response = refresh_tokens(refresh_token: @refresh_token)
31
+ response = refresh_tokens(grant_type: 'refresh_token', refresh_token: @refresh_token)
32
32
  set_tokens(response)
33
33
  response
34
34
  end
35
35
 
36
36
  def oauth
37
- response = access_tokens(auth_code: @auth_code, redirect_uri: @redirect_uri)
37
+ response = access_tokens(
38
+ grant_type: 'authorization_code',
39
+ auth_code: @auth_code,
40
+ redirect_uri: @redirect_uri,
41
+ code_verifier: @code_verifier
42
+ )
43
+
38
44
  set_tokens(response)
39
45
  response
40
46
  end
data/lib/zoom/utils.rb CHANGED
@@ -32,7 +32,8 @@ module Zoom
32
32
  end
33
33
 
34
34
  def extract_options!(array)
35
- array.last.is_a?(::Hash) ? array.pop : {}
35
+ params = array.last.is_a?(::Hash) ? array.pop : {}
36
+ process_datetime_params!(params)
36
37
  end
37
38
 
38
39
  def validate_password(password)
@@ -40,14 +41,16 @@ module Zoom
40
41
  raise(Error , 'Invalid Password') unless password[password_regex].nil?
41
42
  end
42
43
 
43
- def process_datetime_params!(params, options)
44
- params = [params] unless params.is_a? Array
45
- params.each do |param|
46
- if options[param] && options[param].kind_of?(Time)
47
- options[param] = options[param].strftime('%FT%TZ')
44
+ def process_datetime_params!(params)
45
+ params.each do |key, value|
46
+ case key
47
+ when Symbol, String
48
+ params[key] = value.is_a?(Time) ? value.strftime('%FT%TZ') : value
49
+ when Hash
50
+ process_datetime_params!(params[key])
48
51
  end
49
52
  end
50
- options
53
+ params
51
54
  end
52
55
  end
53
56
  end
data/lib/zoom/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Zoom
4
- VERSION = '0.11.0'
4
+ VERSION = '1.1.0'
5
5
  end
data/lib/zoom_rb.rb CHANGED
@@ -6,6 +6,7 @@ require 'zoom/version'
6
6
  require 'zoom/constants/constants'
7
7
  require 'zoom/params'
8
8
  require 'zoom/utils'
9
+ require 'zoom/actions'
9
10
  require 'zoom/actions/account'
10
11
  require 'zoom/actions/billing'
11
12
  require 'zoom/actions/dashboard'
@@ -0,0 +1,4 @@
1
+ {
2
+ "code": 400,
3
+ "message": "Zoom Room and Admin users’ status cannot be activated or deactivated."
4
+ }
@@ -0,0 +1,4 @@
1
+ {
2
+ "code": 4130,
3
+ "message": "A group with this 3 does not exist."
4
+ }
@@ -0,0 +1,4 @@
1
+ {
2
+ "code": 400,
3
+ "message": "Only an account administrator can change email."
4
+ }
@@ -0,0 +1,5 @@
1
+ {
2
+ "id": "3",
3
+ "name": "Zoom Group Name",
4
+ "total_members": "1"
5
+ }
File without changes
@@ -0,0 +1,3 @@
1
+ {
2
+ "status": "success"
3
+ }
File without changes
File without changes
@@ -1,3 +1,98 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'spec_helper'
3
+ require 'spec_helper'
4
+
5
+ describe Zoom::Actions::Groups do
6
+ let(:zc) { zoom_client }
7
+ let(:args) { { name: 'Zoom Group Name' } }
8
+ let(:response) { zc.group_create(args) }
9
+
10
+ describe '#group_create action' do
11
+ context 'with 201 response' do
12
+ before :each do
13
+ stub_request(
14
+ :post,
15
+ zoom_url("/groups")
16
+ ).to_return(
17
+ status: 201,
18
+ body: json_response('groups','create'),
19
+ headers: { 'Content-Type' => 'application/json' }
20
+ )
21
+ end
22
+
23
+ it 'returns a hash' do
24
+ expect(response).to be_kind_of(Hash)
25
+ end
26
+
27
+ it 'returns the set params' do
28
+ expect(response['name']).to eq(args[:name])
29
+ end
30
+
31
+ it "returns 'start_url' and 'join_url'" do
32
+ expect(response['name']).to_not be_nil
33
+ end
34
+ end
35
+
36
+ context 'with 409 response' do
37
+ before :each do
38
+ stub_request(
39
+ :post,
40
+ zoom_url("/groups")
41
+ ).to_return(status: 409,
42
+ body: '{ "code": 409, "message": "Group name Zoom Group Name is already in use." }',
43
+ headers: { 'Content-Type' => 'application/json' })
44
+ end
45
+
46
+ it 'raises an error' do
47
+ expect { response }.to raise_error(Zoom::Error)
48
+ end
49
+ end
50
+
51
+ context 'with 429 response' do
52
+ before :each do
53
+ stub_request(
54
+ :post,
55
+ zoom_url("/groups")
56
+ ).to_return(status: 429,
57
+ body: '{ "code": 429, "message": "You have exceeded the daily rate limit (1) of Create a Group API request for this account. This limit resets at GMT 00:00:00." }',
58
+ headers: { 'Content-Type' => 'application/json' })
59
+ end
60
+
61
+ it 'raises an error' do
62
+ expect { response }.to raise_error(Zoom::Error)
63
+ end
64
+ end
65
+
66
+ context 'with 300 response' do
67
+ before :each do
68
+ stub_request(
69
+ :post,
70
+ zoom_url("/groups")
71
+ ).to_return(status: 300,
72
+ body: '{ "code": 300, "message": "Missing field: name." }',
73
+ headers: { 'Content-Type' => 'application/json' })
74
+ end
75
+
76
+ it 'raises an error' do
77
+ expect { response }.to raise_error(Zoom::Error)
78
+ end
79
+ end
80
+
81
+ context 'with 404 response' do
82
+ before :each do
83
+ stub_request(
84
+ :post,
85
+ zoom_url("/groups")
86
+ ).to_return(
87
+ status: 404,
88
+ body: json_response('error', 'group_not_exist'),
89
+ headers: { 'Content-Type' => 'application/json' }
90
+ )
91
+ end
92
+
93
+ it 'raises an error' do
94
+ expect { response }.to raise_error(Zoom::Error)
95
+ end
96
+ end
97
+ end
98
+ end
@@ -0,0 +1,59 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'spec_helper'
4
+
5
+ describe Zoom::Actions::Groups do
6
+ let(:zc) { zoom_client }
7
+ let(:args) { { group_id: '555' } }
8
+
9
+ describe '#group_update' do
10
+ context 'with a valid response' do
11
+ before :each do
12
+ stub_request(
13
+ :patch,
14
+ zoom_url("/groups/#{args[:group_id]}")
15
+ ).to_return(status: 204,
16
+ body: json_response('groups', 'update'),
17
+ headers: { 'Content-Type' => 'application/json' })
18
+ end
19
+
20
+ it 'requires id param' do
21
+ expect { zc.group_update(filter_key(args, :group_id)) }.to raise_error(Zoom::ParameterMissing, [:group_id].to_s)
22
+ end
23
+
24
+ it 'returns the http status code as a number' do
25
+ expect(zc.group_update(args)).to eql(204)
26
+ end
27
+ end
28
+
29
+ context 'with a 404 response' do
30
+ before :each do
31
+ stub_request(
32
+ :patch,
33
+ zoom_url("/groups/#{args[:group_id]}")
34
+ ).to_return(status: 404,
35
+ body: json_response('error', 'group_not_exist'),
36
+ headers: { 'Content-Type' => 'application/json' })
37
+ end
38
+
39
+ it 'raises an error' do
40
+ expect { zc.group_update(args) }.to raise_error(Zoom::Error)
41
+ end
42
+ end
43
+
44
+ context 'with 409 response' do
45
+ before :each do
46
+ stub_request(
47
+ :patch,
48
+ zoom_url("/groups/#{args[:group_id]}")
49
+ ).to_return(status: 409,
50
+ body: '{ "code": 409, "message": "Group name Zoom Group Name is already in use." }',
51
+ headers: { 'Content-Type' => 'application/json' })
52
+ end
53
+
54
+ it 'raises an error' do
55
+ expect { zc.group_update(args) }.to raise_error(Zoom::Error)
56
+ end
57
+ end
58
+ end
59
+ end
@@ -4,7 +4,7 @@ require 'spec_helper'
4
4
 
5
5
  describe Zoom::Actions::Meeting do
6
6
  let(:zc) { zoom_client }
7
- let(:args) { { topic: 'Zoom Meeting Topic', start_time: '2020-05-05T21:00:00Z', timezone: 'America/New_York', duration: 30, type: 2, user_id: 'r55v2FgSTVmDmVot18DX3A' } }
7
+ let(:args) { { topic: 'Zoom Meeting Topic', start_time: '2020-05-05T21:00:00Z', timezone: 'America/New_York', duration: 30, type: 2, user_id: 'r55v2FgSTVmDmVot18DX3A', template_id: 'template_id' } }
8
8
  let(:response) { zc.meeting_create(args) }
9
9
 
10
10
  describe '#meeting_create action' do
@@ -4,23 +4,49 @@ require 'spec_helper'
4
4
 
5
5
  describe Zoom::Actions::Token do
6
6
  let(:zc) { oauth_client }
7
- let(:args) { { auth_code: 'xxx', redirect_uri: 'http://localhost:3000' } }
7
+ let(:args) { { grant_type: 'authorization_code', auth_code: 'xxx', redirect_uri: 'http://localhost:3000', code_verifier: 'xxx' } }
8
+ let(:body) { { grant_type: 'authorization_code', redirect_uri: 'http://localhost:3000', code_verifier: 'xxx', code: 'xxx' } }
8
9
 
9
10
  describe '#access_tokens action' do
11
+ let(:path) { '/oauth/token' }
12
+
13
+ let(:params) do
14
+ {
15
+ base_uri: 'https://zoom.us/',
16
+ body: URI.encode_www_form(body.to_a),
17
+ headers: {
18
+ 'Accept'=>'application/json',
19
+ 'Authorization'=>'Basic eHh4Onh4eA==',
20
+ 'Content-Type'=>'application/x-www-form-urlencoded'
21
+ }
22
+ }
23
+ end
24
+
10
25
  before :each do
11
- stub_request(
12
- :post,
13
- zoom_auth_url('oauth/token')
14
- ).to_return(body: json_response('token', 'access_token'),
15
- headers: { 'Content-Type' => 'application/json' })
26
+ Zoom.configure do |config|
27
+ config.api_key = 'xxx'
28
+ config.api_secret = 'xxx'
29
+ end
30
+
31
+ allow(Zoom::Utils).to receive(:parse_response).and_return(code: 200)
32
+ allow(Zoom::Client::OAuth).to(
33
+ receive(:post).with(path, params)
34
+ .and_return(body: json_response('token', 'access_token'),
35
+ headers: { 'Content-Type' => 'application/json' })
36
+ )
16
37
  end
17
38
 
18
- it "requires an error when args missing" do
19
- expect { zc.access_tokens }.to raise_error(Zoom::ParameterMissing, [:auth_code, :redirect_uri].to_s)
39
+ it "raises an error when args missing" do
40
+ expect { zc.access_tokens }.to raise_error(Zoom::ParameterMissing, [:grant_type, :code, :redirect_uri].to_s)
20
41
  end
21
42
 
22
43
  it 'returns a hash' do
23
44
  expect(zc.access_tokens(args)).to be_kind_of(Hash)
24
45
  end
46
+
47
+ it 'passes args in the body and sends x-www-form-urlencoded header' do
48
+ zc.access_tokens(args)
49
+ expect(Zoom::Client::OAuth).to have_received(:post).with(path, params)
50
+ end
25
51
  end
26
52
  end
@@ -23,6 +23,11 @@ describe Zoom::Actions::Token do
23
23
 
24
24
  describe '#data_compliance action' do
25
25
  before :each do
26
+ Zoom.configure do |config|
27
+ config.api_key = 'xxx'
28
+ config.api_secret = 'xxx'
29
+ end
30
+
26
31
  stub_request(
27
32
  :post,
28
33
  zoom_auth_url('oauth/data/compliance')
@@ -30,7 +35,7 @@ describe Zoom::Actions::Token do
30
35
  headers: { 'Content-Type' => 'application/json' })
31
36
  end
32
37
 
33
- it "requires an error when args missing" do
38
+ it "raises an error when args missing" do
34
39
  expect { zc.data_compliance }.to raise_error(Zoom::ParameterMissing, [:client_id, :user_id, :account_id, :deauthorization_event_received, :compliance_completed].to_s)
35
40
  end
36
41
 
@@ -4,23 +4,48 @@ require 'spec_helper'
4
4
 
5
5
  describe Zoom::Actions::Token do
6
6
  let(:zc) { oauth_client }
7
- let(:args) { { refresh_token: 'xxx' } }
7
+ let(:args) { { grant_type: 'refresh_token', refresh_token: 'xxx' } }
8
8
 
9
9
  describe '#refresh_tokens action' do
10
+ let(:path) { '/oauth/token' }
11
+
12
+ let(:params) do
13
+ {
14
+ base_uri: 'https://zoom.us/',
15
+ body: URI.encode_www_form(args.to_a),
16
+ headers: {
17
+ 'Accept'=>'application/json',
18
+ 'Authorization'=>'Basic eHh4Onh4eA==',
19
+ 'Content-Type'=>'application/x-www-form-urlencoded'
20
+ }
21
+ }
22
+ end
23
+
10
24
  before :each do
11
- stub_request(
12
- :post,
13
- zoom_auth_url('oauth/token')
14
- ).to_return(body: json_response('token', 'refresh_token'),
15
- headers: { 'Content-Type' => 'application/json' })
25
+ Zoom.configure do |config|
26
+ config.api_key = 'xxx'
27
+ config.api_secret = 'xxx'
28
+ end
29
+
30
+ allow(Zoom::Utils).to receive(:parse_response).and_return(code: 200)
31
+ allow(Zoom::Client::OAuth).to(
32
+ receive(:post).with(path, params)
33
+ .and_return(body: json_response('token', 'access_token'),
34
+ headers: { 'Content-Type' => 'application/json' })
35
+ )
16
36
  end
17
37
 
18
- it "requires an error when args missing" do
19
- expect { zc.refresh_tokens }.to raise_error(Zoom::ParameterMissing, [:refresh_token].to_s)
38
+ it "raises an error when args missing" do
39
+ expect { zc.refresh_tokens }.to raise_error(Zoom::ParameterMissing, [:grant_type, :refresh_token].to_s)
20
40
  end
21
41
 
22
42
  it 'returns a hash' do
23
43
  expect(zc.refresh_tokens(args)).to be_kind_of(Hash)
24
44
  end
45
+
46
+ it 'passes args in the body and sends x-www-form-urlencoded header' do
47
+ zc.refresh_tokens(args)
48
+ expect(Zoom::Client::OAuth).to have_received(:post).with(path, params)
49
+ end
25
50
  end
26
51
  end
@@ -0,0 +1,52 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'spec_helper'
4
+
5
+ describe Zoom::Actions::Token do
6
+ let(:zc) { oauth_client }
7
+ let(:args) { { access_token: 'xxx' } }
8
+ let(:body) { { token: 'xxx' } }
9
+
10
+ describe '#revoke_tokens action' do
11
+ let(:path) { '/oauth/revoke' }
12
+
13
+ let(:params) do
14
+ {
15
+ base_uri: 'https://zoom.us/',
16
+ body: URI.encode_www_form(body.to_a),
17
+ headers: {
18
+ 'Accept'=>'application/json',
19
+ 'Authorization'=>'Basic eHh4Onh4eA==',
20
+ 'Content-Type'=>'application/x-www-form-urlencoded'
21
+ }
22
+ }
23
+ end
24
+
25
+ before :each do
26
+ Zoom.configure do |config|
27
+ config.api_key = 'xxx'
28
+ config.api_secret = 'xxx'
29
+ end
30
+
31
+ allow(Zoom::Utils).to receive(:parse_response).and_return(code: 200)
32
+ allow(Zoom::Client::OAuth).to(
33
+ receive(:post).with(path, params)
34
+ .and_return(body: json_response('token', 'access_token'),
35
+ headers: { 'Content-Type' => 'application/json' })
36
+ )
37
+ end
38
+
39
+ it "raises an error when args missing" do
40
+ expect { zc.revoke_tokens }.to raise_error(Zoom::ParameterMissing, [:token].to_s)
41
+ end
42
+
43
+ it 'returns a hash' do
44
+ expect(zc.revoke_tokens(args)).to be_kind_of(Hash)
45
+ end
46
+
47
+ it 'passes args in the body and sends x-www-form-urlencoded header' do
48
+ zc.revoke_tokens(args)
49
+ expect(Zoom::Client::OAuth).to have_received(:post).with(path, params)
50
+ end
51
+ end
52
+ end
@@ -5,12 +5,16 @@ require 'spec_helper'
5
5
  describe Zoom::Actions::User do
6
6
  let(:zc) { zoom_client }
7
7
  let(:args) do
8
- { action: 'create',
9
- email: 'foo@bar.com',
10
- first_name: 'Zoomie',
11
- last_name: 'Userton',
12
- type: 1,
13
- password: 'testerino' }
8
+ {
9
+ action: 'create',
10
+ user_info: {
11
+ email: 'foo@bar.com',
12
+ type: 1,
13
+ first_name: 'Zoomie',
14
+ last_name: 'Userton',
15
+ password: 'testerino'
16
+ }
17
+ }
14
18
  end
15
19
 
16
20
  describe '#user_create' do
@@ -28,46 +32,14 @@ describe Zoom::Actions::User do
28
32
  expect { zc.user_create(filter_key(args, :action)) }.to raise_error(Zoom::ParameterMissing, [:action].to_s)
29
33
  end
30
34
 
31
- it 'does not raise an error when action is create' do
32
- args[:action] = 'create'
33
- expect { zc.user_create(args) }.not_to raise_error
34
- end
35
-
36
- it 'does not raise an error when action is custCreate' do
37
- args[:action] = 'custCreate'
38
- expect { zc.user_create(args) }.not_to raise_error
39
- end
40
-
41
- it 'does not raise an error when action is autoCreate' do
42
- args[:action] = 'autoCreate'
43
- expect { zc.user_create(args) }.not_to raise_error
44
- end
45
-
46
- it 'does not raise an error when action is ssoCreate' do
47
- args[:action] = 'ssoCreate'
48
- expect { zc.user_create(args) }.not_to raise_error
49
- end
50
-
51
- it 'requires valid action' do
52
- args[:action] = 'baz'
53
- expect { zc.user_create(args) }.to raise_error(Zoom::ParameterValueNotPermitted, "#{:action.to_s}: #{args[:action].to_s}")
54
- end
55
-
56
35
  it 'requires email param' do
57
- expect { zc.user_create(filter_key(args, :email)) }.to raise_error(Zoom::ParameterMissing, [:email].to_s)
36
+ args[:user_info].delete(:email)
37
+ expect { zc.user_create(args) }.to raise_error(Zoom::ParameterMissing, [{user_info: [:email]}].to_s)
58
38
  end
59
39
 
60
40
  it 'requires type param' do
61
- expect { zc.user_create(filter_key(args, :type)) }.to raise_error(Zoom::ParameterMissing, [:type].to_s)
62
- end
63
-
64
- it 'does not require password param when action is not autoCreate' do
65
- expect { zc.user_create(filter_key(args, :password)) }.not_to raise_error
66
- end
67
-
68
- it 'requires password param when action is autoCreate' do
69
- args[:action] = 'autoCreate'
70
- expect { zc.user_create(filter_key(args, :password)) }.to raise_error(Zoom::ParameterMissing, [:password].to_s)
41
+ args[:user_info].delete(:type)
42
+ expect { zc.user_create(args) }.to raise_error(Zoom::ParameterMissing, [{user_info: [:type]}].to_s)
71
43
  end
72
44
 
73
45
  it 'returns a hash' do
@@ -77,10 +49,10 @@ describe Zoom::Actions::User do
77
49
  it 'returns same params' do
78
50
  res = zc.user_create(args)
79
51
 
80
- expect(res['email']).to eq(args[:email])
81
- expect(res['first_name']).to eq(args[:first_name])
82
- expect(res['last_name']).to eq(args[:last_name])
83
- expect(res['type']).to eq(args[:type])
52
+ expect(res['email']).to eq(args[:user_info][:email])
53
+ expect(res['first_name']).to eq(args[:user_info][:first_name])
54
+ expect(res['last_name']).to eq(args[:user_info][:last_name])
55
+ expect(res['type']).to eq(args[:user_info][:type])
84
56
  end
85
57
  end
86
58
 
@@ -0,0 +1,59 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'spec_helper'
4
+
5
+ describe Zoom::Actions::User do
6
+ let(:zc) { zoom_client }
7
+ let(:args) { { id: 'eIimBAXqSrWOcB_EOIXTog', email: 'new.email@example.com' } }
8
+
9
+ describe '#user_email_update' do
10
+ context 'with a valid response' do
11
+ before :each do
12
+ stub_request(
13
+ :patch,
14
+ zoom_url("/users/#{args[:id]}/email")
15
+ ).to_return(status: 204,
16
+ body: json_response('user', 'update_email'),
17
+ headers: { 'Content-Type' => 'application/json' })
18
+ end
19
+
20
+ it 'requires id param' do
21
+ expect { zc.user_email_update(filter_key(args, :id)) }.to raise_error(Zoom::ParameterMissing, [:id].to_s)
22
+ end
23
+
24
+ it 'returns the http status code as a number' do
25
+ expect(zc.user_email_update(args)).to eql(204)
26
+ end
27
+ end
28
+
29
+ context 'with a 400 response' do
30
+ before :each do
31
+ stub_request(
32
+ :patch,
33
+ zoom_url("/users/#{args[:id]}/email")
34
+ ).to_return(status: 400,
35
+ body: json_response('error', 'not_found_administrator'),
36
+ headers: { 'Content-Type' => 'application/json' })
37
+ end
38
+
39
+ it 'raises an error' do
40
+ expect { zc.user_email_update(args) }.to raise_error(Zoom::Error)
41
+ end
42
+ end
43
+
44
+ context 'with a 404 response' do
45
+ before :each do
46
+ stub_request(
47
+ :patch,
48
+ zoom_url("/users/#{args[:id]}/email")
49
+ ).to_return(status: 404,
50
+ body: json_response('error', 'user_not_exist'),
51
+ headers: { 'Content-Type' => 'application/json' })
52
+ end
53
+
54
+ it 'raises an error' do
55
+ expect { zc.user_email_update(args) }.to raise_error(Zoom::Error)
56
+ end
57
+ end
58
+ end
59
+ end