clickmeetings 0.1.3.1 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (84) hide show
  1. checksums.yaml +5 -5
  2. data/.github/workflows/run-tests.yml +26 -0
  3. data/.gitignore +1 -0
  4. data/README.md +305 -7
  5. data/clickmeetings.gemspec +24 -19
  6. data/lib/clickmeetings/client.rb +8 -9
  7. data/lib/clickmeetings/config.rb +2 -1
  8. data/lib/clickmeetings/engine.rb +0 -1
  9. data/lib/clickmeetings/model.rb +36 -22
  10. data/lib/clickmeetings/models/open/chat.rb +19 -0
  11. data/lib/clickmeetings/models/open/concerns/with_conference.rb +35 -0
  12. data/lib/clickmeetings/models/open/concerns/with_locale.rb +20 -0
  13. data/lib/clickmeetings/models/open/conference.rb +72 -0
  14. data/lib/clickmeetings/models/open/contact.rb +14 -0
  15. data/lib/clickmeetings/models/open/file_library.rb +43 -0
  16. data/lib/clickmeetings/models/open/invitation.rb +30 -0
  17. data/lib/clickmeetings/models/open/login_hash.rb +50 -0
  18. data/lib/clickmeetings/models/open/model.rb +38 -0
  19. data/lib/clickmeetings/models/open/phone_gateway.rb +9 -0
  20. data/lib/clickmeetings/models/open/recording.rb +22 -0
  21. data/lib/clickmeetings/models/open/registration.rb +20 -0
  22. data/lib/clickmeetings/models/open/session.rb +56 -0
  23. data/lib/clickmeetings/models/open/time_zone.rb +15 -0
  24. data/lib/clickmeetings/models/open/token.rb +35 -0
  25. data/lib/clickmeetings/models/privatelabel/account.rb +3 -1
  26. data/lib/clickmeetings/models/privatelabel/conference.rb +20 -11
  27. data/lib/clickmeetings/models/privatelabel/model.rb +5 -4
  28. data/lib/clickmeetings/models/privatelabel/profile.rb +2 -2
  29. data/lib/clickmeetings/storage.rb +10 -0
  30. data/lib/clickmeetings/version.rb +1 -1
  31. data/lib/clickmeetings.rb +6 -8
  32. data/spec/clickmeetings_spec.rb +46 -0
  33. data/spec/client_spec.rb +26 -4
  34. data/spec/fixtures/delete_conferences_1_recordings.json +3 -0
  35. data/spec/fixtures/get_chats_1.zip +0 -0
  36. data/spec/fixtures/get_conferences.json +48 -0
  37. data/spec/fixtures/get_conferences_1.json +45 -0
  38. data/spec/fixtures/get_conferences_1_recordings.json +10 -0
  39. data/spec/fixtures/get_conferences_1_registrations.json +42 -0
  40. data/spec/fixtures/get_conferences_1_sessions.json +16 -0
  41. data/spec/fixtures/get_conferences_1_sessions_1.json +54 -0
  42. data/spec/fixtures/get_conferences_1_sessions_1_attendees.json +38 -0
  43. data/spec/fixtures/get_conferences_1_sessions_1_generate-pdf_en.json +4 -0
  44. data/spec/fixtures/get_conferences_1_sessions_1_generate-pdf_pl.json +5 -0
  45. data/spec/fixtures/get_conferences_1_sessions_1_generate-pdf_ru.json +4 -0
  46. data/spec/fixtures/get_conferences_1_sessions_1_registrations.json +42 -0
  47. data/spec/fixtures/get_conferences_1_tokens.json +254 -0
  48. data/spec/fixtures/get_conferences_2.json +45 -0
  49. data/spec/fixtures/get_conferences_active.json +1 -0
  50. data/spec/fixtures/get_conferences_inactive.json +1 -0
  51. data/spec/fixtures/get_conferences_skins.json +57 -0
  52. data/spec/fixtures/get_file-library_conferences_1.json +13 -0
  53. data/spec/fixtures/get_time_zone_list.json +422 -0
  54. data/spec/fixtures/get_time_zone_list_ru.json +26 -0
  55. data/spec/fixtures/post_conferences_1_invitation_email_en.json +1 -0
  56. data/spec/fixtures/post_conferences_1_invitation_email_ru.json +1 -0
  57. data/spec/fixtures/post_conferences_1_registration.json +6 -0
  58. data/spec/fixtures/post_conferences_1_room_autologin_hash.json +3 -0
  59. data/spec/fixtures/post_conferences_1_tokens.json +14 -0
  60. data/spec/fixtures/post_conferences_2_invitation_email_en.json +1 -0
  61. data/spec/fixtures/post_contacts.json +3 -0
  62. data/spec/fixtures/post_file-library.json +10 -0
  63. data/spec/fixtures/presentation.pdf +0 -0
  64. data/spec/helpers/fixtures_helpers.rb +1 -1
  65. data/spec/models/open/chat_spec.rb +25 -0
  66. data/spec/models/open/concerns/with_conference_spec.rb +55 -0
  67. data/spec/models/open/concerns/with_locale_spec.rb +23 -0
  68. data/spec/models/open/conference_spec.rb +132 -0
  69. data/spec/models/open/contact_spec.rb +17 -0
  70. data/spec/models/open/file_spec.rb +46 -0
  71. data/spec/models/open/invitation_spec.rb +43 -0
  72. data/spec/models/open/login_hash_spec.rb +59 -0
  73. data/spec/models/open/model_spec.rb +55 -0
  74. data/spec/models/open/recording_spec.rb +21 -0
  75. data/spec/models/open/registration_spec.rb +25 -0
  76. data/spec/models/open/session_spec.rb +73 -0
  77. data/spec/models/open/time_zone_spec.rb +27 -0
  78. data/spec/models/open/token_spec.rb +54 -0
  79. data/spec/models/privatelabel/conference_spec.rb +25 -7
  80. data/spec/shared_examples/tokens_examples.rb +6 -0
  81. data/spec/spec_helper.rb +7 -0
  82. metadata +187 -49
  83. data/.travis.yml +0 -5
  84. data/lib/clickmeetings/models/open_api/.keep +0 -0
