bigbluebutton_rails 2.1.0 → 2.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (57) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +3 -0
  3. data/CHANGELOG.md +21 -0
  4. data/Gemfile +2 -1
  5. data/Gemfile.lock +4 -11
  6. data/Rakefile +15 -15
  7. data/app/controllers/bigbluebutton/recordings_controller.rb +1 -1
  8. data/app/controllers/bigbluebutton/rooms_controller.rb +10 -12
  9. data/app/controllers/bigbluebutton/servers_controller.rb +4 -5
  10. data/app/models/bigbluebutton_meeting.rb +1 -2
  11. data/app/models/bigbluebutton_metadata.rb +2 -2
  12. data/app/models/bigbluebutton_recording.rb +20 -5
  13. data/app/models/bigbluebutton_room.rb +80 -102
  14. data/app/models/bigbluebutton_server.rb +31 -17
  15. data/app/views/bigbluebutton/recordings/_form.html.erb +13 -13
  16. data/app/views/bigbluebutton/rooms/_form.html.erb +0 -4
  17. data/app/views/bigbluebutton/rooms/_rooms.html.erb +0 -4
  18. data/app/views/bigbluebutton/rooms/show.html.erb +0 -4
  19. data/app/workers/bigbluebutton_update_recordings.rb +2 -2
  20. data/config/locales/en.yml +1 -2
  21. data/config/locales/pt-br.yml +1 -2
  22. data/lib/bigbluebutton_rails.rb +22 -108
  23. data/lib/bigbluebutton_rails/background_tasks.rb +7 -3
  24. data/lib/bigbluebutton_rails/configuration.rb +80 -0
  25. data/lib/bigbluebutton_rails/rails/routes.rb +7 -6
  26. data/lib/bigbluebutton_rails/version.rb +1 -1
  27. data/lib/generators/bigbluebutton_rails/install_generator.rb +10 -1
  28. data/lib/generators/bigbluebutton_rails/templates/migration.rb +0 -3
  29. data/lib/generators/bigbluebutton_rails/templates/migration_2_2_0.rb +13 -0
  30. data/spec/controllers/bigbluebutton/recordings_controller_json_responses_spec.rb +4 -5
  31. data/spec/controllers/bigbluebutton/recordings_controller_spec.rb +3 -2
  32. data/spec/controllers/bigbluebutton/rooms_controller_exception_handling_spec.rb +1 -1
  33. data/spec/controllers/bigbluebutton/rooms_controller_json_responses_spec.rb +4 -4
  34. data/spec/controllers/bigbluebutton/rooms_controller_spec.rb +53 -38
  35. data/spec/controllers/bigbluebutton/servers_controller_json_responses_spec.rb +7 -19
  36. data/spec/controllers/bigbluebutton/servers_controller_spec.rb +32 -51
  37. data/spec/factories/bigbluebutton_meeting.rb +0 -1
  38. data/spec/factories/bigbluebutton_recording.rb +1 -0
  39. data/spec/factories/bigbluebutton_room.rb +0 -1
  40. data/spec/models/bigbluebutton_meeting_db_spec.rb +0 -1
  41. data/spec/models/bigbluebutton_meeting_spec.rb +0 -3
  42. data/spec/models/bigbluebutton_metadata_spec.rb +4 -4
  43. data/spec/models/bigbluebutton_recording_spec.rb +32 -0
  44. data/spec/models/bigbluebutton_room_db_spec.rb +0 -2
  45. data/spec/models/bigbluebutton_room_spec.rb +138 -244
  46. data/spec/models/bigbluebutton_server_spec.rb +40 -21
  47. data/spec/rails_app/db/seeds.rb +1 -1
  48. data/spec/rails_app/features/config.yml.example +4 -4
  49. data/spec/rails_app/features/step_definitions/create_rooms_steps.rb +0 -1
  50. data/spec/rails_app/features/support/templates.rb +0 -4
  51. data/spec/rails_app/lib/tasks/db/populate.rake +2 -2
  52. data/spec/routing/bigbluebutton/servers_only_routing_spec.rb +4 -1
  53. data/spec/routing/bigbluebutton/servers_routing_spec.rb +4 -0
  54. data/spec/spec_helper.rb +4 -0
  55. data/spec/support/mocked_server.rb +1 -1
  56. data/spec/workers/bigbluebutton_meeting_updater_spec.rb +3 -3
  57. metadata +4 -2
@@ -142,7 +142,6 @@ describe Bigbluebutton::ServersController do
142
142
 
143
143
  describe "#update" do
144
144
  let(:new_server) { FactoryGirl.build(:bigbluebutton_server) }
145
- before { @server = server } # need this to trigger let(:server) and actually create the object
146
145
 
147
146
  context "on success" do
148
147
  let(:new_server) { FactoryGirl.build(:bigbluebutton_server, version: "") }
@@ -150,16 +149,16 @@ describe Bigbluebutton::ServersController do
150
149
  before {
151
150
  BigBlueButton::BigBlueButtonApi.any_instance.should_receive(:get_api_version).and_return("0.9")
152
151
  expect {
153
- put :update, id: @server.to_param, bigbluebutton_server: new_server.attributes
152
+ put :update, id: server.to_param, bigbluebutton_server: new_server.attributes
154
153
  }.not_to change { BigbluebuttonServer.count }
155
154
  }
156
155
  it {
157
- saved = BigbluebuttonServer.find(@server)
156
+ saved = BigbluebuttonServer.find(server)
158
157
  should respond_with(:redirect)
159
158
  should redirect_to(bigbluebutton_server_path(saved))
160
159
  }
161
160
  it {
162
- saved = BigbluebuttonServer.find(@server)
161
+ saved = BigbluebuttonServer.find(server)
163
162
  saved.should_not have_same_attributes_as(new_server)
164
163
  saved.version.should == "0.9"
165
164
  }
@@ -169,10 +168,10 @@ describe Bigbluebutton::ServersController do
169
168
  context "on failure" do
170
169
  before :each do
171
170
  new_server.url = nil # invalid
172
- put :update, :id => @server.to_param, :bigbluebutton_server => new_server.attributes
171
+ put :update, :id => server.to_param, :bigbluebutton_server => new_server.attributes
173
172
  end
174
173
  it { should render_template(:edit) }
175
- it { should assign_to(:server).with(@server) }
174
+ it { should assign_to(:server).with(server) }
176
175
  end
177
176
 
178
177
  describe "params handling" do
@@ -185,12 +184,12 @@ describe Bigbluebutton::ServersController do
185
184
  it {
186
185
  # we just check that the rails method 'permit' is being called on the hash with the
187
186
  # correct parameters
188
- BigbluebuttonServer.stub(:find_by_param).and_return(@server)
189
- @server.stub(:update_attributes).and_return(true)
187
+ BigbluebuttonServer.stub(:find_by_param).and_return(server)
188
+ server.stub(:update_attributes).and_return(true)
190
189
  attrs.stub(:permit).and_return(attrs)
191
190
  controller.stub(:params).and_return(params)
192
191
 
193
- put :update, :id => @server.to_param, :bigbluebutton_server => attrs
192
+ put :update, :id => server.to_param, :bigbluebutton_server => attrs
194
193
  attrs.should have_received(:permit).with(*allowed_params)
195
194
  }
196
195
  end
@@ -198,8 +197,8 @@ describe Bigbluebutton::ServersController do
198
197
  # to make sure it doesn't break if the hash informed doesn't have the key :bigbluebutton_server
199
198
  describe "if parameters are not informed" do
200
199
  it {
201
- put :update, :id => @server.to_param
202
- should redirect_to(bigbluebutton_server_path(@server))
200
+ put :update, :id => server.to_param
201
+ should redirect_to(bigbluebutton_server_path(server))
203
202
  }
204
203
  end
205
204
 
@@ -207,7 +206,7 @@ describe Bigbluebutton::ServersController do
207
206
  context "on success" do
