bigbluebutton_rails 2.1.0 → 2.2.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 (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
@@ -83,10 +83,10 @@ module ActionDispatch::Routing
83
83
 
84
84
  def bigbluebutton_routes_default(*params) #:nodoc:
85
85
  options = params.extract_options!
86
- options_scope = options.has_key?(:scope) ? options[:scope] : BigbluebuttonRails.routing_scope
86
+ options_scope = options.has_key?(:scope) ? options[:scope] : BigbluebuttonRails.configuration.routing_scope
87
87
  options_as = options.has_key?(:as) ? options[:as] : options_scope
88
88
  options_only = options.has_key?(:only) ? options[:only] : ["servers", "rooms", "recordings", "playback_types"]
89
- BigbluebuttonRails.set_controllers(options[:controllers])
89
+ BigbluebuttonRails.configuration.set_controllers(options[:controllers])
90
90
 
91
91
  scope options_scope, :as => options_as do
92
92
  add_routes_for_servers if options_only.include?("servers")
@@ -101,7 +101,7 @@ module ActionDispatch::Routing
101
101
  end
102
102
 
103
103
  def add_routes_for_rooms #:nodoc:
104
- resources :rooms, :controller => BigbluebuttonRails.controllers[:rooms] do
104
+ resources :rooms, :controller => BigbluebuttonRails.configuration.controllers[:rooms] do
105
105
  member do
106
106
  get :join
107
107
  get :running
@@ -117,11 +117,12 @@ module ActionDispatch::Routing
117
117
  end
118
118
 
119
119
  def add_routes_for_servers #:nodoc:
120
- resources :servers, :controller => BigbluebuttonRails.controllers[:servers] do
120
+ resources :servers, :controller => BigbluebuttonRails.configuration.controllers[:servers] do
121
121
  member do
122
122
  get :activity
123
123
  get :rooms
124
124
  get :recordings
125
+ get :check
125
126
  post :publish_recordings
126
127
  post :unpublish_recordings
127
128
  post :fetch_recordings
@@ -131,7 +132,7 @@ module ActionDispatch::Routing
131
132
 
132
133
  def add_routes_for_recordings #:nodoc:
133
134
  resources :recordings, :except => [:new, :create],
134
- :controller => BigbluebuttonRails.controllers[:recordings] do
135
+ :controller => BigbluebuttonRails.configuration.controllers[:recordings] do
135
136
  member do
136
137
  get :play
137
138
  post :publish
@@ -142,7 +143,7 @@ module ActionDispatch::Routing
142
143
 
143
144
  def add_routes_for_playback_types #:nodoc:
144
145
  resources :playback_types, :only => [:update],
145
- :controller => BigbluebuttonRails.controllers[:playback_types]
146
+ :controller => BigbluebuttonRails.configuration.controllers[:playback_types]
146
147
  end
147
148
  end
148
149
  end
@@ -1,3 +1,3 @@
1
1
  module BigbluebuttonRails
2
- VERSION = "2.1.0".freeze
2
+ VERSION = "2.2.0".freeze
3
3
  end
@@ -18,11 +18,20 @@ module BigbluebuttonRails
18
18
  ActiveRecord::Generators::Base.next_migration_number(dirname)
19
19
  end
20
20
 
21
+ def source_root
22
+ BigbluebuttonRails::Generators::InstallGenerator.source_root
23
+ end
24
+
21
25
  def create_migration_file
22
26
  if migrate_to_version.blank?
23
27
  migration_template "#{migration_path}/migration.rb", "db/migrate/create_bigbluebutton_rails.rb"
24
28
  else
25
- migration_template "#{migration_path}/migration_#{version_filename}.rb", "db/migrate/bigbluebutton_rails_to_#{version_filename}.rb"
29
+ migrations = Dir.glob(File.join(source_root, migration_path, "migration_#{version_filename}*"))
30
+ migrations.sort.each do |path|
31
+ filename = File.basename(path)
32
+ target_filename = filename.gsub('migration', 'bigbluebutton_rails_to')
33
+ migration_template "#{migration_path}/#{filename}", "db/migrate/#{target_filename}"
34
+ end
26
35
  end
27
36
  end
28
37
 
@@ -11,7 +11,6 @@ class CreateBigbluebuttonRails < ActiveRecord::Migration
11
11
  end
12
12
 
13
13
  create_table :bigbluebutton_rooms do |t|
14
- t.integer :server_id
15
14
  t.integer :owner_id
16
15
  t.string :owner_type
17
16
  t.string :meetingid
@@ -36,7 +35,6 @@ class CreateBigbluebuttonRails < ActiveRecord::Migration
36
35
  t.boolean :allow_start_stop_recording, default: true
37
36
  t.timestamps
38
37
  end
39
- add_index :bigbluebutton_rooms, :server_id
40
38
  add_index :bigbluebutton_rooms, :meetingid, :unique => true
41
39
 
42
40
  create_table :bigbluebutton_room_options do |t|
@@ -92,7 +90,6 @@ class CreateBigbluebuttonRails < ActiveRecord::Migration
92
90
  end
93
91
 
94
92
  create_table :bigbluebutton_meetings do |t|
95
- t.integer :server_id
96
93
  t.string :server_url
97
94
  t.string :server_secret
98
95
  t.integer :room_id
@@ -0,0 +1,13 @@
1
+ class BigbluebuttonRailsTo220 < ActiveRecord::Migration
2
+ def self.up
3
+ remove_column :bigbluebutton_meetings, :server_id
4
+ remove_column :bigbluebutton_rooms, :server_id
5
+ remove_index :bigbluebutton_rooms, :server_id
6
+ end
7
+
8
+ def self.down
9
+ add_column :bigbluebutton_meetings, :server_id, :integer
10
+ add_column :bigbluebutton_rooms, :server_id, :integer
11
+ add_index :bigbluebutton_rooms, :server_id
12
+ end
13
+ end
@@ -45,16 +45,15 @@ describe Bigbluebutton::RecordingsController do
45
45
  end
46
46
 
47
47
  context "on failure" do
48
+ before {
49
+ BigbluebuttonRecording.any_instance.should_receive(:update_attributes).and_return(false)
50
+ }
48
51
  before(:each) {
49
- new_recording.recordid = nil # invalid
50
52
  put :update, :id => @recording.to_param, :bigbluebutton_recording => new_recording.attributes, :format => 'json'
51
53
  }
52
54
  it { should respond_with(:unprocessable_entity) }
53
55
  it { should respond_with_content_type('application/json') }
54
- it {
55
- new_recording.save # should fail
56
- should respond_with_json(new_recording.errors.full_messages.to_json)
57
- }
56
+ it { should respond_with_json([].to_json) }
58
57
  end
59
58
  end
60
59
 
@@ -72,7 +72,8 @@ describe Bigbluebutton::RecordingsController do
72
72
  }
