webex_xml_api 0.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 (51) hide show
  1. checksums.yaml +7 -0
  2. checksums.yaml.gz.sig +1 -0
  3. data.tar.gz.sig +1 -0
  4. data/.gitignore +12 -0
  5. data/.rspec +2 -0
  6. data/.rubocop.yml +16 -0
  7. data/.simplecov +1 -0
  8. data/.travis.yml +8 -0
  9. data/Gemfile +4 -0
  10. data/LICENSE.txt +21 -0
  11. data/README.md +94 -0
  12. data/Rakefile +7 -0
  13. data/certs/erolms.pem +21 -0
  14. data/lib/webex_xml_api.rb +11 -0
  15. data/lib/webex_xml_api/common.rb +52 -0
  16. data/lib/webex_xml_api/exceptions.rb +21 -0
  17. data/lib/webex_xml_api/meeting/create_meeting.rb +326 -0
  18. data/lib/webex_xml_api/meeting/del_meeting.rb +44 -0
  19. data/lib/webex_xml_api/meeting/get_meeting.rb +44 -0
  20. data/lib/webex_xml_api/meeting/getjoinurl_meeting.rb +45 -0
  21. data/lib/webex_xml_api/security_context.rb +43 -0
  22. data/lib/webex_xml_api/user/get_user.rb +43 -0
  23. data/lib/webex_xml_api/version.rb +3 -0
  24. data/spec/fixtures/meeting_create_meeting_request.xml +9 -0
  25. data/spec/fixtures/meeting_create_meeting_response_bad.xml +12 -0
  26. data/spec/fixtures/meeting_create_meeting_response_good.xml +12 -0
  27. data/spec/fixtures/meeting_del_meeting_request.xml +9 -0
  28. data/spec/fixtures/meeting_del_meeting_response_bad.xml +12 -0
  29. data/spec/fixtures/meeting_del_meeting_response_good.xml +12 -0
  30. data/spec/fixtures/meeting_get_meeting_request.xml +9 -0
  31. data/spec/fixtures/meeting_get_meeting_response_bad.xml +12 -0
  32. data/spec/fixtures/meeting_get_meeting_response_good.xml +12 -0
  33. data/spec/fixtures/meeting_getjoinurl_meeting_request.xml +9 -0
  34. data/spec/fixtures/meeting_getjoinurl_meeting_response_bad.xml +12 -0
  35. data/spec/fixtures/meeting_getjoinurl_meeting_response_good.xml +12 -0
  36. data/spec/fixtures/user_get_user_request.xml +9 -0
  37. data/spec/fixtures/user_get_user_response_bad.xml +12 -0
  38. data/spec/fixtures/user_get_user_response_good.xml +12 -0
  39. data/spec/spec_helper.rb +9 -0
  40. data/spec/webex_xml_api/common_spec.rb +7 -0
  41. data/spec/webex_xml_api/exceptions_spec.rb +54 -0
  42. data/spec/webex_xml_api/meeting/create_meeting_spec.rb +131 -0
  43. data/spec/webex_xml_api/meeting/del_meeting_spec.rb +85 -0
  44. data/spec/webex_xml_api/meeting/get_meeting_spec.rb +85 -0
  45. data/spec/webex_xml_api/meeting/getjoinurl_meeting_spec.rb +87 -0
  46. data/spec/webex_xml_api/security_context_spec.rb +60 -0
  47. data/spec/webex_xml_api/user/get_user_spec.rb +82 -0
  48. data/spec/webex_xml_api_spec.rb +7 -0
  49. data/webex_xml_api.gemspec +32 -0
  50. metadata +249 -0
  51. metadata.gz.sig +1 -0