208
207
  before(:each) {
209
208
  BigbluebuttonServer.any_instance.should_receive(:set_api_version_from_server).and_return(anything)
210
- put :update, :id => @server.to_param, :bigbluebutton_server => new_server.attributes, :redir_url => '/any'
209
+ put :update, :id => server.to_param, :bigbluebutton_server => new_server.attributes, :redir_url => '/any'
211
210
  }
212
211
  it { should respond_with(:redirect) }
213
212
  it { should redirect_to "/any" }
@@ -216,7 +215,7 @@ describe Bigbluebutton::ServersController do
216
215
  context "on failure" do
217
216
  before(:each) {
218
217
  new_server.url = nil # invalid
219
- put :update, :id => @server.to_param, :bigbluebutton_server => new_server.attributes, :redir_url => '/any'
218
+ put :update, :id => server.to_param, :bigbluebutton_server => new_server.attributes, :redir_url => '/any'
220
219
  }
221
220
  it { should respond_with(:redirect) }
222
221
  it { should redirect_to "/any" }
@@ -228,7 +227,7 @@ describe Bigbluebutton::ServersController do
228
227
  before { controller.instance_variable_set(:@server, other_server) }
229
228
  before(:each) {
230
229
  BigbluebuttonServer.any_instance.should_receive(:set_api_version_from_server).and_return(anything)
231
- put :update, :id => @server.to_param, :bigbluebutton_server => new_server.attributes
230
+ put :update, :id => server.to_param, :bigbluebutton_server => new_server.attributes
232
231
  }
233
232
  it { should assign_to(:server).with(other_server) }
234
233
  end
@@ -266,8 +265,8 @@ describe Bigbluebutton::ServersController do
266
265
  end
267
266
 
268
267
  describe "#activity" do
269
- let(:room1) { FactoryGirl.create(:bigbluebutton_room, :server => server) }
270
- let(:room2) { FactoryGirl.create(:bigbluebutton_room, :server => server) }
268
+ let(:room1) { FactoryGirl.create(:bigbluebutton_room) }
269
+ let(:room2) { FactoryGirl.create(:bigbluebutton_room) }
271
270
  before do
272
271
  # return our mocked server
273
272
  BigbluebuttonServer.stub(:find_by_param).with(server.to_param).
@@ -335,40 +334,6 @@ describe Bigbluebutton::ServersController do
335
334
  end
336
335
  end # #activity
337
336
 
338
- describe "#rooms" do
339
- context "basic" do
340
- before do
341
- @room1 = FactoryGirl.create(:bigbluebutton_room, :server => server)
342
- @room2 = FactoryGirl.create(:bigbluebutton_room, :server => server)
343
- FactoryGirl.create(:bigbluebutton_room)
344
- end
345
- before(:each) { get :rooms, :id => server.to_param }
346
- it { should respond_with(:success) }
347
- it { should render_template(:rooms) }
348
- it { should assign_to(:rooms).with([@room1, @room2]) }
349
- end
350
-
351
- context "doesn't override @server" do
352
- let!(:other_server) { FactoryGirl.create(:bigbluebutton_server) }
353
- before { controller.instance_variable_set(:@server, other_server) }
354
- before(:each) { get :rooms, :id => server.to_param }
355
- it { should assign_to(:server).with(other_server) }
356
- end
357
-
358
- context "doesn't override @rooms" do
359
- let!(:my_rooms) {
360
- [ FactoryGirl.create(:bigbluebutton_room, server: server),
361
- FactoryGirl.create(:bigbluebutton_room, server: server) ]
362
- }
363
- before {
364
- 3.times { FactoryGirl.create(:bigbluebutton_room, server: server) }
365
- controller.instance_variable_set(:@rooms, my_rooms)
366
- }
367
- before(:each) { get :rooms, :id => server.to_param }
368
- it { should assign_to(:rooms).with(my_rooms) }
369
- end
370
- end
371
-
372
337
  describe "#publish_recordings" do
373
338
  let(:recording_ids) { "id1,id2,id3" }
374
339
  before do
@@ -553,7 +518,7 @@ describe Bigbluebutton::ServersController do
553
518
  FactoryGirl.create(:bigbluebutton_recording)
554
519
 
555
520
  # one that belongs to another server but to a room that's in the target server
556
- room = FactoryGirl.create(:bigbluebutton_room, :server => server)
521
+ room = FactoryGirl.create(:bigbluebutton_room)
557
522
  FactoryGirl.create(:bigbluebutton_recording, :room => room)
558
523
  end
559
524
  before(:each) { get :recordings, :id => server.to_param }
@@ -583,4 +548,20 @@ describe Bigbluebutton::ServersController do
583
548
  end
584
549
  end
585
550
 
551
+ describe "#check" do
552
+ before do
553
+ # return our mocked server
554
+ BigbluebuttonServer.stub(:find_by_param).with(server.to_param).and_return(server)
555
+ end
556
+
557
+ context "on success" do
558
+ before(:each) {
559
+ server.should_receive(:check_url).and_return('http://test-server.com/check')
560
+ post :check, :id => server.to_param
561
+ }
562
+ it { should respond_with(:redirect) }
563
+ it { should redirect_to 'http://test-server.com/check' }
564
+ end
565
+ end
566
+
586
567
  end
@@ -1,7 +1,6 @@
1
1
  FactoryGirl.define do
2
2
  factory :bigbluebutton_meeting do |m|
3
3
  m.sequence(:meetingid) { |n| "meeting-#{n}-" + SecureRandom.hex(4) }
4
- m.association :server, :factory => :bigbluebutton_server
5
4
  m.association :room, :factory => :bigbluebutton_room
6
5
  m.sequence(:name) { |n| "Name#{n}" }
7
6
  m.recorded false
@@ -12,6 +12,7 @@ FactoryGirl.define do
12
12
  r.sequence(:recordid) { |n| "rec#{n}-#{SecureRandom.uuid}-#{DateTime.now.to_i}" }
13
13
  r.size { rand((20*1024**2)..(500*1024**2)) } # size ranging from 20Mb to 500Mb
14
14
  r.available true
15
+ r.description { Forgery(:lorem_ipsum).words(10) }
15
16
 
16
17
  after(:create) do |r|
17
18
  r.updated_at = r.updated_at.change(:usec => 0)
@@ -3,7 +3,6 @@ FactoryGirl.define do
3
3
  # meetingid with a random factor to avoid duplicated ids in consecutive test runs
4
4
  r.sequence(:meetingid) { |n| "meeting-#{n}-" + SecureRandom.hex(4) }
5
5
 
6
- r.association :server, :factory => :bigbluebutton_server
7
6
  r.sequence(:name) { |n| "Name#{n}" }
8
7
  r.attendee_key { Forgery(:basic).password :at_least => 10, :at_most => 16 }
9
8
  r.moderator_key { Forgery(:basic).password :at_least => 10, :at_most => 16 }
@@ -4,7 +4,6 @@ describe BigbluebuttonMeeting do
4
4
 
5
5
  # to ensure that the migration is correct
6
6
  context "db" do
7
- it { should have_db_column(:server_id).of_type(:integer) }
8
7
  it { should have_db_column(:room_id).of_type(:integer) }
9
8
  it { should have_db_column(:meetingid).of_type(:string) }
10
9
  it { should have_db_column(:name).of_type(:string) }
@@ -8,9 +8,6 @@ describe BigbluebuttonMeeting do
8
8
 
9
9
  before { FactoryGirl.create(:bigbluebutton_meeting) }
10
10
 
11
- it { should belong_to(:server) }
12
- it { should_not validate_presence_of(:server_id) }
13
-
14
11
  it { should belong_to(:room) }
15
12
  it { should validate_presence_of(:room) }
16
13
 
@@ -42,11 +42,11 @@ describe BigbluebuttonMetadata do
42
42
  before(:each) { subject.owner = FactoryGirl.create(:bigbluebutton_room) }
43
43
 
44
44
  it { should ensure_exclusion_of(:name)
45
- .in_array(BigbluebuttonRails.metadata_invalid_keys.map(&:to_s)) }
45
+ .in_array(BigbluebuttonRails.configuration.metadata_invalid_keys.map(&:to_s)) }
46
46
 