@@ -0,0 +1,23 @@
1
+ require "spec_helper"
2
+
3
+ describe 'WithLocale' do
4
+ before(:all) do
5
+ class TestClassWithLocale < Clickmeetings::Open::Model
6
+ include Clickmeetings::Open::WithLocale
7
+ end
8
+ end
9
+
10
+ let(:described_class) { TestClassWithLocale }
11
+
12
+ describe '::with_locale' do
13
+ subject { described_class.with_locale("ru") { described_class.locale } }
14
+
15
+ it "uses specified locale in block" do
16
+ expect(subject).to eq("ru")
17
+ end
18
+
19
+ it "uses default locale out of block" do
20
+ expect(described_class.locale).to eq(:en)
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,132 @@
1
+ require "spec_helper"
2
+
3
+ describe Clickmeetings::Open::Conference do
4
+ describe '::all' do
5
+ subject { described_class.all }
6
+
7
+ before do
8
+ mock_api(:get, 'conferences/active', open: true)
9
+ mock_api(:get, 'conferences/inactive', open: true)
10
+ end
11
+
12
+ it "responds with array of conferences", :aggregate_failures do
13
+ expect(subject).to be_an_instance_of(Array)
14
+ expect(subject.first).to be_an_instance_of(described_class)
15
+ end
16
+ end
17
+
18
+ %w(active inactive).each do |m|
19
+ describe "::#{m}" do
20
+ subject { described_class.send m }
21
+
22
+ before { mock_api(:get, "conferences/#{m}", open: true) }
23
+
24
+ it "responds with array of conferences", :aggregate_failures do
25
+ expect(subject).to be_an_instance_of(Array)
26
+ expect(subject.first).to be_an_instance_of(described_class)
27
+ end
28
+ end
29
+ end
30
+
31
+ describe '::skins' do
32
+ before { mock_api(:get, 'conferences/skins', open: true) }
33
+
34
+ subject { described_class.skins }
35
+
36
+ it "responds with array of hashes", :aggregate_failures do
37
+ expect(subject).to be_an_instance_of(Array)
38
+ expect(subject.first).to be_an_instance_of(Hash)
39
+ end
40
+ end
41
+
42
+ describe '#tokens' do
43
+ before { mock_api(:get, 'conferences/1/tokens', open: true) }
44
+
45
+ subject { described_class.new(id: 1).tokens }
46
+
47
+ it_behaves_like 'tokens list'
48
+ end
49
+
50
+ %w(sessions registrations recordings).each do |m|
51
+ context "##{m}" do
52
+ before { mock_api :get, "conferences/1/#{m}", open: true }
53
+
54
+ subject { described_class.new(id: 1).send m }
55
+
56
+ it "responds with an array of #{m}" do
57
+ klass = "Clickmeetings::Open::#{m.singularize.capitalize}".constantize
58
+ expect(subject).to be_an_instance_of(Array)
59
+ expect(subject.first).to be_an_instance_of(klass)
60
+ end
61
+
62
+ it "response has conference_id" do
63
+ expect(subject.first.conference_id).to eq(1)
64
+ end
65
+ end
66
+ end
67
+
68
+ context 'files' do
69
+ before { mock_api :get, "file-library/conferences/1", open: true }
70
+
71
+ subject { described_class.new(id: 1).files }
72
+
73
+ it "responds with an array of files" do
74
+ expect(subject).to be_an_instance_of(Array)
75
+ expect(subject.first).to be_an_instance_of Clickmeetings::Open::FileLibrary
76
+ end
77
+ end
78
+
79
+ describe '#create_tokens' do
80
+ before { mock_api(:post, 'conferences/1/tokens', open: true) }
81
+
82
+ subject { described_class.new(id: 1).create_tokens 2 }
83
+
84
+ it_behaves_like 'tokens list'
85
+
86
+ it "response has conference_id" do
87
+ expect(subject.first.conference_id).to eq(1)
88
+ end
89
+ end
90
+
91
+ describe '#create_hash' do
92
+ before do
93
+ mock_api :get, 'conferences/1', open: true
94
+ mock_api :post, 'conferences/1/room/autologin_hash', open: true
95
+ end
96
+
97
+ subject do
98
+ described_class.new(id: 1).create_hash(
99
+ nickname: 'qwe',
100
+ email: 'qwe',
101
+ role: 'listener',
102
+ token: 'qweqwe'
103
+ )
104
+ end
105
+
106
+ it "responds with LoginHash object" do
107
+ expect(subject).to be_an_instance_of(Clickmeetings::Open::LoginHash)
108
+ expect(subject.conference_id).to eq(1)
109
+ end
110
+ end
111
+
112
+ describe '#send_invites' do
113
+ before { mock_api(:post, 'conferences/1/invitation/email/en', open: true) }
114
+ subject { described_class.new(id: 1).send_invites(attendees: [{email: "q@q.qq"}], role: "listener") }
115
+
116
+ it "responds with Invitation object" do
117
+ expect(subject).to be_an_instance_of(Clickmeetings::Open::Invitation)
118
+ expect(subject.conference_id).to eq 1
119
+ end
120
+ end
121
+
122
+ describe '#register' do
123
+ before { mock_api :post, "conferences/1/registration", open: true }
124
+
125
+ let(:params) { {registration: {1 => "qwer", 2 => 'qwer', 3 => 'qwer@qwer.qw'}} }
126
+ subject { described_class.new(id: 1).register(params) }
127
+
128
+ it "responds with hash" do
129
+ expect(subject).to be_an_instance_of(Hash)
130
+ end
131
+ end
132
+ end
@@ -0,0 +1,17 @@
1
+ require "spec_helper"
2
+
3
+ describe Clickmeetings::Open::Contact do
4
+ describe '::create' do
5
+ before { mock_api :post, 'contacts', open: true }
6
+
7
+ let(:params) { {email: "q@q.qq", firstname: 'q', lastname: 'Q'} }
8
+ subject { described_class.create(params) }
9
+
10
+ it "responds with a Contact object", :aggregate_failures do
11
+ expect(subject).to be_an_instance_of(described_class)
12
+ expect(subject.email).to eq('q@q.qq')
13
+ expect(subject.firstname).to eq('q')
14
+ expect(subject.lastname).to eq('Q')
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,46 @@
1
+ require "spec_helper"
2
+
3
+ describe Clickmeetings::Open::FileLibrary do
4
+ describe '::create' do
5
+ before { mock_api :post, 'file-library', open: true }
6
+
7
+ subject { described_class.create(path: 'spec/fixtures/presentation.pdf') }
8
+
9
+ it "responds with FileLibrary object" do
10
+ expect(subject).to be_an_instance_of(described_class)
11
+ end
12
+ end
13
+
14
+ describe '::for_conference' do
15
+ before { mock_api :get, 'file-library/conferences/1', open: true }
16
+
17
+ subject { described_class.for_conference(conference_id: 1) }
18
+
19
+ it "responds with an array of files" do
20
+ expect(subject).to be_an_instance_of(Array)
21
+ expect(subject.first).to be_an_instance_of(described_class)
22
+ end
23
+ end
24
+
25
+ describe '#download' do
26
+ before do
27
+ stub_request(:get, 'https://api.clickmeeting.com/v1/file-library/1/download')
28
+ .to_return(status: 200,
29
+ body: File.read('spec/fixtures/presentation.pdf'),
30
+ headers: {
31
+ "Content-Type"=>"application/octet-stream",
32
+ "Content-Length"=>"357552",
33
+ "Connection"=>"close",
34
+ "Pragma"=>"public",
35
+ "Content-Disposition"=>"attachment; filename=\"pdf.pdf\"",
36
+ "Content-Transfer-Encoding"=>"binary"
37
+ })
38
+ end
39
+
40
+ subject { described_class.new(id: 1).download }
41
+
42
+ it "responds with file content" do
43
+ expect(subject).to eq File.read('spec/fixtures/presentation.pdf')
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,43 @@
1
+ require "spec_helper"
2
+
3
+ describe Clickmeetings::Open::Invitation do
4
+ describe '::send_emails' do
5
+ let(:params) { {attendees: [{email: "qwer@qwer.qw"}], role: "listener"} }
6
+ let(:additional_params) { {} }
7
+ subject do
8
+ described_class.by_conference(conference_id: 1).send_emails(params.merge additional_params)
9
+ end
10
+
11
+ context 'without additional params' do
12
+ before { mock_api(:post, 'conferences/1/invitation/email/en', open: true) }
13
+
14
+ it "returns Invitation", :aggregate_failures do
15
+ expect(subject).to be_an_instance_of(described_class)
16
+ expect(subject.attendees).to be_an_instance_of(Array)
17
+ expect(subject.attendees.first).to be_an_instance_of(Hash)
18
+ expect(subject.attendees.first[:email]).to eq("qwer@qwer.qw")
19
+ expect(subject.role).to eq("listener")
20
+ end
21
+ end
22
+
23
+ context 'when params include lang' do
24
+ let(:additional_params) { {lang: :ru} }
25
+
26
+ before { mock_api(:post, 'conferences/1/invitation/email/ru', open: true) }
27
+
28
+ it "uses lang from params" do
29
+ expect(subject).to be_an_instance_of(described_class)
30
+ end
31
+ end
32
+
33
+ context 'when params include conference_id' do
34
+ let(:additional_params) { {conference_id: 2} }
35
+
36
+ before { mock_api(:post, 'conferences/2/invitation/email/en', open: true) }
37
+
38
+ it "uses conference_id from params" do
39
+ expect(subject).to be_an_instance_of(described_class)
40
+ end
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,59 @@
1
+ require "spec_helper"
2
+
3
+ describe Clickmeetings::Open::LoginHash do
4
+ describe '::create' do
5
+ let(:params) do
6
+ {
7
+ conference_id: 1, nickname: 'makar', email: 'qwer@qwer.qw',
8
+ token: Clickmeetings::Open::Token.new(token: "QWEQWE"),
9
+ role: 'listener'
10
+ }
11
+ end
12
+
13
+ before do
14
+ mock_api(:get, 'conferences/1', open: true)
15
+ mock_api(:post, 'conferences/1/room/autologin_hash', open: true)
16
+ end
17
+
18
+ subject { described_class.create(params) }
19
+
20
+ it "responds with LoginHash object", :aggregate_failures do
21
+ expect(subject).to be_an_instance_of(described_class)
22
+ expect(subject.conference_id).to eq(1)
23
+ expect(subject.nickname).to eq('makar')
24
+ expect(subject.email).to eq('qwer@qwer.qw')
25
+ expect(subject.role).to eq('listener')
26
+ expect(subject.token).to eq("QWEQWE")
27
+ end
28
+
29
+ context 'validation' do
30
+ %i(conference_id nickname email role token).each do |opt_name|
31
+ context opt_name.to_s do
32
+ let(:bad_params) do
33
+ p = params
34
+ p[opt_name] = nil
35
+ p
36
+ end
37
+
38
+ subject { described_class.create(bad_params) }
39
+
40
+ specify { expect { subject }.to raise_error(described_class::InvalidParamsError) }
41
+ end
42
+ end
43
+
44
+ context 'password' do
45
+ before do
46
+ mock_api(:get, 'conferences/2', open: true)
47
+ end
48
+
49
+ let(:bad_params) do
50
+ { conference_id: 2, nickname: 'makar', email: 'qwe@qwe.qw', role: 'listener' }
51
+ end
52
+
53
+ subject { described_class.create(bad_params) }
54
+
55
+ specify { expect { subject }.to raise_error(described_class::InvalidParamsError) }
56
+ end
57
+ end
58
+ end
59
+ end
@@ -0,0 +1,55 @@
1
+ require "spec_helper"
2
+
3
+ describe Clickmeetings::Open::Model do
4
+ describe '#default_headers' do
5
+ subject { described_class.default_headers["X-Api-Key"] }
6
+
7
+ it "uses default account_api_key" do
8
+ expect(subject).to eq Clickmeetings.config.api_key
9
+ end
10
+ end
11
+
12
+ describe '::with_account' do
13
+ context 'when use without block' do
14
+ before { described_class.with_account account_api_key: "some_else_key" }
15
+ after(:all) { described_class.with_account account_api_key: nil }
16
+
17
+ subject { described_class.default_headers["X-Api-Key"] }
18
+
19
+ it "uses specified key" do
20
+ expect(subject).to eq "some_else_key"
21
+ end
22
+ end
23
+
24
+ context 'when use with block' do
25
+ subject do
26
+ subj = described_class.with_account account_api_key: "anykey" do
27
+ described_class.default_headers
28
+ end
29
+ subj["X-Api-Key"]
30
+ end
31
+
32
+ it "uses specified key in block" do
33
+ expect(subject).to eq "anykey"
34
+ end
35
+
36
+ it "uses default key out of block" do
37
+ expect(described_class.default_headers["X-Api-Key"]).to eq Clickmeetings.config.api_key
38
+ end
39
+ end
40
+ end
41
+
42
+ describe '::ping' do
43
+ before do
44
+ stub_request(:get, "#{Clickmeetings.config.host}/ping")
45
+ .to_return(status: 200, body: "{\"ping\":\"pong\"}")
46
+ end
47
+
48
+ subject { described_class.ping }
49
+
50
+ it "responds with {\"ping\":\"pong\"}", :aggregate_failures do
51
+ expect(subject).to be_instance_of Hash
52
+ expect(subject).to eq({"ping" => "pong"})
53
+ end
54
+ end
55
+ end
@@ -0,0 +1,21 @@
1
+ require "spec_helper"
2
+
3
+ describe Clickmeetings::Open::Recording do
4
+ describe '::destroy_all' do
5
+ before do
6
+ mock_api :get, 'conferences/1/recordings', open: true
7
+ mock_api :delete, 'conferences/1/recordings', open: true
8
+ end
9
+
10
+ subject { described_class.by_conference(conference_id: 1).destroy_all }
11
+
12
+ it "responds with array of recordings" do
13
+ expect(subject).to be_an_instance_of(Array)
14
+ expect(subject.first).to be_an_instance_of(described_class)
15
+ end
16
+
17
+ it "response has conference_id" do
18
+ expect(subject.first.conference_id).to eq 1
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,25 @@
1
+ require "spec_helper"
2
+
3
+ describe Clickmeetings::Open::Registration do
4
+ describe '::for_session' do
5
+ before { mock_api :get, 'conferences/1/sessions/1/registrations', open: true }
6
+
7
+ subject { described_class.by_conference(conference_id: 1).for_session(session_id: 1) }
8
+
9
+ it "responds with an array of registrations" do
10
+ expect(subject).to be_an_instance_of(Array)
11
+ expect(subject.first).to be_an_instance_of(described_class)
12
+ end
13
+ end
14
+
15
+ describe '::create' do
16
+ before { mock_api :post, "conferences/1/registration", open: true }
17
+
18
+ let(:params) { {registration: {1 => "qwer", 2 => 'qwer', 3 => 'qwer@qwer.qw'}} }
19
+ subject { described_class.by_conference(conference_id: 1).create(params) }
20
+
21
+ it "responds with hash" do
22
+ expect(subject).to be_an_instance_of(Hash)
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,73 @@
1
+ require "spec_helper"
2
+
3
+ describe Clickmeetings::Open::Session do
4
+ describe '::find' do
5
+ before { mock_api :get, 'conferences/1/sessions/1', open: true }
6
+
7
+ subject { described_class.by_conference(conference_id: 1).find(1) }
8
+
9
+ it "sets an id" do
10
+ expect(subject.id).to eq 1
11
+ end
12
+ end
13
+
14
+ describe '#attendees' do
15
+ before { mock_api :get, 'conferences/1/sessions/1/attendees', open: true }
16
+
17
+ subject { described_class.by_conference(conference_id: 1).new(id: 1).attendees }
18
+
19
+ it "responds with hashes", :aggregate_failures do
20
+ expect(subject).to be_an_instance_of(Array)
21
+ expect(subject.first).to be_an_instance_of(Hash)
22
+ end
23
+ end
24
+
25
+ describe '#generate_pdf' do
26
+ before { mock_api :get, 'conferences/1/sessions/1/generate-pdf/en', open: true }
27
+
28
+ subject { described_class.by_conference(conference_id: 1).new(id: 1).generate_pdf }
29
+
30
+ it "responds with a hash", :aggregate_failures do
31
+ expect(subject).to be_an_instance_of(Hash)
32
+ expect(subject.keys).to include("status")
33
+ expect(subject.keys).to include("progress")
34
+ end
35
+ end
36
+
37
+ describe '#get_report' do
38
+ context 'when \'in progress\'' do
39
+ before { mock_api :get, 'conferences/1/sessions/1/generate-pdf/ru', open: true }
40
+
41
+ subject { described_class.by_conference(conference_id: 1).new(id: 1).get_report :ru }
42
+
43
+ it "responds with nil" do
44
+ expect(subject).to be_nil
45
+ end
46
+ end
47
+
48
+ context 'when \'finished\'' do
49
+ before { mock_api :get, 'conferences/1/sessions/1/generate-pdf/pl', open: true }
50
+
51
+ subject { described_class.by_conference(conference_id: 1).new(id: 1).get_report :pl }
52
+
53
+ it 'responds with url' do
54
+ expect(subject).to eq("http://api.anysecond.com/panel/pdf/ru/5342110/VAqcdc")
55
+ end
56
+ end
57
+ end
58
+
59
+ describe 'registrations' do
60
+ before { mock_api :get, 'conferences/1/sessions/1/registrations', open: true }
61
+
62
+ subject { described_class.by_conference(conference_id: 1).new(id: 1).registrations }
63
+
64
+ it 'responds with an array of Registration objects' do
65
+ expect(subject).to be_an_instance_of(Array)
66
+ expect(subject.first).to be_an_instance_of(Clickmeetings::Open::Registration)
67
+ end
68
+
69
+ it 'respond contains conference_id' do
70
+ expect(subject.first.conference_id).to eq(1)
71
+ end
72
+ end
73
+ end
@@ -0,0 +1,27 @@
1
+ require "spec_helper"
2
+
3
+ describe Clickmeetings::Open::TimeZone do
4
+ describe '::all' do
5
+ context 'without params' do
6
+ before { mock_api :get, 'time_zone_list/', open: true }
7
+
8
+ subject { described_class.all }
9
+
10
+ it "responds with an array" do
11
+ expect(subject).to be_an_instance_of(Array)
12
+ expect(subject.count).to eq(420)
13
+ end
14
+ end
15
+
16
+ context 'with params' do
17
+ before { mock_api :get, 'time_zone_list/ru', open: true }
18
+
19
+ subject { described_class.all country: :ru }
20
+
21
+ it "responds with an array" do
22
+ expect(subject).to be_an_instance_of(Array)
23
+ expect(subject.count).to eq(24)
24
+ end
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,54 @@
1
+ require "spec_helper"
2
+
3
+ describe Clickmeetings::Open::Token do
4
+ context 'without conference' do
5
+ %w(all create).each do |m|
6
+ describe "::#{m}" do
7
+ subject { described_class.send m }
8
+
9
+ specify { expect { subject }.to raise_error(Clickmeetings::Open::Token::NoConferenceError) }
10
+ end
11
+ end
12
+ end
13
+
14
+ context 'with conference' do
15
+ before { described_class.by_conference(conference_id: 1) }
16
+
17
+ describe '::all' do
18
+ before { mock_api :get, 'conferences/1/tokens', open: true }
19
+
20
+ subject { described_class.all }
21
+
22
+ it_behaves_like 'tokens list'
23
+ end
24
+
25
+ describe '::create' do
26
+ before { mock_api :post, 'conferences/1/tokens', open: true }
27
+
28
+ subject { described_class.create how_many: 2 }
29
+
30
+ it_behaves_like 'tokens list'
31
+ end
32
+
33
+ describe '#create_hash' do
34
+ before do
35
+ mock_api :get, 'conferences/1', open: true
36
+ mock_api :post, 'conferences/1/room/autologin_hash', open: true
37
+ end
38
+
39
+ subject do
40
+ described_class.new(token: 'qweqwe').create_hash(
41
+ nickname: 'makar',
42
+ email: 'qweqew@qweqew.com',
43
+ role: 'listener'
44
+ )
45
+ end
46
+
47
+ it 'responds with LoginHash object' do
48
+ expect(subject).to be_an_instance_of(Clickmeetings::Open::LoginHash)
49
+ expect(subject.conference_id).to eq(1)
50
+ expect(subject.token).to eq 'qweqwe'
51
+ end
52
+ end
53
+ end
54
+ end
@@ -2,17 +2,35 @@ require "spec_helper"
2
2
 