@@ -0,0 +1,54 @@
1
+ require 'spec_helper'
2
+
3
+ describe WebexXmlApi::Error do
4
+ subject { described_class }
5
+
6
+ describe '#ancestors' do
7
+ subject { super().ancestors }
8
+ it { is_expected.to include(StandardError) }
9
+ end
10
+
11
+ describe 'raises an error' do
12
+ it 'with message' do
13
+ expect { raise WebexXmlApi::Error, 'this message exactly' }
14
+ .to raise_error('this message exactly')
15
+ end
16
+ end
17
+
18
+ describe WebexXmlApi::NotEnoughArguments do
19
+ describe '#ancestors' do
20
+ subject { super().ancestors }
21
+ it { is_expected.to include(WebexXmlApi::Error) }
22
+ end
23
+
24
+ describe 'raises an error' do
25
+ it 'with message' do
26
+ expect { raise WebexXmlApi::NotEnoughArguments, 'this message exactly' }
27
+ .to raise_error('this message exactly')
28
+ end
29
+ end
30
+ end
31
+
32
+ describe WebexXmlApi::RequestFailed do
33
+ describe '#ancestors' do
34
+ subject { super().ancestors }
35
+ it { is_expected.to include(WebexXmlApi::Error) }
36
+ end
37
+
38
+ describe 'raises an error' do
39
+ before(:each) do
40
+ @resp = {}
41
+ @resp[:code] = '999'
42
+ @resp[:text] = 'Error text'
43
+ end
44
+
45
+ it 'returns a response object and error message' do
46
+ expect { raise WebexXmlApi::RequestFailed.new(@resp), 'this message' }
47
+ .to raise_error { |error|
48
+ expect(error.message).to eql('this message')
49
+ expect(error.response).to eql(@resp)
50
+ }
51
+ end
52
+ end
53
+ end
54
+ end
@@ -0,0 +1,131 @@
1
+ require 'spec_helper'
2
+
3
+ describe WebexXmlApi::Meeting::CreateMeeting do
4
+ subject { described_class }
5
+
6
+ describe '#initialize' do
7
+ it 'creates new security_context' do
8
+ sm = subject.new(site_name: 'test')
9
+ expect(sm.security_context).to be
10
+ end
11
+ end
12
+
13
+ describe '#to_xml' do
14
+ it 'raises a NotEnoughArguments exception if arguments missing' do
15
+ sm = subject.new(site_name: 'test')
16
+ expect { sm.to_xml }
17
+ .to raise_error(WebexXmlApi::NotEnoughArguments,
18
+ 'Meeting::CreateMeeting')
19
+ end
20
+
21
+ it 'returns formatted XML text' do
22
+ expected = file_fixture('meeting_create_meeting_request.xml')
23
+ sm = subject.new(site_name: 'test', webex_id: '123456', password: 'test')
24
+ sm.conf_name = 'Test-Meeting via XML API'
25
+ sm.start_date = '07/30/2016 15:00:00'
26
+ sm.duration = '60'
27
+ expect(sm.to_xml).to eql(expected)
28
+ end
29
+ end
30
+
31
+ describe '#valid?' do
32
+ it 'fails if required fields are missing' do
33
+ sm = subject.new
34
+ expect(sm.valid?).to be_falsey
35
+ end
36
+
37
+ it 'succeeds if all required parameters are set' do
38
+ sm = subject.new
39
+ sm.conf_name = 'Test-Meeting via XML API'
40
+ sm.start_date = '07/30/2016 15:00:00'
41
+ sm.duration = '60'
42
+ expect(sm.valid?).to be_truthy
43
+ end
44
+ end
45
+
46
+ describe '#send_request' do
47
+ it 'raises a NotEnoughArguments exception for CreateMeeting' do
48
+ sm = subject.new(site_name: 'test')
49
+ expect { sm.send_request }
50
+ .to raise_error(WebexXmlApi::NotEnoughArguments,
51
+ 'Meeting::CreateMeeting')
52
+ end
53
+
54
+ it 'raises a NotEnoughArguments exception for SecurityContext' do
55
+ sm = subject.new(site_name: 'test')
56
+ sm.conf_name = 'Test-Meeting via XML API'
57
+ sm.start_date = '07/30/2016 15:00:00'
58
+ sm.duration = '60'
59
+ expect { sm.send_request }
60
+ .to raise_error(WebexXmlApi::NotEnoughArguments, 'SecurityContext')
61
+ end
62
+
63
+ it 'raises a RequestFailed exception with error message' do
64
+ sm = subject.new(site_name: 'test', webex_id: 'test', password: 'test')
65
+ sm.conf_name = 'Test-Meeting via XML API'
66
+ sm.start_date = '07/30/2016 15:00:00'
67
+ sm.duration = '60'
68
+ bad_reply = file_fixture('meeting_create_meeting_response_bad.xml')
69
+ stub_request(:post, 'https://test.webex.com/WBXService/XMLService')
70
+ .to_return(bad_reply)
71
+ expect { sm.send_request }
72
+ .to raise_error { |error|
73
+ expect(error.message)
74
+ .to eql('Error 060026: Meeting password must not be null')
75
+ }
76
+ end
77
+
78
+ it 'returns Response bodyContent as hash' do
79
+ sm = subject.new(site_name: 'test', webex_id: 'test', password: 'test')
80
+ sm.conf_name = 'Test-Meeting via XML API'
81
+ sm.start_date = '07/30/2016 15:00:00'
82
+ sm.duration = '60'
83
+ good_reply = file_fixture('meeting_create_meeting_response_good.xml')
84
+ stub_request(:post, 'https://test.webex.com/WBXService/XMLService')
85
+ .to_return(good_reply)
86
+ ret = sm.send_request
87
+ expect(ret).to be
88
+ expect(ret.key?('iCalendarURL')).to be_truthy
89
+ expect(ret['meetingkey']).to eql('123456789')
90
+ end
91
+ end
92
+
93
+ describe '#getters_and_setters' do
94
+ it 'sets and reads instance variables' do
95
+ sm = subject.new
96
+ expect(sm.conf_name = 'tst').to eql(sm.conf_name)
97
+ expect(sm.agenda = 'tst').to eql(sm.agenda)
98
+ expect(sm.meeting_password = 'tst').to eql(sm.meeting_password)
99
+ expect(sm.start_date = 'tst').to eql(sm.start_date)
100
+ expect(sm.duration = 'tst').to eql(sm.duration)
101
+ expect(sm.open_time = 'tst').to eql(sm.open_time)
102
+ expect(sm.join_teleconf_before_host = 'tst')
103
+ .to eql(sm.join_teleconf_before_host)
104
+ expect(sm.first_attendee_as_presenter = 'tst')
105
+ .to eql(sm.first_attendee_as_presenter)
106
+ expect(sm.telephony_support = 'tst').to eql(sm.telephony_support)
107
+ expect(sm.intl_local_call_in = 'tst').to eql(sm.intl_local_call_in)
108
+ expect(sm.teleconf_location = 'tst').to eql(sm.teleconf_location)
109
+ expect(sm.is_mp_audio = 'tst').to eql(sm.is_mp_audio)
110
+ expect(sm.enable_chat = 'tst').to eql(sm.enable_chat)
111
+ expect(sm.enable_audio_video = 'tst').to eql(sm.enable_audio_video)
112
+ end
113
+ end
114
+
115
+ describe '#start_date' do
116
+ it 'converts DateTime to formatted string' do
117
+ sm = subject.new
118
+ expected = '07/29/2016 16:00:00'
119
+ input = DateTime.new(2016, 7, 29, 16, 0, 0)
120
+ sm.start_date = input
121
+ expect(sm.start_date).to eql(expected)
122
+ end
123
+
124
+ it 'passes string without conversion' do
125
+ sm = subject.new
126
+ expected = '07/29/2016 16:59:59'
127
+ sm.start_date = expected
128
+ expect(sm.start_date).to eql(expected)
129
+ end
130
+ end
131
+ end
@@ -0,0 +1,85 @@
1
+ require 'spec_helper'
2
+
3
+ describe WebexXmlApi::Meeting::DelMeeting do
4
+ subject { described_class }
5
+
6
+ describe '#initialize' do
7
+ it 'creates attr_accessors and sets variables' do
8
+ dm = subject.new(site_name: 'test', meeting_key: '123456789')
9
+ expect(dm.meeting_key).to eql('123456789')
10
+ expect(dm.security_context).to be
11
+ end
12
+
13
+ it 'ignores invalid parameters' do
14
+ dm = subject.new(meeting_key: '123456789', invalid_param: 'test')
15
+ expect(dm.meeting_key).to eql('123456789')
16
+ expect(dm).not_to respond_to(:invalid_param)
17
+ end
18
+ end
19
+
20
+ describe '#to_xml' do
21
+ it 'raises a NotEnoughArguments exception if arguments missing' do
22
+ dm = subject.new(site_name: 'test')
23
+ expect { dm.to_xml }
24
+ .to raise_error(WebexXmlApi::NotEnoughArguments, 'Meeting::DelMeeting')
25
+ end
26
+
27
+ it 'returns formatted XML text' do
28
+ expected = file_fixture('meeting_del_meeting_request.xml')
29
+ dm = subject.new(site_name: 'test', webex_id: '123456', password: 'test',
30
+ meeting_key: '123456789')
31
+ expect(dm.to_xml).to eql(expected)
32
+ end
33
+ end
34
+
35
+ describe '#valid?' do
36
+ it 'fails if meeting_key is missing' do
37
+ dm = subject.new
38
+ expect(dm.valid?).to be_falsey
39
+ end
40
+
41
+ it 'succeeds if all required parameters are set' do
42
+ dm = subject.new(meeting_key: '123456789')
43
+ expect(dm.valid?).to be_truthy
44
+ end
45
+ end
46
+
47
+ describe '#send_request' do
48
+ it 'raises a NotEnoughArguments exception for DelMeeting' do
49
+ dm = subject.new(site_name: 'test')
50
+ expect { dm.send_request }
51
+ .to raise_error(WebexXmlApi::NotEnoughArguments, 'Meeting::DelMeeting')
52
+ end
53
+
54
+ it 'raises a NotEnoughArguments exception for SecurityContext' do
55
+ dm = subject.new(site_name: 'test', meeting_key: '123456789')
56
+ expect { dm.send_request }
57
+ .to raise_error(WebexXmlApi::NotEnoughArguments, 'SecurityContext')
58
+ end
59
+
60
+ it 'raises a RequestFailed exception with error message' do
61
+ dm = subject.new(site_name: 'test', webex_id: 'test', password: 'test',
62
+ meeting_key: '987654321')
63
+ bad_reply = file_fixture('meeting_del_meeting_response_bad.xml')
64
+ stub_request(:post, 'https://test.webex.com/WBXService/XMLService')
65
+ .to_return(bad_reply)
66
+ expect { dm.send_request }
67
+ .to raise_error { |error|
68
+ expect(error.message)
69
+ .to eql('Error 060001: Corresponding Meeting not found')
70
+ }
71
+ end
72
+
73
+ it 'returns Response bodyContent as hash' do
74
+ dm = subject.new(site_name: 'test', webex_id: 'test', password: 'test',
75
+ meeting_key: '123456789')
76
+ good_reply = file_fixture('meeting_del_meeting_response_good.xml')
77
+ stub_request(:post, 'https://test.webex.com/WBXService/XMLService')
78
+ .to_return(good_reply)
79
+ ret = dm.send_request
80
+ expect(ret).to be
81
+ expect(ret.key?('iCalendarURL')).to be_truthy
82
+ expect(ret['iCalendarURL'].key?('host')).to be_truthy
83
+ end
84
+ end
85
+ end
@@ -0,0 +1,85 @@
1
+ require 'spec_helper'
2
+
3
+ describe WebexXmlApi::Meeting::GetMeeting do
4
+ subject { described_class }
5
+
6
+ describe '#initialize' do
7
+ it 'creates attr_accessors and sets variables' do
8
+ gm = subject.new(site_name: 'test', meeting_key: '123456789')
9
+ expect(gm.meeting_key).to eql('123456789')
10
+ expect(gm.security_context).to be
11
+ end
12
+
13
+ it 'ignores invalid parameters' do
14
+ gm = subject.new(meeting_key: '123456789', invalid_param: 'test')
15
+ expect(gm.meeting_key).to eql('123456789')
16
+ expect(gm).not_to respond_to(:invalid_param)
17
+ end
18
+ end
19
+
20
+ describe '#to_xml' do
21
+ it 'raises a NotEnoughArguments exception if arguments missing' do
22
+ gm = subject.new(site_name: 'test')
23
+ expect { gm.to_xml }
24
+ .to raise_error(WebexXmlApi::NotEnoughArguments, 'Meeting::GetMeeting')
25
+ end
26
+
27
+ it 'returns formatted XML text' do
28
+ expected = file_fixture('meeting_get_meeting_request.xml')
29
+ gm = subject.new(site_name: 'test', webex_id: '123456', password: 'test',
30
+ meeting_key: '123456789')
31
+ expect(gm.to_xml).to eql(expected)
32
+ end
33
+ end
34
+
35
+ describe '#valid?' do
36
+ it 'fails if meeting_key is missing' do
37
+ gm = subject.new
38
+ expect(gm.valid?).to be_falsey
39
+ end
40
+
41
+ it 'succeeds if all required parameters are set' do
42
+ gm = subject.new(meeting_key: '123456789')
43
+ expect(gm.valid?).to be_truthy
44
+ end
45
+ end
46
+
47
+ describe '#send_request' do
48
+ it 'raises a NotEnoughArguments exception for GetMeeting' do
49
+ gm = subject.new(site_name: 'test')
50
+ expect { gm.send_request }
51
+ .to raise_error(WebexXmlApi::NotEnoughArguments, 'Meeting::GetMeeting')
52
+ end
53
+
54
+ it 'raises a NotEnoughArguments exception for SecurityContext' do
55
+ gm = subject.new(site_name: 'test', meeting_key: '123456789')
56
+ expect { gm.send_request }
57
+ .to raise_error(WebexXmlApi::NotEnoughArguments, 'SecurityContext')
58
+ end
59
+
60
+ it 'raises a RequestFailed exception with error message' do
61
+ gm = subject.new(site_name: 'test', webex_id: 'test', password: 'test',
62
+ meeting_key: '987654321')
63
+ bad_reply = file_fixture('meeting_get_meeting_response_bad.xml')
64
+ stub_request(:post, 'https://test.webex.com/WBXService/XMLService')
65
+ .to_return(bad_reply)
66
+ expect { gm.send_request }
67
+ .to raise_error { |error|
68
+ expect(error.message)
69
+ .to eql('Error 060001: Corresponding Meeting not found')
70
+ }
71
+ end
72
+
73
+ it 'returns Response bodyContent as hash' do
74
+ gm = subject.new(site_name: 'test', webex_id: 'test', password: 'test',
75
+ meeting_key: '123456789')
76
+ good_reply = file_fixture('meeting_get_meeting_response_good.xml')
77
+ stub_request(:post, 'https://test.webex.com/WBXService/XMLService')
78
+ .to_return(good_reply)
79
+ ret = gm.send_request
80
+ expect(ret).to be
81
+ expect(ret.key?('meetingkey')).to be_truthy
82
+ expect(ret['hostKey']).to eql('123456')
83
+ end
84
+ end
85
+ end
@@ -0,0 +1,87 @@
1
+ require 'spec_helper'
2
+
3
+ describe WebexXmlApi::Meeting::GetjoinurlMeeting do
4
+ subject { described_class }
5
+
6
+ describe '#initialize' do
7
+ it 'creates attr_accessors and sets variables' do
8
+ gjum = subject.new(site_name: 'test', session_key: '123456789')
9
+ expect(gjum.session_key).to eql('123456789')
10
+ expect(gjum.security_context).to be
11
+ end
12
+
13
+ it 'ignores invalid parameters' do
14
+ gjum = subject.new(session_key: '123456789', invalid_param: 'test')
15
+ expect(gjum.session_key).to eql('123456789')
16
+ expect(gjum).not_to respond_to(:invalid_param)
17
+ end
18
+ end
19
+
20
+ describe '#to_xml' do
21
+ it 'raises a NotEnoughArguments exception if arguments missing' do
22
+ gjum = subject.new(site_name: 'test')
23
+ expect { gjum.to_xml }
24
+ .to raise_error(WebexXmlApi::NotEnoughArguments,
25
+ 'Meeting::GetjoinurlMeeting')
26
+ end
27
+
28
+ it 'returns formatted XML text' do
29
+ expected = file_fixture('meeting_getjoinurl_meeting_request.xml')
30
+ gjum = subject.new(site_name: 'test', webex_id: '123456',
31
+ password: 'test', session_key: '123456789')
32
+ expect(gjum.to_xml).to eql(expected)
33
+ end
34
+ end
35
+
36
+ describe '#valid?' do
37
+ it 'fails if session_key is missing' do
38
+ gjum = subject.new
39
+ expect(gjum.valid?).to be_falsey
40
+ end
41
+
42
+ it 'succeeds if all required parameters are set' do
43
+ gjum = subject.new(session_key: '123456789')
44
+ expect(gjum.valid?).to be_truthy
45
+ end
46
+ end
47
+
48
+ describe '#send_request' do
49
+ it 'raises a NotEnoughArguments exception for GetjoinurlMeeting' do
50
+ gjum = subject.new(site_name: 'test')
51
+ expect { gjum.send_request }
52
+ .to raise_error(WebexXmlApi::NotEnoughArguments,
53
+ 'Meeting::GetjoinurlMeeting')
54
+ end
55
+
56
+ it 'raises a NotEnoughArguments exception for SecurityContext' do
57
+ gjum = subject.new(site_name: 'test', session_key: '123456789')
58
+ expect { gjum.send_request }
59
+ .to raise_error(WebexXmlApi::NotEnoughArguments, 'SecurityContext')
60
+ end
61
+
62
+ it 'raises a RequestFailed exception with error message' do
63
+ gjum = subject.new(site_name: 'test', webex_id: 'test', password: 'test',
64
+ session_key: '987654321')
65
+ bad_reply = file_fixture('meeting_getjoinurl_meeting_response_bad.xml')
66
+ stub_request(:post, 'https://test.webex.com/WBXService/XMLService')
67
+ .to_return(bad_reply)
68
+ expect { gjum.send_request }
69
+ .to raise_error { |error|
70
+ expect(error.message)
71
+ .to eql('Error 060001: Corresponding Meeting not found')
72
+ }
73
+ end
74
+
75
+ it 'returns Response bodyContent as hash' do
76
+ gjum = subject.new(site_name: 'test', webex_id: 'test', password: 'test',
77
+ session_key: '123456789')
78
+ good_reply = file_fixture('meeting_getjoinurl_meeting_response_good.xml')
79
+ stub_request(:post, 'https://test.webex.com/WBXService/XMLService')
80
+ .to_return(good_reply)
81
+ ret = gjum.send_request
82
+ expect(ret).to be
83
+ expect(ret.key?('joinMeetingURL')).to be_truthy
84
+ expect(ret.key?('inviteMeetingURL')).to be_truthy
85
+ end
86
+ end
87
+ end
@@ -0,0 +1,60 @@
1
+ require 'spec_helper'
2
+
3
+ describe WebexXmlApi::SecurityContext do
4
+ subject { described_class }
5
+
6
+ describe '#initialize' do
7
+ it 'creates attr_accessors and sets variables' do
8
+ sc = subject.new(site_name: 'test', site_id: '123456')
9
+ expect(sc.site_name).to eql('test')
10
+ expect(sc.site_id).to eql('123456')
11
+ expect(sc.email).to be_nil
12
+ end
13
+
14
+ it 'ignores invalid parameters' do
15
+ sc = subject.new(site_name: 'test', invalid_param: 'test')
16
+ expect(sc.site_name).to eql('test')
17
+ expect(sc).not_to respond_to(:invalid_param)
18
+ end
19
+ end
20
+
21
+ describe '#to_xml' do
22
+ it 'raises a NotEnoughArguments exception if arguments missing' do
23
+ sc = subject.new(site_name: 'test')
24
+ expect { sc.to_xml }
25
+ .to raise_error(WebexXmlApi::NotEnoughArguments, 'SecurityContext')
26
+ end
27
+
28
+ it 'returns formatted XML text' do
29
+ expected = "<header>\n <securityContext>\n"
30
+ expected += " <webExID>test</webExID>\n"
31
+ expected += " <password>test</password>\n"
32
+ expected += " <siteName>test</siteName>\n"
33
+ expected += " </securityContext>\n</header>\n"
34
+ sc = subject.new(site_name: 'test', webex_id: 'test', password: 'test')
35
+ expect(sc.to_xml).to eql(expected)
36
+ end
37
+ end
38
+
39
+ describe '#valid?' do
40
+ it 'fails if site_name is missing' do
41
+ sc = subject.new(webex_id: 'test', password: 'test')
42
+ expect(sc.valid?).to be_falsey
43
+ end
44
+
45
+ it 'fails if webex_id is missing' do
46
+ sc = subject.new(site_name: 'test', session_ticket: 'test')
47
+ expect(sc.valid?).to be_falsey
48
+ end
49
+
50
+ it 'fails if password or session_ticket are missing' do
51
+ sc = subject.new(site_name: 'test', webex_id: 'test')
52
+ expect(sc.valid?).to be_falsey
53
+ end
54
+
55
+ it 'succeeds if all required parameters are set' do
56
+ sc = subject.new(site_name: 'test', webex_id: 'test', password: 'test')
57
+ expect(sc.valid?).to be_truthy
58
+ end
59
+ end
60
+ end