47
47
  it "allows values to be added to the list of invalid metadata keys" do
48
- old = BigbluebuttonRails.metadata_invalid_keys.clone
49
- BigbluebuttonRails.metadata_invalid_keys.push("1")
48
+ old = BigbluebuttonRails.configuration.metadata_invalid_keys.clone
49
+ BigbluebuttonRails.configuration.metadata_invalid_keys.push("1")
50
50
  old.push("1")
51
51
  should ensure_exclusion_of(:name).in_array(old.map(&:to_s))
52
52
  end
@@ -54,7 +54,7 @@ describe BigbluebuttonMetadata do
54
54
  it "only invalidates if the metadata belongs to a room" do
55
55
  subject.owner = FactoryGirl.create(:bigbluebutton_recording)
56
56
  should_not ensure_exclusion_of(:name)
57
- .in_array(BigbluebuttonRails.metadata_invalid_keys.map(&:to_s))
57
+ .in_array(BigbluebuttonRails.configuration.metadata_invalid_keys.map(&:to_s))
58
58
  end
59
59
  end
60
60
  end
@@ -66,6 +66,38 @@ describe BigbluebuttonRecording do
66
66
  end
67
67
  end
68
68
 
69
+ describe ".overall_average_length" do
70
+ context "when there's no recording" do
71
+ it { BigbluebuttonRecording.overall_average_length.should eql(0) }
72
+ end
73
+
74
+ context "when there are a few recordings" do
75
+ let!(:recording1) { FactoryGirl.create(:bigbluebutton_recording) }
76
+ let!(:recording2) { FactoryGirl.create(:bigbluebutton_recording) }
77
+ let!(:type_default) { FactoryGirl.create(:bigbluebutton_playback_type, default: true) }
78
+ let!(:type_other) { FactoryGirl.create(:bigbluebutton_playback_type, default: false) }
79
+ let!(:format_other_rec1) { FactoryGirl.create(:bigbluebutton_playback_format, recording: recording1, playback_type: type_other, length: 50) }
80
+ let!(:format_default_rec1) { FactoryGirl.create(:bigbluebutton_playback_format, recording: recording1, playback_type: type_default, length: 100) }
81
+ let!(:format_other_rec2) { FactoryGirl.create(:bigbluebutton_playback_format, recording: recording2, playback_type: type_other, length: 50) }
82
+ let!(:format_default_rec2) { FactoryGirl.create(:bigbluebutton_playback_format, recording: recording2, playback_type: type_default, length: 100) }
83
+
84
+ it { BigbluebuttonRecording.overall_average_length.should eql(6000.0) }
85
+ end
86
+ end
87
+
88
+ describe ".overall_average_size" do
89
+ context "when there's no recording" do
90
+ it { BigbluebuttonRecording.overall_average_size.should eql(0) }
91
+ end
92
+
93
+ context "when there are a few recordings" do
94
+ let!(:recording1) { FactoryGirl.create(:bigbluebutton_recording, size: 100000000) } # 100 MB
95
+ let!(:recording2) { FactoryGirl.create(:bigbluebutton_recording, size: 200000000) } # 200 MB
96
+
97
+ it { BigbluebuttonRecording.overall_average_size.should eql(150000000) }
98
+ end
99
+ end
100
+
69
101
  describe ".sync" do
70
102
  let(:data) {
71
103
  [
@@ -4,7 +4,6 @@ describe BigbluebuttonRoom do
4
4
 
5
5
  # to ensure that the migration is correct
6
6
  context "db" do
7
- it { should have_db_column(:server_id).of_type(:integer) }
8
7
  it { should have_db_column(:owner_id).of_type(:integer) }
9
8
  it { should have_db_column(:owner_type).of_type(:string) }
10
9
  it { should have_db_column(:meetingid).of_type(:string) }
@@ -26,7 +25,6 @@ describe BigbluebuttonRoom do
26
25
  it { should have_db_column(:created_at).of_type(:datetime) }
27
26
  it { should have_db_column(:updated_at).of_type(:datetime) }
28
27
  it { should have_db_column(:create_time).of_type(:integer) }
29
- it { should have_db_index(:server_id) }
30
28
  it { should have_db_index(:meetingid).unique(true) }
31
29
  it "default values" do
32
30
  room = BigbluebuttonRoom.new
@@ -1,4 +1,4 @@
1
- # -*- coding: utf-8 -*-
1
+ # coding: utf-8
2
2
  require 'spec_helper'
3
3
 
4
4
  describe BigbluebuttonRoom do
@@ -8,9 +8,6 @@ describe BigbluebuttonRoom do
8
8
 
9
9
  before { FactoryGirl.create(:bigbluebutton_room) }
10
10
 
11
- it { should belong_to(:server) }
12
- it { should_not validate_presence_of(:server_id) }
13
-
14
11
  it { should belong_to(:owner) }
15
12
  it { should_not validate_presence_of(:owner_id) }
16
13
  it { should_not validate_presence_of(:owner_type) }
@@ -68,7 +65,7 @@ describe BigbluebuttonRoom do
68
65
  # attr_accessors
69
66
  [:running, :participant_count, :moderator_count, :attendees,
70
67
  :has_been_forcibly_ended, :start_time, :end_time, :external,
71
- :server, :request_headers, :record_meeting, :duration].each do |attr|
68
+ :request_headers, :record_meeting, :duration].each do |attr|
72
69
  it { should respond_to(attr) }
73
70
  it { should respond_to("#{attr}=") }
74
71
  end
@@ -152,7 +149,7 @@ describe BigbluebuttonRoom do
152
149
  b.meetingid.should == "user defined"
153
150
  }
154
151
  end
155
- end
152
+ end
156
153
 
157
154
  describe "#room_options" do
158
155
  it "is created when the room is created" do
@@ -245,8 +242,7 @@ describe BigbluebuttonRoom do
245
242
  context "fetches 'running' when not running" do
246
243
  before {
247
244
  mocked_api.should_receive(:is_meeting_running?).with(room.meetingid).and_return(false)
248
- room.should_receive(:require_server)
249
- room.server = mocked_server
245
+ room.should_receive(:select_server).and_return(mocked_server)
250
246
  }
251
247
  before(:each) { @response = room.fetch_is_running? }
252
248
  it { room.running.should be(false) }
@@ -257,8 +253,7 @@ describe BigbluebuttonRoom do
257
253
  context "fetches 'running' when running" do
258
254
  before {
259
255
  mocked_api.should_receive(:is_meeting_running?).with(room.meetingid).and_return(true)
260
- room.should_receive(:require_server)
261
- room.server = mocked_server
256
+ room.should_receive(:select_server).and_return(mocked_server)
262
257
  }
263
258
  before(:each) { @response = room.fetch_is_running? }
264
259
  it { room.running.should be_truthy }
@@ -288,8 +283,8 @@ describe BigbluebuttonRoom do
288
283
  }
289
284
  let(:metadata) {
290
285
  m = {}
291
- m[BigbluebuttonRails.metadata_user_id] = user.id
292
- m[BigbluebuttonRails.metadata_user_name] = user.name
286
+ m[BigbluebuttonRails.configuration.metadata_user_id] = user.id
287
+ m[BigbluebuttonRails.configuration.metadata_user_name] = user.name
293
288
  m
294
289
  }