3
3
  describe Clickmeetings::PrivateLabel::Conference do
4
4
  context '::by_account' do
5
- before { described_class.by_account(account_id: 1) }
6
- after(:all) { described_class.by_account(account_id: nil) }
5
+ context "without block" do
6
+ before { described_class.by_account(account_id: 1) }
7
+ after(:all) { described_class.by_account(account_id: nil) }
7
8
 
8
- subject { described_class.account_id }
9
+ subject { described_class.account_id }
9
10
 
10
- specify { expect(subject).to eq 1 }
11
+ specify { expect(subject).to eq 1 }
11
12
 
12
- context "gives account_id to objects" do
13
- subject { described_class.new.account_id }
13
+ context "gives account_id to objects" do
14
+ subject { described_class.new.account_id }
14
15
 
15
- specify { expect(subject).to eq 1 }
16
+ specify { expect(subject).to eq 1 }
17
+ end
18
+ end
19
+
20
+ context 'with block' do
21
+ subject do
22
+ described_class.by_account account_id: 1 do
23
+ described_class.account_id
24
+ end
25
+ end
26
+
27
+ it "uses specified account_id in block" do
28
+ expect(subject).to eq 1
29
+ end
30
+
31
+ it "hasn't account_id out of block" do
32
+ expect(described_class.account_id).to be_nil
33
+ end
16
34
  end
17
35
  end
18
36
 
@@ -0,0 +1,6 @@
1
+ shared_examples 'tokens list' do
2
+ it "responds with an array of Token", :aggregate_failures do
3
+ expect(subject).to be_an_instance_of(Array)
4
+ expect(subject.first).to be_an_instance_of(Clickmeetings::Open::Token)
5
+ end
6
+ end
data/spec/spec_helper.rb CHANGED
@@ -1,3 +1,10 @@
1
+ unless ENV['COVERAGE'].nil?
2
+ require "simplecov"
3
+ require "simplecov-gem-profile"
4
+
5
+ SimpleCov.start "gem"
6
+ end
7
+
1
8
  $LOAD_PATH.unshift File.expand_path('../../lib', __FILE__)
2
9
 
3
10
  require 'rspec'