73
73
  it {
74
74
  saved = BigbluebuttonRecording.find(recording)
75
- saved.should have_same_attributes_as(new_recording, ['room_id', 'server_id', 'meeting_id', 'size'])
75
+ ignored = new_recording.attributes.keys - ['description'] # only description is editable
76
+ saved.should have_same_attributes_as(new_recording, ignored)
76
77
  }
77
78
  it { should set_the_flash.to(I18n.t('bigbluebutton_rails.recordings.notice.update.success')) }
78
79
  end
@@ -91,7 +92,7 @@ describe Bigbluebutton::RecordingsController do
91
92
  let(:attrs) { FactoryGirl.attributes_for(:bigbluebutton_recording) }
92
93
  let(:params) { { :bigbluebutton_recording => attrs } }
93
94
  let(:allowed_params) {
94
- [ :recordid, :meetingid, :name, :published, :start_time, :end_time, :available, :description ]
95
+ [ :description ]
95
96
  }
96
97
  it {
97
98
  # we just check that the rails method 'permit' is being called on the hash with the
@@ -8,7 +8,7 @@ describe Bigbluebutton::RoomsController do
8
8
  let(:bbb_error_msg) { SecureRandom.hex(250) }
9
9
  let(:bbb_error) { BigBlueButton::BigBlueButtonException.new(bbb_error_msg) }
10
10
  let(:http_referer) { bigbluebutton_server_path(mocked_server) }
11
- let(:room) { FactoryGirl.create(:bigbluebutton_room, :server => mocked_server) }
11
+ let(:room) { FactoryGirl.create(:bigbluebutton_room) }
12
12
  before {
13
13
  BigbluebuttonRoom.stub(:find_by_param) { room }
14
14
  BigbluebuttonRoom.stub(:find) { room }
@@ -3,7 +3,7 @@ require 'spec_helper'
3
3
  describe Bigbluebutton::RoomsController do
4
4
  render_views
5
5
  let(:server) { FactoryGirl.create(:bigbluebutton_server) }
6
- let(:room) { FactoryGirl.create(:bigbluebutton_room, :server => server) }
6
+ let(:room) { FactoryGirl.create(:bigbluebutton_room) }
7
7
  before do
8
8
  BigbluebuttonRoom.stub(:find_by_param) { room }
9
9
  BigbluebuttonRoom.stub(:find) { room }
@@ -13,8 +13,8 @@ describe Bigbluebutton::RoomsController do
13
13
 
14
14
  describe "#index" do
15
15
  before do
16
- @room1 = FactoryGirl.create(:bigbluebutton_room, :server => server)
17
- @room2 = FactoryGirl.create(:bigbluebutton_room, :server => server)
16
+ @room1 = FactoryGirl.create(:bigbluebutton_room)
17
+ @room2 = FactoryGirl.create(:bigbluebutton_room)
18
18
  end
19
19
  before(:each) { get :index, :format => 'json' }
20
20
  it { should respond_with(:success) }
@@ -41,7 +41,7 @@ describe Bigbluebutton::RoomsController do
41
41
  end
42
42
 
43
43
  describe "#create" do
44
- let(:new_room) { FactoryGirl.build(:bigbluebutton_room, :server => server) }
44
+ let(:new_room) { FactoryGirl.build(:bigbluebutton_room) }
45
45
 
46
46
  context "on success" do
47
47
  before(:each) {
@@ -6,8 +6,8 @@ require 'bigbluebutton_api'
6
6
 
7
7
  describe Bigbluebutton::RoomsController do
8
8
  render_views
9
- let(:server) { FactoryGirl.create(:bigbluebutton_server) }
10
- let(:room) { FactoryGirl.create(:bigbluebutton_room, :server => server) }
9
+ let!(:server) { FactoryGirl.create(:bigbluebutton_server) }
10
+ let!(:room) { FactoryGirl.create(:bigbluebutton_room) }
11
11
  let(:params_to_ignore) { ['moderator_api_password', 'attendee_api_password', 'create_time'] }
12
12
 
13
13
  describe "#index" do
@@ -86,7 +86,6 @@ describe Bigbluebutton::RoomsController do
86
86
  request.env["HTTP_REFERER"] = http_referer
87
87
  controller.should_receive(:set_request_headers)
88
88
  mock_server_and_api
89
- room.server = mocked_server
90
89
  controller.stub(:bigbluebutton_user) { user }
91
90
  }
92
91
 
@@ -137,7 +136,7 @@ describe Bigbluebutton::RoomsController do
137
136
  end
138
137
 
139
138
  describe "#create" do
140
- let(:new_room) { FactoryGirl.build(:bigbluebutton_room, :server => server) }
139
+ let(:new_room) { FactoryGirl.build(:bigbluebutton_room) }
141
140
 
142
141
  context "on success" do
143
142
  before :each do
@@ -206,7 +205,7 @@ describe Bigbluebutton::RoomsController do
206
205
  let(:attrs) { FactoryGirl.attributes_for(:bigbluebutton_room) }
207
206
  let(:params) { { :bigbluebutton_room => attrs } }
208
207
  let(:allowed_params) {
209
- [ :name, :server_id, :meetingid, :attendee_key, :moderator_key, :welcome_msg,
208
+ [ :name, :meetingid, :attendee_key, :moderator_key, :welcome_msg,
210
209
  :private, :logout_url, :dial_number, :voice_bridge, :max_participants, :owner_id,
211
210
  :owner_type, :external, :param, :record_meeting, :duration, :default_layout, :presenter_share_only,
212
211
  :auto_start_video, :auto_start_audio, :background,
@@ -247,21 +246,20 @@ describe Bigbluebutton::RoomsController do
247
246
 
248
247
  describe "#update" do
249
248
  let(:new_room) { FactoryGirl.build(:bigbluebutton_room) }
250
- before { @room = room } # need this to trigger let(:room) and actually create the room
251
249
 
252
250
  context "on success" do
253
251
  before :each do
254
252
  expect {
255
- put :update, :id => @room.to_param, :bigbluebutton_room => new_room.attributes
253
+ put :update, :id => room.to_param, :bigbluebutton_room => new_room.attributes
256
254
  }.not_to change{ BigbluebuttonRoom.count }
257
255
  end
258
256
  it {
259
- saved = BigbluebuttonRoom.find(@room)
257
+ saved = BigbluebuttonRoom.find(room)
260
258
  should respond_with(:redirect)
261
259
  should redirect_to bigbluebutton_room_path(saved)
262
260
  }
263
261
  it {
264
- saved = BigbluebuttonRoom.find(@room)
262
+ saved = BigbluebuttonRoom.find(room)
265
263
  saved.should have_same_attributes_as(new_room, params_to_ignore)
266
264
  }
267
265
  it { should set_the_flash.to(I18n.t('bigbluebutton_rails.rooms.notice.update.success')) }
@@ -270,16 +268,16 @@ describe Bigbluebutton::RoomsController do
270
268
  context "on failure" do
271
269
  before :each do
272
270
  new_room.name = nil # invalid
273
- put :update, :id => @room.to_param, :bigbluebutton_room => new_room.attributes
271
+ put :update, :id => room.to_param, :bigbluebutton_room => new_room.attributes
274
272
  end
275
273
  it { should render_template(:edit) }
276
- it { should assign_to(:room).with(@room) }
274
+ it { should assign_to(:room).with(room) }
277
275
  end
278
276
 
279
277
  context "with :redir_url" do
280
278
  context "on success" do
281
279
  before(:each) {
282
- put :update, :id => @room.to_param, :bigbluebutton_room => new_room.attributes, :redir_url => "/any"
280
+ put :update, :id => room.to_param, :bigbluebutton_room => new_room.attributes, :redir_url => "/any"
283
281
  }
284
282
  it { should respond_with(:redirect) }
285
283
  it { should redirect_to "/any" }
@@ -288,7 +286,7 @@ describe Bigbluebutton::RoomsController do
288
286
  context "on failure" do
289
287
  before(:each) {
290
288
  new_room.name = nil # invalid
291
- put :update, :id => @room.to_param, :bigbluebutton_room => new_room.attributes, :redir_url => "/any"
289
+ put :update, :id => room.to_param, :bigbluebutton_room => new_room.attributes, :redir_url => "/any"
292
290
  }
293
291
  it { should respond_with(:redirect) }
294
292
  it { should redirect_to "/any" }
@@ -299,7 +297,7 @@ describe Bigbluebutton::RoomsController do
299
297
  let(:attrs) { FactoryGirl.attributes_for(:bigbluebutton_room) }
300
298
  let(:params) { { :bigbluebutton_room => attrs } }
301
299
  let(:allowed_params) {
302
- [ :name, :server_id, :meetingid, :attendee_key, :moderator_key, :welcome_msg,
300
+ [ :name, :meetingid, :attendee_key, :moderator_key, :welcome_msg,
303
301
  :private, :logout_url, :dial_number, :voice_bridge, :max_participants, :owner_id,
304
302
  :owner_type, :external, :param, :record_meeting, :duration, :default_layout, :presenter_share_only,
305
303
  :auto_start_video, :auto_start_audio, :background,
@@ -309,12 +307,12 @@ describe Bigbluebutton::RoomsController do
309
307
  it {
310
308
  # we just check that the rails method 'permit' is being called on the hash with the
311
309
  # correct parameters
312
- BigbluebuttonRoom.stub(:find_by_param).and_return(@room)
313
- @room.stub(:update_attributes).and_return(true)
310
+ BigbluebuttonRoom.stub(:find_by_param).and_return(room)
311
+ room.stub(:update_attributes).and_return(true)
314
312
  attrs.stub(:permit).and_return(attrs)
315
313
  controller.stub(:params).and_return(params)
316
314
 
317
- put :update, :id => @room.to_param, :bigbluebutton_room => attrs
315
+ put :update, :id => room.to_param, :bigbluebutton_room => attrs
318
316
  attrs.should have_received(:permit).with(*allowed_params)
319
317
  }
320
318
  end
@@ -323,15 +321,15 @@ describe Bigbluebutton::RoomsController do
323
321
  describe "if parameters are not informed" do
324
322
  before(:each) {}
325
323
  it {
326
- put :update, :id => @room.to_param
327
- should redirect_to(bigbluebutton_room_path(@room))
324
+ put :update, :id => room.to_param
325
+ should redirect_to(bigbluebutton_room_path(room))
328
326
  }
329
327
  end
330
328
 
331
329
  context "doesn't override @room" do
332
330
  let!(:other_room) { FactoryGirl.create(:bigbluebutton_room) }
333
331
  before { controller.instance_variable_set(:@room, other_room) }
334
- before(:each) { put :update, :id => @room.to_param, :bigbluebutton_room => new_room.attributes }
332
+ before(:each) { put :update, :id => room.to_param, :bigbluebutton_room => new_room.attributes }
335
333
  it { should assign_to(:room).with(other_room) }
336
334
  end
337
335
  end
@@ -817,7 +815,7 @@ describe Bigbluebutton::RoomsController do
817
815
 
818
816
  context "if the room has no server associated" do
819
817
  before(:each) {
820
- room.stub(:server) { nil }
818
+ room.stub(:select_server) { nil }
821
819
  post :fetch_recordings, :id => room.to_param
822
820
  }
823
821
  it { should respond_with(:redirect) }
@@ -834,9 +832,10 @@ describe Bigbluebutton::RoomsController do
834
832
  it {should respond_with(:redirect) }
835
833
  it { should redirect_to "/any" }
836
834
  end
835
+
837
836
  context "on failure" do
838
837
  before(:each) {
839
- room.stub(:server) { nil }
838
+ room.stub(:select_server) { nil }
840
839
  post :fetch_recordings, :id => room.to_param, :redir_url => "/any"
841
840
  }
842
841
  it {should respond_with(:redirect) }
@@ -848,7 +847,6 @@ describe Bigbluebutton::RoomsController do
848
847
  let!(:other_room) { FactoryGirl.create(:bigbluebutton_room) }
849
848
  before {
850
849
  controller.instance_variable_set(:@room, other_room)
851
- other_room.server = nil
852
850
  }
853
851
  before(:each) { post :fetch_recordings, :id => room.to_param }
854
852
  it { should assign_to(:room).with(other_room) }
@@ -862,7 +860,7 @@ describe Bigbluebutton::RoomsController do
862
860
  FactoryGirl.create(:bigbluebutton_recording)
863
861
 
864
862
  # one that belongs to another room in the same server
865
- room2 = FactoryGirl.create(:bigbluebutton_room, :server => room.server)
863
+ room2 = FactoryGirl.create(:bigbluebutton_room)
866
864
  FactoryGirl.create(:bigbluebutton_recording, :room => room2)
867
865
  end
868
866
  before(:each) { get :recordings, :id => room.to_param }
@@ -976,20 +974,23 @@ describe Bigbluebutton::RoomsController do
976
974
  }
977
975
 
978
976
  context "when the user has permission to create the meeting" do
979
- before {
980
- room.should_receive(:fetch_is_running?).at_least(:once).and_return(false)
981
- controller.stub(:bigbluebutton_can_create?).with(room, :attendee)
982
- .and_return(true)
983
- controller.stub(:bigbluebutton_create_options).with(room)
984
- .and_return({ custom: true })
985
- room.should_receive(:create_meeting)
986
- .with(user, controller.request, { custom: true })
987
- room.should_receive(:fetch_new_token).and_return(nil)
988
- room.should_receive(:join_url).and_return("http://test.com/join/url/")
989
- }
990
- before(:each) { get :join, :id => room.to_param }
991
- it { should respond_with(:redirect) }
992
- it { should redirect_to("http://test.com/join/url/") }
977
+
978
+ context "in the standard case" do
979
+ before {
980
+ room.should_receive(:fetch_is_running?).at_least(:once).and_return(false)
981
+ controller.stub(:bigbluebutton_can_create?).with(room, :attendee)
982
+ .and_return(true)
983
+ controller.stub(:bigbluebutton_create_options).with(room)
984
+ .and_return({ custom: true })
985
+ room.should_receive(:create_meeting)
986
+ .with(user, controller.request, { custom: true }).and_return(true)
987
+ room.should_receive(:fetch_new_token).and_return(nil)
988
+ room.should_receive(:join_url).and_return("http://test.com/join/url/")
989
+ }
990
+ before(:each) { get :join, :id => room.to_param }
991
+ it { should respond_with(:redirect) }
992
+ it { should redirect_to("http://test.com/join/url/") }
993
+ end
993
994
  end
994
995
 
995
996
  context "when the user doesn't have permission to create the meeting" do
@@ -1190,6 +1191,20 @@ describe Bigbluebutton::RoomsController do
1190
1191
  it { should set_the_flash.to(bbb_error_msg[0..200]) }
1191
1192
  end
1192
1193
 
1194
+ context "doesn't break if a guest user has permission to create a meeting" do
1195
+ before {
1196
+ room.stub(:fetch_is_running?).and_return(false)
1197
+ controller.stub(:bigbluebutton_create_options).and_return({ custom: true })
1198
+ controller.stub(:bigbluebutton_can_create?).and_return(true)
1199
+ room.stub(:create_meeting).and_return(true)
1200
+ controller.stub(:bigbluebutton_user).and_return(nil)
1201
+ room.stub(:join_url).and_return("http://test.com/join/url/")
1202
+ }
1203
+ before(:each) { get :join, :id => room.to_param, :user => { :name => "Elftor" } }
1204
+ it { should respond_with(:redirect) }
1205
+ it { should redirect_to("http://test.com/join/url/") }
1206
+ end
1207
+
1193
1208
  end
1194
1209
 
1195
1210
  end
@@ -2,12 +2,13 @@ require 'spec_helper'
2
2
 
3
3
  describe Bigbluebutton::ServersController do
4
4
  render_views
5
- let(:server) { FactoryGirl.create(:bigbluebutton_server) }
5
+ let!(:server) { FactoryGirl.create(:bigbluebutton_server) }
6
6
 
7
7
  context "json responses for" do
8
8
 
9
9
  describe "#index" do
10
10
  before do
11
+ BigbluebuttonServer.destroy_all
11
12
  @server1 = FactoryGirl.create(:bigbluebutton_server)
12
13
  @server2 = FactoryGirl.create(:bigbluebutton_server)
13
14
  end
@@ -66,12 +67,11 @@ describe Bigbluebutton::ServersController do
66
67
 
67
68
  describe "#update" do
68
69
  let(:new_server) { FactoryGirl.build(:bigbluebutton_server) }
69
- before { @server = server }
70
70
 
71
71
  context "on success" do
72
72
  before(:each) {
73
73
  BigbluebuttonServer.any_instance.stub(:set_api_version_from_server)
74
- put :update, :id => @server.to_param, :bigbluebutton_server => new_server.attributes, :format => 'json'
74
+ put :update, :id => server.to_param, :bigbluebutton_server => new_server.attributes, :format => 'json'
75
75
  }
76
76
  it { should respond_with(:success) }
77
77
  it { should respond_with_content_type('application/json') }
@@ -81,7 +81,7 @@ describe Bigbluebutton::ServersController do
81
81
  context "on failure" do
82
82
  before(:each) {
83
83
  new_server.url = nil # invalid
84
- put :update, :id => @server.to_param, :bigbluebutton_server => new_server.attributes, :format => 'json'
84
+ put :update, :id => server.to_param, :bigbluebutton_server => new_server.attributes, :format => 'json'
85
85
  }
86
86
  it { should respond_with(:unprocessable_entity) }
87
87
  it { should respond_with_content_type('application/json') }
@@ -94,8 +94,7 @@ describe Bigbluebutton::ServersController do
94
94
 
95
95
  describe "#destroy" do
96
96
  before :each do
97
- @server = server
98
- delete :destroy, :id => @server.to_param, :format => 'json'
97
+ delete :destroy, :id => server.to_param, :format => 'json'
99
98
  end
100
99
  it { should respond_with(:success) }
101
100
  it { should respond_with_content_type('application/json') }
@@ -103,8 +102,8 @@ describe Bigbluebutton::ServersController do
103
102
  end
104
103
 
105
104
  describe "#activity" do
106
- let(:room1) { FactoryGirl.create(:bigbluebutton_room, :server => server) }
107
- let(:room2) { FactoryGirl.create(:bigbluebutton_room, :server => server) }
105
+ let(:room1) { FactoryGirl.create(:bigbluebutton_room) }
106
+ let(:room2) { FactoryGirl.create(:bigbluebutton_room) }
108
107
  before do
109
108
  # so we return our mocked server
110
109
  BigbluebuttonServer.stub(:find_by_param).with(server.to_param).
@@ -154,17 +153,6 @@ describe Bigbluebutton::ServersController do
154
153
 
155
154
  end
156
155
 
157
- describe "#rooms" do
158
- before do
159
- @room1 = FactoryGirl.create(:bigbluebutton_room, :server => server)
160
- @room2 = FactoryGirl.create(:bigbluebutton_room, :server => server)
161
- end
162
- before(:each) { get :rooms, :id => server.to_param, :format => 'json' }
163
- it { should respond_with(:success) }
164
- it { should respond_with_content_type('application/json') }
165
- it { should respond_with_json([@room1, @room2].to_json) }
166
- end
167
-
168
156
  describe "#fetch_recordings" do
169
157
  it "on success"
170
158
  it "on error"