295
290
  let(:hash_info2) {
@@ -306,8 +301,7 @@ describe BigbluebuttonRoom do
306
301
  before {
307
302
  mocked_api.should_receive(:get_meeting_info).
308
303
  with(room.meetingid, room.moderator_api_password).and_return(hash_info)
309
- room.should_receive(:require_server)
310
- room.server = mocked_server
304
+ room.should_receive(:select_server).and_return(mocked_server)
311
305
  }
312
306
  before(:each) { room.fetch_meeting_info }
313
307
  it { room.running.should == false }
@@ -324,8 +318,7 @@ describe BigbluebuttonRoom do
324
318
  before {
325
319
  mocked_api.should_receive(:get_meeting_info).
326
320
  with(room.meetingid, room.moderator_api_password).and_return(hash_info2)
327
- room.should_receive(:require_server)
328
- room.server = mocked_server
321
+ room.should_receive(:select_server).and_return(mocked_server)
329
322
  }
330
323
  before(:each) { room.fetch_meeting_info }
331
324
  it { room.running.should == true }
@@ -348,8 +341,7 @@ describe BigbluebuttonRoom do
348
341
  before {
349
342
  mocked_api.should_receive(:get_meeting_info).
350
343
  with(room.meetingid, room.moderator_api_password).and_return(hash_info2)
351
- room.should_receive(:require_server)
352
- room.server = mocked_server
344
+ room.should_receive(:select_server).and_return(mocked_server)
353
345
 
354
346
  # here's the validation
355
347
  room.should_receive(:update_current_meeting_record).with(metadata, true)
@@ -364,6 +356,7 @@ describe BigbluebuttonRoom do
364
356
  e
365
357
  }
366
358
  before {
359
+ room.should_receive(:select_server).and_return(mocked_server)
367
360
  expect(mocked_api).to receive(:get_meeting_info) { raise exception }
368
361
  expect(room).not_to receive(:update_current_meeting_record)
369
362
  expect(room).to receive(:finish_meetings)
@@ -382,6 +375,7 @@ describe BigbluebuttonRoom do
382
375
  e
383
376
  }
384
377
  before {
378
+ room.should_receive(:select_server).and_return(mocked_server)
385
379
  expect(mocked_api).to receive(:get_meeting_info) { raise exception }
386
380
  expect(room).not_to receive(:update_current_meeting_record)
387
381
  expect(room).to receive(:finish_meetings)
@@ -400,6 +394,7 @@ describe BigbluebuttonRoom do
400
394
  e
401
395
  }
402
396
  before {
397
+ room.should_receive(:select_server).and_return(mocked_server)
403
398
  expect(mocked_api).to receive(:get_meeting_info) { raise exception }
404
399
  expect(room).not_to receive(:update_current_meeting_record)
405
400
  expect(room).to receive(:finish_meetings)
@@ -414,6 +409,7 @@ describe BigbluebuttonRoom do
414
409
  context "raises any exception other than a BigBlueButtonException" do
415
410
  let!(:exception) { NoMethodError.new('Test error') }
416
411
  before {
412
+ room.should_receive(:select_server).and_return(mocked_server)
417
413
  expect(mocked_api).to receive(:get_meeting_info) { raise exception }
418
414
  expect(room).not_to receive(:update_current_meeting_record)
419
415
  expect(room).not_to receive(:finish_meetings)
@@ -431,19 +427,20 @@ describe BigbluebuttonRoom do
431
427
  context "calls end_meeting" do
432
428
  before {
433
429
  mocked_api.should_receive(:end_meeting).with(room.meetingid, room.moderator_api_password)
434
- room.should_receive(:require_server)
435
- room.server = mocked_server
430
+ room.should_receive(:select_server).and_return(mocked_server)
436
431
  }
437
432
  it { room.send_end }
438
433
  end
439
434
 
440
435
  context "schedules a BigbluebuttonMeetingUpdater" do
441
- before { mocked_api.should_receive(:end_meeting) }
442
- before(:each) {
436
+ before {
437
+ room.should_receive(:select_server).and_return(mocked_server)
438
+ mocked_api.should_receive(:end_meeting)
443
439
  expect {
444
440
  room.send_end
445
441
  }.to change{ Resque.info[:pending] }.by(1)
446
442
  }
443
+
447
444
  subject { Resque.peek(:bigbluebutton_rails) }
448
445
  it("should have a job schedule") { subject.should_not be_nil }
449
446
  it("the job should be the right one") { subject['class'].should eq('BigbluebuttonMeetingUpdater') }
@@ -480,7 +477,6 @@ describe BigbluebuttonRoom do
480
477
  mocked_api.should_receive(:create_meeting)
481
478
  .with(anything, anything, hash_including(:welcome => "Hi!"))
482
479
  room.stub(:select_server).and_return(mocked_server)
483
- room.server = mocked_server
484
480
  end
485
481
 
486
482
  context "nil" do
@@ -499,7 +495,6 @@ describe BigbluebuttonRoom do
499
495
  .with(room.name, room.meetingid, get_create_params(room))
500
496
  .and_return(hash_create)
501
497
  room.stub(:select_server).and_return(mocked_server)
502
- room.server = mocked_server
503
498
  room.send_create
504
499
  end
505
500
 
@@ -514,8 +509,6 @@ describe BigbluebuttonRoom do
514
509
  .with(room.name, room.meetingid, expected_params)
515
510
  .and_return(hash_create)
516
511
  room.stub(:select_server).and_return(mocked_server)
517
-
518
- room.server = mocked_server
519
512
  room.send_create
520
513
  end
521
514
  it { room.attendee_api_password.should be(new_attendee_api_password) }
@@ -532,7 +525,6 @@ describe BigbluebuttonRoom do
532
525
  .with(new_room.name, new_room.meetingid, params)
533
526
  .and_return(hash_create)
534
527
  new_room.stub(:select_server).and_return(mocked_server)
535
- new_room.server = mocked_server
536
528
  new_room.send_create
537
529
  end
538
530
  it { new_room.attendee_api_password.should be(new_attendee_api_password) }
@@ -553,7 +545,6 @@ describe BigbluebuttonRoom do
553
545
  .with(room.name, room.meetingid, params)
554
546
  .and_return(hash_create)
555
547
  room.stub(:select_server).and_return(mocked_server)
556
- room.server = mocked_server
557
548
  room.send_create(user)
558
549
  end
559
550
  it { room.attendee_api_password.should be(new_attendee_api_password) }
@@ -570,7 +561,6 @@ describe BigbluebuttonRoom do
570
561
  .with(room.name, room.meetingid, params)
571
562
  .and_return(hash_create)
572
563
  room.stub(:select_server).and_return(mocked_server)
573
- room.server = mocked_server
574
564
  room.send_create(user, user_opts)
575
565
  end
576
566
  it { room.attendee_api_password.should be(new_attendee_api_password) }
@@ -587,7 +577,6 @@ describe BigbluebuttonRoom do
587
577
  .with(room.name, room.meetingid, get_create_params(room))
588
578
  .and_return(hash_create)
589
579
  room.stub(:select_server).and_return(mocked_server)
590
- room.server = mocked_server
591
580
  room.send_create
592
581
  end
593
582
  it { room.voice_bridge.should be_nil }
@@ -596,11 +585,11 @@ describe BigbluebuttonRoom do
596
585
 
597
586
  context "when it's set to use local voice bridges" do
598
587
  before {
599
- @use_local_voice_bridges = BigbluebuttonRails.use_local_voice_bridges
600
- BigbluebuttonRails.use_local_voice_bridges = true
588
+ @use_local_voice_bridges = BigbluebuttonRails.configuration.use_local_voice_bridges
589
+ BigbluebuttonRails.configuration.use_local_voice_bridges = true
601
590
  }
602
591
  after {
603
- BigbluebuttonRails.use_local_voice_bridges = @use_local_voice_bridges
592
+ BigbluebuttonRails.configuration.use_local_voice_bridges = @use_local_voice_bridges
604
593
  }
605
594
 
606
595
  context "sets the voice bridge in the params if there's a voice bridge" do
@@ -614,7 +603,6 @@ describe BigbluebuttonRoom do
614
603
  .with(room.name, room.meetingid, create_params)
615
604
  .and_return(hash_create)
616
605
  room.stub(:select_server).and_return(mocked_server)
617
- room.server = mocked_server
618
606
  room.send_create
619
607
  end
620
608
  it { room.changed?.should be(false) }
@@ -629,7 +617,6 @@ describe BigbluebuttonRoom do
629
617
  .with(room.name, room.meetingid, get_create_params(room))
630
618
  .and_return(hash_create)
631
619
  room.stub(:select_server).and_return(mocked_server)
632
- room.server = mocked_server
633
620
  room.send_create
634
621
  end
635
622
  it { room.changed?.should be(false) }
@@ -643,16 +630,14 @@ describe BigbluebuttonRoom do
643
630
  .and_return(hash_create)
644
631
  room.stub(:select_server).and_return(mocked_server)
645
632
 
646
- room.server = mocked_server
647
633
  expect {
648
634
  room.send_create
649
635
  }.to change{ BigbluebuttonMeeting.count }.by(1)
650
636
  end
651
637
  subject { BigbluebuttonMeeting.last }
652
638
  it { subject.room.should eql(room) }
653
- it { subject.server_id.should eql(room.server.id) }
654
- it { subject.server_url.should eql(room.server.url) }
655
- it { subject.server_secret.should eql(room.server.secret) }
639
+ it { subject.server_url.should eql(mocked_server.url) }
640
+ it { subject.server_secret.should eql(mocked_server.secret) }
656
641
  it { subject.meetingid.should eql(room.meetingid) }
657
642
  it { subject.name.should eql(room.name) }
658
643
  it { subject.recorded.should eql(room.record_meeting) }
@@ -669,7 +654,6 @@ describe BigbluebuttonRoom do
669
654
  .and_return(hash_create)
670
655
  room.stub(:select_server).and_return(mocked_server)
671
656
 
672
- room.server = mocked_server
673
657
  expect {
674
658
  room.send_create
675
659
  }.to change{ Resque.info[:pending] }.by(1)
@@ -688,7 +672,6 @@ describe BigbluebuttonRoom do
688
672
  it "generates a new one if it's empty or nil" do
689
673
  room.meetingid = value
690
674
  room.stub(:select_server).and_return(mocked_server)
691
- room.server = mocked_server
692
675
  room.should_receive(:unique_meetingid).and_return(new_id)
693
676
  mocked_api.should_receive(:create_meeting)
694
677
  .with(room.name, new_id, anything)
@@ -700,7 +683,6 @@ describe BigbluebuttonRoom do
700
683
  old_id = "old id"
701
684
  room.meetingid = old_id
702
685
  room.stub(:select_server).and_return(mocked_server)
703
- room.server = mocked_server
704
686
  room.should_not_receive(:unique_meetingid)
705
687
  mocked_api.should_receive(:create_meeting)
706
688
  .with(room.name, old_id, anything)
@@ -715,7 +697,6 @@ describe BigbluebuttonRoom do
715
697
  it "generates a new one if it's empty or nil" do
716
698
  room.moderator_api_password = value
717
699
  room.stub(:select_server).and_return(mocked_server)
718
- room.server = mocked_server
719
700
  room.should_receive(:internal_password).and_return(new_pass)
720
701
  mocked_api.should_receive(:create_meeting)
721
702
  .with(room.name, anything, hash_including(moderatorPW: new_pass))
@@ -727,7 +708,6 @@ describe BigbluebuttonRoom do
727
708
  old_pass = "old pass"
728
709
  room.moderator_api_password = old_pass
729
710
  room.stub(:select_server).and_return(mocked_server)
730
- room.server = mocked_server
731
711
  room.should_not_receive(:internal_password)
732
712
  mocked_api.should_receive(:create_meeting)
733
713
  .with(room.name, anything, hash_including(moderatorPW: old_pass))
@@ -742,7 +722,6 @@ describe BigbluebuttonRoom do
742
722
  it "generates a new one if it's empty or nil" do
743
723
  room.attendee_api_password = value
744
724
  room.stub(:select_server).and_return(mocked_server)
745
- room.server = mocked_server
746
725
  room.should_receive(:internal_password).and_return(new_pass)
747
726
  mocked_api.should_receive(:create_meeting)
748
727
  .with(room.name, anything, hash_including(attendeePW: new_pass))
@@ -754,7 +733,6 @@ describe BigbluebuttonRoom do
754
733
  old_pass = "old pass"
755
734
  room.attendee_api_password = old_pass
756
735
  room.stub(:select_server).and_return(mocked_server)
757
- room.server = mocked_server
758
736
  room.should_not_receive(:internal_password)
759
737
  mocked_api.should_receive(:create_meeting)
760
738
  .with(room.name, anything, hash_including(attendeePW: old_pass))
@@ -769,34 +747,23 @@ describe BigbluebuttonRoom do
769
747
  mocked_api.should_receive(:create_meeting).
770
748
  with(room.name, room.meetingid, hash).and_return(hash_create)
771
749
  room.stub(:select_server).and_return(mocked_server)
772
- room.server = mocked_server
773
750
  end
774
751
  it { room.send_create }
775
752
  end
776
753
 
777
- context "selects and requires a server" do
754
+ context "selects a server" do
778
755
  let(:another_server) { FactoryGirl.create(:bigbluebutton_server) }
779
- let(:room2) { FactoryGirl.create(:bigbluebutton_room, :server => nil) }
780
- context "and saves the result" do
781
- before do
782
- room2.should_receive(:internal_create_meeting)
783
- room2.send_create
784
- end
785
- # send_create will call require_server, so a server will be assigned
786
- # to this room
787
- it { BigbluebuttonRoom.find(room2.id).server_id.should_not be_nil }
788
- end
756
+ let(:room2) { FactoryGirl.create(:bigbluebutton_room) }
757
+ let(:api) { double(BigBlueButton::BigBlueButtonApi) }
789
758
 
790
- context "and does not save when is a new record" do
791
- let(:new_room) { FactoryGirl.build(:bigbluebutton_room) }
759
+ context "and saves the result" do
792
760
  before do
793
- new_room.should_receive(:require_server)
794
- new_room.should_receive(:internal_create_meeting).and_return(nil)
795
- new_room.should_not_receive(:save)
796
- new_room.server = mocked_server
797
- new_room.send_create
761
+ room2.should_receive(:select_server).with(:create).and_return(another_server)
762
+ another_server.stub(:api).and_return(api)
763
+ api.should_receive(:request_headers=)
764
+ api.should_receive(:create_meeting)
798
765
  end
799
- it { new_room.new_record?.should be_truthy }
766
+ it { room2.send_create }
800
767
  end
801
768
  end
802
769
 
@@ -804,7 +771,6 @@ describe BigbluebuttonRoom do
804
771
  before do
805
772
  mocked_api.should_receive(:create_meeting).with(anything, anything, anything)
806
773
  room.stub(:select_server).and_return(mocked_server)
807
- room.server = mocked_server
808
774
  room.request_headers = { :anything => "anything" }
809
775
  mocked_api.should_receive(:"request_headers=").once.with(room.request_headers)
810
776
  end
@@ -821,11 +787,10 @@ describe BigbluebuttonRoom do
821
787
  context "with moderator role" do
822
788
  let(:expected) { 'expected-url' }
823
789
  before {
824
- room.should_receive(:require_server)
790
+ room.should_receive(:select_server).and_return(mocked_server)
825
791
  mocked_api.should_receive(:join_meeting_url)
826
792
  .with(room.meetingid, username, room.moderator_api_password, join_options)
827
793
  .and_return(expected)
828
- room.server = mocked_server
829
794
  }
830
795
  subject { room.join_url(username, :moderator, nil, join_options) }
831
796
  it("returns the correct url") { subject.should eq(expected) }
@@ -834,25 +799,56 @@ describe BigbluebuttonRoom do
834
799
  context "with attendee role" do
835
800
  let(:expected) { 'expected-url' }
836
801
  before {
837
- room.should_receive(:require_server)
802
+ room.should_receive(:select_server).and_return(mocked_server)
838
803
  mocked_api.should_receive(:join_meeting_url)
839
804
  .with(room.meetingid, username, room.attendee_api_password, join_options)
840
805
  .and_return(expected)
841
- room.server = mocked_server
842
806
  }
843
807
  subject { room.join_url(username, :attendee, nil, join_options) }
844
808
  it("returns the correct url") { subject.should eq(expected) }
845
809
  end
846
810
 
811
+ context "with guest role" do
812
+ let(:expected) { 'expected-url' }
813
+
814
+ context "when guest support is disabled" do
815
+ before {
816
+ room.should_receive(:select_server).and_return(mocked_server)
817
+ mocked_api.should_receive(:join_meeting_url)
818
+ .with(room.meetingid, username, room.attendee_api_password, join_options)
819
+ .and_return(expected)
820
+ }
821
+ subject { room.join_url(username, :guest, nil, join_options) }
822
+ it("returns the correct url") { subject.should eq(expected) }
823
+ end
824
+
825
+ context "when guest support is enabled" do
826
+ before {
827
+ @guest_support_before = BigbluebuttonRails.configuration.guest_support
828
+ BigbluebuttonRails.configuration.guest_support = true
829
+
830
+ room.should_receive(:select_server).and_return(mocked_server)
831
+ params = { guest: true }.merge(join_options)
832
+ mocked_api.should_receive(:join_meeting_url)
833
+ .with(room.meetingid, username, room.attendee_api_password, params)
834
+ .and_return(expected)
835
+ }
836
+ after {
837
+ BigbluebuttonRails.configuration.guest_support = @guest_support_before
838
+ }
839
+ subject { room.join_url(username, :guest, nil, join_options) }
840
+ it("returns the correct url") { subject.should eq(expected) }
841
+ end
842
+ end
843
+
847
844
  context "without a role" do
848
845
  context "passing the moderator key" do
849
846
  let(:expected) { 'expected-url' }
850
847
  before {
851
- room.should_receive(:require_server)
848
+ room.should_receive(:select_server).and_return(mocked_server)
852
849
  mocked_api.should_receive(:join_meeting_url)
853
850
  .with(room.meetingid, username, room.moderator_api_password, join_options)
854
851
  .and_return(expected)
855
- room.server = mocked_server
856
852
  }
857
853
  subject { room.join_url(username, nil, room.moderator_key, join_options) }
858
854
  it("returns the correct url") { subject.should eq(expected) }
@@ -861,11 +857,10 @@ describe BigbluebuttonRoom do
861
857
  context "passing the attendee key" do
862
858
  let(:expected) { 'expected-url' }
863
859
  before {
864
- room.should_receive(:require_server)
860
+ room.should_receive(:select_server).and_return(mocked_server)
865
861
  mocked_api.should_receive(:join_meeting_url)
866
862
  .with(room.meetingid, username, room.attendee_api_password, join_options)
867
863
  .and_return(expected)
868
- room.server = mocked_server
869
864
  }
870
865
  subject { room.join_url(username, nil, room.attendee_key, join_options) }
871
866
  it("returns the correct url") { subject.should eq(expected) }
@@ -874,11 +869,10 @@ describe BigbluebuttonRoom do
874
869
  context "passing an unmatching key" do
875
870
  let(:expected) { 'expected-url' }
876
871
  before {
877
- room.should_receive(:require_server)
872
+ room.should_receive(:select_server).and_return(mocked_server)
878
873
  mocked_api.should_receive(:join_meeting_url)
879
874
  .with(room.meetingid, username, nil, join_options)
880
875
  .and_return(expected)
881
- room.server = mocked_server
882
876
  }
883
877
  subject { room.join_url(username, nil, "wrong key", join_options) }
884
878
  it("returns the correct url") { subject.should eq(expected) }
@@ -887,10 +881,9 @@ describe BigbluebuttonRoom do
887
881
 
888
882
  context "strips the url before returning it" do
889
883
  before {
890
- room.should_receive(:require_server)
884
+ room.should_receive(:select_server).and_return(mocked_server)
891
885
  mocked_api.should_receive(:join_meeting_url)
892
886
  .and_return(" my.url/with/spaces \t ")
893
- room.server = mocked_server
894
887
  }
895
888
  subject { room.join_url(username, :moderator) }
896
889
  it("returns the url stripped") { subject.should eq('my.url/with/spaces') }
@@ -918,6 +911,7 @@ describe BigbluebuttonRoom do
918
911
 
919
912
  context "and the xml generated is not equal the default one" do
920
913
  before {
914
+ room.should_receive(:select_server).and_return(mocked_server)
921
915
  room.room_options.should_receive(:set_on_config_xml)
922
916
  .with(config_xml).and_return('fake-config-xml')
923
917
  mocked_api.should_receive(:set_config_xml)
@@ -930,6 +924,7 @@ describe BigbluebuttonRoom do
930
924
 
931
925
  context "and the xml generated is equal the default one" do
932
926
  before {
927
+ room.should_receive(:select_server).and_return(mocked_server)
933
928
  room.room_options.should_receive(:set_on_config_xml)
934
929
  .with(config_xml).and_return(false)
935
930
  mocked_api.should_not_receive(:set_config_xml)
@@ -953,52 +948,70 @@ describe BigbluebuttonRoom do
953
948
 
954
949
  context "#available_layouts" do
955
950
  context "delegates to server" do
951
+ let(:server) { FactoryGirl.build(:bigbluebutton_server) }
956
952
  let(:room) { FactoryGirl.build(:bigbluebutton_room) }
957
953
  let(:layouts) { [ 'layout-1', 'another layout' ] }
954
+
958
955
  before {
959
- room.server.should_receive(:available_layouts)
956
+ room.should_receive(:select_server).and_return(server)
957
+ server.should_receive(:available_layouts)
960
958
  .and_return(layouts)
961
959
  }
962
960
  it { room.available_layouts.should eql(layouts) }
963
961
  end
964
962
 
965
963
  context "returns and empty array if the server is nil" do
966
- let(:room) { FactoryGirl.build(:bigbluebutton_room, server: nil) }
967
- it { room.available_layouts.should eql([]) }
964
+ let(:room) { FactoryGirl.build(:bigbluebutton_room) }
965
+ it {
966
+ room.should_receive(:select_server).and_return(nil)
967
+ room.available_layouts.should eql([])
968
+ }
968
969
  end
969
970
  end
970
971
 
971
972
  context "#available_layouts_names" do
972
973
  context "delegates to server" do
974
+ let(:server) { FactoryGirl.build(:bigbluebutton_server) }
973
975
  let(:room) { FactoryGirl.build(:bigbluebutton_room) }
974
976
  let(:layouts) { [ 'layout-1', 'another layout' ] }
977
+
975
978
  before {
976
- room.server.should_receive(:available_layouts_names)
979
+ room.should_receive(:select_server).and_return(server)
980
+ server.should_receive(:available_layouts_names)
977
981
  .and_return(layouts)
978
982
  }
979
983
  it { room.available_layouts_names.should eql(layouts) }
980
984
  end
981
985
 
982
986
  context "returns and empty array if the server is nil" do
983
- let(:room) { FactoryGirl.build(:bigbluebutton_room, server: nil) }
984
- it { room.available_layouts_names.should eql([]) }
987
+ let(:room) { FactoryGirl.build(:bigbluebutton_room) }
988
+ it {
989
+ room.should_receive(:select_server).and_return(nil)
990
+ room.available_layouts_names.should eql([])
991
+ }
985
992
  end
986
993
  end
987
994
 
988
995
  context "#available_layouts_for_select" do
989
996
  context "delegates to server" do
997
+ let(:server) { FactoryGirl.build(:bigbluebutton_server) }
990
998
  let(:room) { FactoryGirl.build(:bigbluebutton_room) }
991
999
  let(:layouts) { [ 'layout-1', 'another layout' ] }
1000
+
992
1001
  before {
993
- room.server.should_receive(:available_layouts_for_select)
1002
+ room.should_receive(:select_server).and_return(server)
1003
+ server.should_receive(:available_layouts_for_select)
994
1004
  .and_return(layouts)
995
1005
  }
996
1006
  it { room.available_layouts_for_select.should eql(layouts) }
997
1007
  end
998
1008
 
999
1009
  context "returns and empty array if the server is nil" do
1000
- let(:room) { FactoryGirl.build(:bigbluebutton_room, server: nil) }
1001
- it { room.available_layouts_for_select.should eql([]) }
1010
+ let(:room) { FactoryGirl.build(:bigbluebutton_room) }
1011
+ it {
1012
+ room.should_receive(:select_server).and_return(nil)
1013
+ room.available_layouts_for_select.should eql([])
1014
+ }
1002
1015
  end
1003
1016
  end
1004
1017
 
@@ -1157,107 +1170,30 @@ describe BigbluebuttonRoom do
1157
1170
  it { should respond_to(:"full_logout_url=") }
1158
1171
  end
1159
1172
 
1160
- describe "#require_server" do
1173
+ describe "#select_server" do
1174
+ let(:server) { FactoryGirl.create(:bigbluebutton_server) }
1161
1175
  let(:room) { FactoryGirl.create(:bigbluebutton_room) }
1162
- it { room.respond_to?(:require_server, true).should be(true) }
1163
-
1164
- context "if the room has no server associated" do
1165
- let(:server) { FactoryGirl.create(:bigbluebutton_server) }
1166
- before {
1167
- room.server = nil
1168
- }
1169
-
1170
- context "assigns server to room if there is one" do
1171
- before {
1172
- room.send(:require_server)
1173
- }
1174
- it { room.reload.server.should_not be_nil }
1175
- end
1176
-
1177
- context "raises exception if there are no servers to assign" do
1178
- before {
1179
- room.should_receive(:select_server).and_return(nil)
1180
- }
1181
- it {
1182
- expect {
1183
- room.send(:require_server)
1184
- }.to raise_error(BigbluebuttonRails::ServerRequired)
1185
- }
1186
- end
1187
-
1188
- context "doesn't save the room if no server is selected" do
1189
- before {
1190
- @updated_at = room.updated_at
1191
- room.should_receive(:select_server).and_return(nil)
1192
- expect {
1193
- room.send(:require_server)
1194
- }.to raise_error(BigbluebuttonRails::ServerRequired)
1195
- }
1196
- it { room.updated_at.should eql(@updated_at) }
1197
- end
1198
1176
 
1199
- context "doesn't save the room if it's a new record" do
1200
- let(:room) { FactoryGirl.build(:bigbluebutton_room) }
1201
- before {
1202
- room.should_receive(:select_server).and_return(server)
1203
- room.send(:require_server)
1204
- }
1205
- it { room.new_record?.should be(true) }
1206
- it { room.server.should eql(server) }
1207
- end
1208
-
1209
- context "passes the api_method parameter to #select_server" do
1210
- let(:method) { :my_api_method }
1211
- before {
1212
- room.should_receive(:select_server).with(method).and_return(server)
1213
- }
1214
- it { room.send(:require_server, method) }
1215
- end
1216
- end
1177
+ it { room.respond_to?(:select_server, true).should be(true) }
1217
1178
 
1218
- context "does nothing if the room has a server associated" do
1219
- let(:server) { FactoryGirl.create(:bigbluebutton_server) }
1220
- before {
1221
- room.server = server
1222
- expect {
1223
- room.send(:require_server)
1224
- }.not_to raise_error
1225
- }
1226
- it { room.server.should eql(server) }
1179
+ context "assigns server to room if there is one" do
1180
+ it { room.select_server.should eql(BigbluebuttonServer.first) }
1227
1181
  end
1228
- end
1229
1182
 
1230
- describe "#select_server" do
1231
- let(:room) { FactoryGirl.create(:bigbluebutton_room, :server => nil) }
1232
- it { room.respond_to?(:select_server, true).should be(true) }
1233
-
1234
- context "selects the server with less rooms" do
1183
+ context "raises exception if there are no servers to assign" do
1235
1184
  before {
1236
1185
  BigbluebuttonServer.destroy_all
1237
- s1 = FactoryGirl.create(:bigbluebutton_server)
1238
- @s2 = FactoryGirl.create(:bigbluebutton_server)
1239
- 3.times{ FactoryGirl.create(:bigbluebutton_room, :server => s1) }
1240
- 2.times{ FactoryGirl.create(:bigbluebutton_room, :server => @s2) }
1241
1186
  }
1242
- it { room.send(:select_server).should == @s2 }
1243
- end
1244
-
1245
- context "returns nil of there are no servers" do
1246
- before { BigbluebuttonServer.destroy_all }
1247
- it { room.send(:select_server).should == nil }
1248
- end
1249
-
1250
- context "returns nil if the room already has a server" do
1251
- before {
1252
- 2.times{ FactoryGirl.create(:bigbluebutton_server) }
1253
- room.update_attributes(server: FactoryGirl.create(:bigbluebutton_server))
1187
+ it {
1188
+ expect {
1189
+ room.select_server
1190
+ }.to raise_error(BigbluebuttonRails::ServerRequired)
1254
1191
  }
1255
- it { room.send(:select_server).should == nil }
1256
1192
  end
1257
1193
  end
1258
1194
 
1259
1195
  describe "#get_metadata_for_create" do
1260
- let(:room) { FactoryGirl.create(:bigbluebutton_room, :server => nil) }
1196
+ let(:room) { FactoryGirl.create(:bigbluebutton_room) }
1261
1197
 
1262
1198
  context "returns the metadata from the database" do
1263
1199
  before {
@@ -1272,20 +1208,12 @@ describe BigbluebuttonRoom do
1272
1208
 
1273
1209
  context "returns the dynamic metadata, if any" do
1274
1210
  before {
1275
- BigbluebuttonRoom.class_eval do
1276
- def dynamic_metadata
1277
- {
1278
- "test1" => "value1",
1279
- "test2" => "value2"
1280
- }
1211
+ BigbluebuttonRails.configure do |config|
1212
+ config.get_dynamic_metadata = Proc.new do |room|
1213
+ { "test1" => "value1", "test2" => "value2" }
1281
1214
  end
1282
1215
  end
1283
1216
  }
1284
- after {
1285
- BigbluebuttonRoom.class_eval do
1286
- undef_method :dynamic_metadata
1287
- end
1288
- }
1289
1217
 
1290
1218
  it {
1291
1219
  result = { "meta_test1" => "value1", "meta_test2" => "value2" }
@@ -1295,23 +1223,15 @@ describe BigbluebuttonRoom do
1295
1223
 
1296
1224
  context "gives priority to the dynamic metadata" do
1297
1225
  before {
1298
- BigbluebuttonRoom.class_eval do
1299
- def dynamic_metadata
1300
- {
1301
- "test1" => "value1",
1302
- "test2" => "value2"
1303
- }
1226
+ BigbluebuttonRails.configure do |config|
1227
+ config.get_dynamic_metadata = Proc.new do |room|
1228
+ { "test1" => "value1", "test2" => "value2" }
1304
1229
  end
1305
1230
  end
1306
1231
 
1307
1232
  @m1 = FactoryGirl.create(:bigbluebutton_room_metadata, owner: room, name: "test1", content: "content overwritten")
1308
1233
  @m2 = FactoryGirl.create(:bigbluebutton_room_metadata, owner: room, name: "other", content: "other content")
1309
1234
  }
1310
- after {
1311
- BigbluebuttonRoom.class_eval do
1312
- undef_method :dynamic_metadata
1313
- end
1314
- }
1315
1235
 
1316
1236
  it {
1317
1237
  result = { "meta_test1" => "value1", "meta_test2" => "value2", "meta_other" => "other content" }
@@ -1321,7 +1241,7 @@ describe BigbluebuttonRoom do
1321
1241
  end
1322
1242
 
1323
1243
  describe "#get_current_meeting" do
1324
- let(:room) { FactoryGirl.create(:bigbluebutton_room, :server => nil) }
1244
+ let(:room) { FactoryGirl.create(:bigbluebutton_room) }
1325
1245
 
1326
1246
  context "if there's no start_time set in the room" do
1327
1247
  before { room.start_time = nil }
@@ -1353,8 +1273,8 @@ describe BigbluebuttonRoom do
1353
1273
  let(:user) { FactoryGirl.build(:user) }
1354
1274
  let(:metadata) {
1355
1275
  m = {}
1356
- m[BigbluebuttonRails.metadata_user_id] = user.id
1357
- m[BigbluebuttonRails.metadata_user_name] = user.name
1276
+ m[BigbluebuttonRails.configuration.metadata_user_id] = user.id
1277
+ m[BigbluebuttonRails.configuration.metadata_user_name] = user.name
1358
1278
  m
1359
1279
  }
1360
1280
  before {
@@ -1413,6 +1333,7 @@ describe BigbluebuttonRoom do
1413
1333
  end
1414
1334
 
1415
1335
  describe "#create_meeting_record" do
1336
+ let(:server) { FactoryGirl.create(:bigbluebutton_server) }
1416
1337
  let(:room) { FactoryGirl.create(:bigbluebutton_room) }
1417
1338
 
1418
1339
  context "if there is already a current meeting" do
@@ -1439,8 +1360,8 @@ describe BigbluebuttonRoom do
1439
1360
  let(:user) { FactoryGirl.build(:user) }
1440
1361
  let(:metadata) {
1441
1362
  m = {}
1442
- m[BigbluebuttonRails.metadata_user_id] = user.id
1443
- m[BigbluebuttonRails.metadata_user_name] = user.name
1363
+ m[BigbluebuttonRails.configuration.metadata_user_id] = user.id
1364
+ m[BigbluebuttonRails.configuration.metadata_user_name] = user.name
1444
1365
  m
1445
1366
  }
1446
1367
  before {
@@ -1454,13 +1375,13 @@ describe BigbluebuttonRoom do
1454
1375
  context "and no metadata was passed" do
1455
1376
  before(:each) {
1456
1377
  expect {
1378
+ room.should_receive(:select_server).and_return(server)
1457
1379
  room.create_meeting_record
1458
1380
  }.to change{ BigbluebuttonMeeting.count }.by(1)
1459
1381
  }
1460
1382
  subject { BigbluebuttonMeeting.last }
1461
- it("sets server") { subject.server.should eq(room.server) }
1462
- it("sets server_url") { subject.server_url.should eq(room.server.url) }
1463
- it("sets server_secret") { subject.server_secret.should eq(room.server.secret) }
1383
+ it("sets server_url") { subject.server_url.should eq(server.url) }
1384
+ it("sets server_secret") { subject.server_secret.should eq(server.secret) }
1464
1385
  it("sets room") { subject.room.should eq(room) }
1465
1386
  it("sets meetingid") { subject.meetingid.should eq(room.meetingid) }
1466
1387
  it("sets name") { subject.name.should eq(room.name) }
@@ -1549,8 +1470,8 @@ describe BigbluebuttonRoom do
1549
1470
  let(:room) { FactoryGirl.create(:bigbluebutton_room) }
1550
1471
 
1551
1472
  before {
1473
+ room.stub(:select_server).and_return(mocked_server)
1552
1474
  mocked_api.stub(:"request_headers=")
1553
- room.server = mocked_server
1554
1475
  }
1555
1476
 
1556
1477
  it { room.should_not respond_to(:invitation_url) }
@@ -1567,45 +1488,33 @@ describe BigbluebuttonRoom do
1567
1488
 
1568
1489
  context "doesn't add the invitation URL if BigbluebuttonRoom#invitation_url returns nil" do
1569
1490
  before {
1570
- BigbluebuttonRoom.class_eval do
1571
- def invitation_url
1491
+ BigbluebuttonRails.configure do |config|
1492
+ config.get_invitation_url = Proc.new do |room|
1572
1493
  nil
1573
1494
  end
1574
1495
  end
1575
1496
 
1576
- room.should respond_to(:invitation_url)
1577
1497
  mocked_api.should_receive(:create_meeting) do |name, meetingid, opts|
1578
1498
  opts.should_not have_key('meta_invitation-url')
1579
1499
  opts.should_not have_key(:'meta_invitation-url')
1580
1500
  end
1581
1501
  }
1582
- after {
1583
- BigbluebuttonRoom.class_eval do
1584
- undef_method :invitation_url
1585
- end
1586
- }
1587
1502
 
1588
1503
  it { room.send(:internal_create_meeting) }
1589
1504
  end
1590
1505
 
1591
1506
  context "adds the value returned by BigbluebuttonRoom#invitation_url" do
1592
1507
  before {
1593
- BigbluebuttonRoom.class_eval do
1594
- def invitation_url
1508
+ BigbluebuttonRails.configure do |config|
1509
+ config.get_invitation_url = Proc.new do |room|
1595
1510
  'http://my-invitation.url'
1596
1511
  end
1597
1512
  end
1598
1513
 
1599
- room.should respond_to(:invitation_url)
1600
1514
  mocked_api.should_receive(:create_meeting) do |name, meetingid, opts|
1601
1515
  opts.should include('meta_invitation-url' => 'http://my-invitation.url')
1602
1516
  end
1603
1517
  }
1604
- after {
1605
- BigbluebuttonRoom.class_eval do
1606
- undef_method :invitation_url
1607
- end
1608
- }
1609
1518
 
1610
1519
  it { room.send(:internal_create_meeting) }
1611
1520
  end
@@ -1616,8 +1525,8 @@ describe BigbluebuttonRoom do
1616
1525
  let(:room) { FactoryGirl.create(:bigbluebutton_room) }
1617
1526
 
1618
1527
  before {
1528
+ room.stub(:select_server).and_return(mocked_server)
1619
1529
  mocked_api.stub(:"request_headers=")
1620
- room.server = mocked_server
1621
1530
  }
1622
1531
 
1623
1532
  it { room.should_not respond_to(:dynamic_metadata) }
@@ -1635,50 +1544,35 @@ describe BigbluebuttonRoom do
1635
1544
 
1636
1545
  context "doesn't add the dynamic metadata if it returns nil" do
1637
1546
  before {
1638
- BigbluebuttonRoom.class_eval do
1639
- def dynamic_metadata
1547
+ BigbluebuttonRails.configure do |config|
1548
+ config.get_dynamic_metadata = Proc.new do |room|
1640
1549
  nil
1641
1550
  end
1642
1551
  end
1643
1552
 
1644
- room.should respond_to(:dynamic_metadata)
1645
1553
  mocked_api.should_receive(:create_meeting) do |name, meetingid, opts|
1646
1554
  opts.each do |key, value|
1647
1555
  key.should_not match(/meta_/)
1648
1556
  end
1649
1557
  end
1650
1558
  }
1651
- after {
1652
- BigbluebuttonRoom.class_eval do
1653
- undef_method :dynamic_metadata
1654
- end
1655
- }
1656
1559
 
1657
1560
  it { room.send(:internal_create_meeting) }
1658
1561
  end
1659
1562
 
1660
1563
  context "adds the value returned by BigbluebuttonRoom#invitation_url" do
1661
1564
  before {
1662
- BigbluebuttonRoom.class_eval do
1663
- def dynamic_metadata
1664
- {
1665
- "test1" => "value1",
1666
- "test2" => "value2"
1667
- }
1565
+ BigbluebuttonRails.configure do |config|
1566
+ config.get_dynamic_metadata = Proc.new do |room|
1567
+ { "test1" => "value1", "test2" => "value2" }
1668
1568
  end
1669
1569
  end
1670
1570
 
1671
- room.should respond_to(:dynamic_metadata)
1672
1571
  mocked_api.should_receive(:create_meeting) do |name, meetingid, opts|
1673
1572
  opts.should include('meta_test1' => 'value1')
1674
1573
  opts.should include('meta_test2' => 'value2')
1675
1574
  end
1676
1575
  }
1677
- after {
1678
- BigbluebuttonRoom.class_eval do
1679
- undef_method :dynamic_metadata
1680
- end
1681
- }
1682
1576
 
1683
1577
  it { room.send(:internal_create_meeting) }
1684
1578
  end