bigbluebutton_rails 2.0.0 → 2.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +21 -0
- data/Gemfile.lock +5 -5
- data/app/controllers/bigbluebutton/rooms_controller.rb +0 -5
- data/app/controllers/bigbluebutton/servers_controller.rb +1 -1
- data/app/models/bigbluebutton_meeting.rb +2 -2
- data/app/models/bigbluebutton_recording.rb +16 -12
- data/app/models/bigbluebutton_room.rb +109 -42
- data/app/models/bigbluebutton_server.rb +10 -9
- data/app/views/bigbluebutton/servers/_form.html.erb +2 -2
- data/app/views/bigbluebutton/servers/index.html.erb +1 -1
- data/app/views/bigbluebutton/servers/show.html.erb +2 -2
- data/app/workers/bigbluebutton_meeting_updater.rb +7 -14
- data/bigbluebutton_rails.gemspec +1 -1
- data/config/locales/en.yml +1 -1
- data/config/locales/pt-br.yml +1 -1
- data/lib/bigbluebutton_rails.rb +17 -10
- data/lib/bigbluebutton_rails/background_tasks.rb +9 -5
- data/lib/bigbluebutton_rails/version.rb +1 -1
- data/lib/generators/bigbluebutton_rails/templates/migration.rb +6 -2
- data/lib/generators/bigbluebutton_rails/templates/migration_2_1_0.rb +21 -0
- data/spec/controllers/bigbluebutton/rooms_controller_spec.rb +1 -13
- data/spec/controllers/bigbluebutton/servers_controller_spec.rb +2 -2
- data/spec/factories/bigbluebutton_meeting.rb +2 -0
- data/spec/factories/bigbluebutton_metadata.rb +1 -1
- data/spec/factories/bigbluebutton_room.rb +1 -0
- data/spec/factories/bigbluebutton_server.rb +1 -1
- data/spec/lib/bigbluebutton_rails/background_tasks_spec.rb +106 -15
- data/spec/models/bigbluebutton_meeting_db_spec.rb +9 -4
- data/spec/models/bigbluebutton_meeting_spec.rb +2 -2
- data/spec/models/bigbluebutton_recording_spec.rb +19 -4
- data/spec/models/bigbluebutton_room_options_spec.rb +1 -1
- data/spec/models/bigbluebutton_room_spec.rb +396 -97
- data/spec/models/bigbluebutton_server_db_spec.rb +1 -1
- data/spec/models/bigbluebutton_server_spec.rb +38 -16
- data/spec/rails_app/db/seeds.rb +0 -1
- data/spec/rails_app/features/config.yml.example +2 -4
- data/spec/rails_app/features/step_definitions/activity_monitor_servers_step.rb +2 -4
- data/spec/rails_app/features/step_definitions/common_steps.rb +1 -2
- data/spec/rails_app/features/step_definitions/create_servers_steps.rb +2 -2
- data/spec/rails_app/features/step_definitions/destroy_servers_steps.rb +1 -2
- data/spec/rails_app/features/support/factories/bigbluebutton_server_integration.rb +1 -1
- data/spec/rails_app/features/support/templates.rb +5 -5
- data/spec/rails_app/lib/tasks/db/populate.rake +1 -1
- data/spec/workers/bigbluebutton_meeting_updater_spec.rb +86 -5
- metadata +5 -4
@@ -12,7 +12,7 @@
|
|
12
12
|
<div><label><%= BigbluebuttonServer.human_attribute_name(:id) %></label> <%= server.id %></div>
|
13
13
|
<div><label><%= BigbluebuttonServer.human_attribute_name(:name) %></label> <%= server.name %></div>
|
14
14
|
<div><label><%= BigbluebuttonServer.human_attribute_name(:url) %></label> <%= server.url %></div>
|
15
|
-
<div><label><%= BigbluebuttonServer.human_attribute_name(:
|
15
|
+
<div><label><%= BigbluebuttonServer.human_attribute_name(:secret) %></label> <%= server.secret %></div>
|
16
16
|
<div><label><%= BigbluebuttonServer.human_attribute_name(:version) %></label> <%= server.version %></div>
|
17
17
|
<div><label><%= BigbluebuttonServer.human_attribute_name(:param) %></label> <%= server.param %></div>
|
18
18
|
<div><label>Access</label>
|
@@ -1,6 +1,6 @@
|
|
1
1
|
# A resque worker to get information about a meeting with `getMeetingInfo` and update
|
2
|
-
# the associated `BigbluebuttonMeeting` object. This should be
|
3
|
-
#
|
2
|
+
# the associated `BigbluebuttonMeeting` object. This should be called to speed up the
|
3
|
+
# update of a meeting object (usually on creates and ends).
|
4
4
|
class BigbluebuttonMeetingUpdater
|
5
5
|
@queue = :bigbluebutton_rails
|
6
6
|
|
@@ -12,20 +12,13 @@ class BigbluebuttonMeetingUpdater
|
|
12
12
|
if room.nil?
|
13
13
|
Rails.logger.info "BigbluebuttonMeetingUpdater worker: room #{room_id} not found!"
|
14
14
|
else
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
Rails.logger.info "BigbluebuttonMeetingUpdater worker: getMeetingInfo generated an error (usually means that the meeting doesn't exist): #{e}"
|
19
|
-
|
20
|
-
# an error usually means that no meeting was found, so it is not running anymore
|
21
|
-
room.finish_meetings
|
22
|
-
else
|
23
|
-
Rails.logger.info "BigbluebuttonMeetingUpdater worker: updating the meetings for the room #{room_id}"
|
24
|
-
room.update_current_meeting
|
25
|
-
end
|
15
|
+
# `fetch_meeting_info` will automatically update the meeting by
|
16
|
+
# calling `room.update_current_meeting_record`
|
17
|
+
room.fetch_meeting_info
|
26
18
|
end
|
27
19
|
Rails.logger.flush
|
28
20
|
|
29
|
-
#
|
21
|
+
# note: don't need to keep trying because there's a worker that runs periodically
|
22
|
+
# for each meeting that still hasn't ended
|
30
23
|
end
|
31
24
|
end
|
data/bigbluebutton_rails.gemspec
CHANGED
@@ -18,7 +18,7 @@ Gem::Specification.new do |s|
|
|
18
18
|
s.require_paths = ["lib"]
|
19
19
|
|
20
20
|
s.add_dependency("rails", ">= 4.0.0")
|
21
|
-
s.add_dependency("bigbluebutton-api-ruby", "~> 1.
|
21
|
+
s.add_dependency("bigbluebutton-api-ruby", "~> 1.6")
|
22
22
|
s.add_dependency("resque", "~> 1.25.1")
|
23
23
|
s.add_dependency("resque-scheduler", "~> 3.0")
|
24
24
|
s.add_dependency("browser", "~> 0.8.0")
|
data/config/locales/en.yml
CHANGED
data/config/locales/pt-br.yml
CHANGED
data/lib/bigbluebutton_rails.rb
CHANGED
@@ -47,6 +47,12 @@ module BigbluebuttonRails
|
|
47
47
|
mattr_accessor :metadata_user_name
|
48
48
|
@@metadata_user_name = :'bbbrails-user-name'
|
49
49
|
|
50
|
+
# Name of the metadata parameter that will contain the room's invitation
|
51
|
+
# URL, in case `invitation_url_method` is implemented by the application.
|
52
|
+
# Has to be a symbol!
|
53
|
+
mattr_accessor :metadata_invitation_url
|
54
|
+
@@metadata_invitation_url = :'invitation-url'
|
55
|
+
|
50
56
|
# List of invalid metadata keys. Invalid keys are usually keys that are
|
51
57
|
# used by the gem and by the application. The application using this gem
|
52
58
|
# can add items to this list as well.
|
@@ -55,30 +61,31 @@ module BigbluebuttonRails
|
|
55
61
|
@@metadata_invalid_keys =
|
56
62
|
[ @@metadata_room_id,
|
57
63
|
@@metadata_user_id,
|
58
|
-
@@metadata_user_name
|
59
|
-
|
60
|
-
# Name of the metadata parameter that will contain the room's invitation
|
61
|
-
# URL, in case `invitation_url_method` is implemented by the application.
|
62
|
-
# Has to be a symbol!
|
63
|
-
mattr_accessor :metadata_invitation_url
|
64
|
-
@@metadata_invitation_url = :'invitation-url'
|
64
|
+
@@metadata_user_name,
|
65
|
+
@@metadata_invitation_url ]
|
65
66
|
|
66
67
|
# Name of the attribute of a user that defines his name/username.
|
67
|
-
# Has to be a symbol!
|
68
68
|
mattr_accessor :user_attr_name
|
69
69
|
@@user_attr_name = :'name'
|
70
70
|
|
71
71
|
# Name of the attribute of a user that defines his ID.
|
72
|
-
# Has to be a symbol!
|
73
72
|
mattr_accessor :user_attr_id
|
74
73
|
@@user_attr_id = :'id'
|
75
74
|
|
76
75
|
# Name of the method that returns the invitation URL of a room.
|
77
76
|
# Must be implemented by the application, there's no default implemented in this gem.
|
78
|
-
# Has to be a symbol!
|
79
77
|
mattr_accessor :invitation_url_method
|
80
78
|
@@invitation_url_method = :'invitation_url'
|
81
79
|
|
80
|
+
# Name of the method that returns a hash of metadata to be added to create calls.
|
81
|
+
# By default only the metadata created in the database and associated with the room
|
82
|
+
# will be used. This method can be used to dynamically decide on which metadata to
|
83
|
+
# use when a meeting is about to be created.
|
84
|
+
# Receives the meeting as argument and must return a hash where keys are metadata keys
|
85
|
+
# and values are the metadata values.
|
86
|
+
mattr_accessor :dynamic_metadata_method
|
87
|
+
@@dynamic_metadata_method = :'dynamic_metadata'
|
88
|
+
|
82
89
|
# Whether or not the gem should pass the voice bridges set in the rooms when making
|
83
90
|
# API calls. By default it is false, meaning that the voice bridge will never be
|
84
91
|
# passed, so it will be generated by the web conference server. Setting it to true
|
@@ -3,12 +3,16 @@ module BigbluebuttonRails
|
|
3
3
|
# Helper methods to execute tasks that run in resque and rake.
|
4
4
|
class BackgroundTasks
|
5
5
|
|
6
|
+
# For each meeting that hasn't ended yet, call `getMeetingInfo` and update
|
7
|
+
# the meeting attributes or end it.
|
6
8
|
def self.finish_meetings
|
7
|
-
BigbluebuttonMeeting.where(
|
9
|
+
BigbluebuttonMeeting.where(ended: false).find_each do |meeting|
|
8
10
|
Rails.logger.info "BackgroundTasks: Checking if the meeting has ended: #{meeting.inspect}"
|
9
|
-
|
10
|
-
|
11
|
-
meeting
|
11
|
+
room = meeting.room
|
12
|
+
if room.present? #and !meeting.room.fetch_is_running?
|
13
|
+
# `fetch_meeting_info` will automatically update the meeting by
|
14
|
+
# calling `room.update_current_meeting_record`
|
15
|
+
room.fetch_meeting_info
|
12
16
|
end
|
13
17
|
end
|
14
18
|
end
|
@@ -16,7 +20,7 @@ module BigbluebuttonRails
|
|
16
20
|
def self.update_recordings
|
17
21
|
BigbluebuttonServer.find_each do |server|
|
18
22
|
begin
|
19
|
-
server.fetch_recordings
|
23
|
+
server.fetch_recordings(nil, true)
|
20
24
|
Rails.logger.info "BackgroundTasks: List of recordings from #{server.url} updated successfully"
|
21
25
|
rescue Exception => e
|
22
26
|
Rails.logger.info "BackgroundTasks: Failure fetching recordings from #{server.inspect}"
|
@@ -4,7 +4,7 @@ class CreateBigbluebuttonRails < ActiveRecord::Migration
|
|
4
4
|
create_table :bigbluebutton_servers do |t|
|
5
5
|
t.string :name
|
6
6
|
t.string :url
|
7
|
-
t.string :
|
7
|
+
t.string :secret
|
8
8
|
t.string :version
|
9
9
|
t.string :param
|
10
10
|
t.timestamps
|
@@ -93,17 +93,21 @@ class CreateBigbluebuttonRails < ActiveRecord::Migration
|
|
93
93
|
|
94
94
|
create_table :bigbluebutton_meetings do |t|
|
95
95
|
t.integer :server_id
|
96
|
+
t.string :server_url
|
97
|
+
t.string :server_secret
|
96
98
|
t.integer :room_id
|
97
99
|
t.string :meetingid
|
98
100
|
t.string :name
|
99
101
|
t.datetime :start_time
|
102
|
+
t.decimal :create_time, precision: 14, scale: 0
|
100
103
|
t.boolean :running, :default => false
|
101
104
|
t.boolean :recorded, :default => false
|
102
105
|
t.integer :creator_id
|
103
106
|
t.string :creator_name
|
107
|
+
t.boolean :ended, :default => false
|
104
108
|
t.timestamps
|
105
109
|
end
|
106
|
-
add_index :bigbluebutton_meetings, [:meetingid, :
|
110
|
+
add_index :bigbluebutton_meetings, [:meetingid, :create_time], :unique => true
|
107
111
|
|
108
112
|
create_table :bigbluebutton_server_configs do |t|
|
109
113
|
t.integer :server_id
|
@@ -0,0 +1,21 @@
|
|
1
|
+
class BigbluebuttonRailsTo210 < ActiveRecord::Migration
|
2
|
+
def self.up
|
3
|
+
add_column :bigbluebutton_meetings, :server_url, :string
|
4
|
+
add_column :bigbluebutton_meetings, :server_secret, :string
|
5
|
+
add_column :bigbluebutton_meetings, :create_time, :decimal, precision: 14, scale: 0
|
6
|
+
add_column :bigbluebutton_meetings, :ended, :boolean, :default => false
|
7
|
+
remove_index :bigbluebutton_meetings, [:meetingid, :start_time]
|
8
|
+
add_index :bigbluebutton_meetings, [:meetingid, :create_time], :unique => true
|
9
|
+
rename_column :bigbluebutton_servers, :salt, :secret
|
10
|
+
end
|
11
|
+
|
12
|
+
def self.down
|
13
|
+
remove_column :bigbluebutton_meetings, :server_url
|
14
|
+
remove_column :bigbluebutton_meetings, :server_secret
|
15
|
+
remove_column :bigbluebutton_meetings, :create_time
|
16
|
+
remove_column :bigbluebutton_meetings, :ended
|
17
|
+
remove_index :bigbluebutton_meetings, [:meetingid, :create_time]
|
18
|
+
add_index :bigbluebutton_meetings, [:meetingid, :start_time], :unique => true
|
19
|
+
rename_column :bigbluebutton_servers, :secret, :salt
|
20
|
+
end
|
21
|
+
end
|
@@ -8,7 +8,7 @@ describe Bigbluebutton::RoomsController do
|
|
8
8
|
render_views
|
9
9
|
let(:server) { FactoryGirl.create(:bigbluebutton_server) }
|
10
10
|
let(:room) { FactoryGirl.create(:bigbluebutton_room, :server => server) }
|
11
|
-
let(:params_to_ignore) { ['moderator_api_password', 'attendee_api_password'] }
|
11
|
+
let(:params_to_ignore) { ['moderator_api_password', 'attendee_api_password', 'create_time'] }
|
12
12
|
|
13
13
|
describe "#index" do
|
14
14
|
context "basic" do
|
@@ -1020,18 +1020,6 @@ describe Bigbluebutton::RoomsController do
|
|
1020
1020
|
it { should respond_with(:redirect) }
|
1021
1021
|
it { should redirect_to("http://test.com/join/url") }
|
1022
1022
|
end
|
1023
|
-
|
1024
|
-
context "schedules a BigbluebuttonMeetingUpdater" do
|
1025
|
-
before(:each) {
|
1026
|
-
expect {
|
1027
|
-
get :join, :id => room.to_param
|
1028
|
-
}.to change{ Resque.info[:pending] }.by(1)
|
1029
|
-
}
|
1030
|
-
subject { Resque.peek(:bigbluebutton_rails) }
|
1031
|
-
it("should have a job schedule") { subject.should_not be_nil }
|
1032
|
-
it("the job should be the right one") { subject['class'].should eq('BigbluebuttonMeetingUpdater') }
|
1033
|
-
it("the job should have the correct parameters") { subject['args'].should eq([room.id, 15]) }
|
1034
|
-
end
|
1035
1023
|
end
|
1036
1024
|
|
1037
1025
|
context "gets a new config token before joining" do
|
@@ -88,7 +88,7 @@ describe Bigbluebutton::ServersController do
|
|
88
88
|
let(:attrs) { FactoryGirl.attributes_for(:bigbluebutton_server) }
|
89
89
|
let(:params) { { :bigbluebutton_server => attrs } }
|
90
90
|
let(:allowed_params) {
|
91
|
-
[ :name, :url, :
|
91
|
+
[ :name, :url, :secret, :param ]
|
92
92
|
}
|
93
93
|
|
94
94
|
it {
|
@@ -179,7 +179,7 @@ describe Bigbluebutton::ServersController do
|
|
179
179
|
let(:attrs) { FactoryGirl.attributes_for(:bigbluebutton_server) }
|
180
180
|
let(:params) { { :bigbluebutton_server => attrs } }
|
181
181
|
let(:allowed_params) {
|
182
|
-
[ :name, :url, :
|
182
|
+
[ :name, :url, :secret, :param ]
|
183
183
|
}
|
184
184
|
|
185
185
|
it {
|
@@ -6,7 +6,9 @@ FactoryGirl.define do
|
|
6
6
|
m.sequence(:name) { |n| "Name#{n}" }
|
7
7
|
m.recorded false
|
8
8
|
m.running false
|
9
|
+
m.ended false
|
9
10
|
m.start_time { Time.at(Time.now.to_i + rand(999999)) }
|
11
|
+
m.create_time { Time.now.to_i + rand(999999) }
|
10
12
|
# m.creator_id
|
11
13
|
# m.creator_name
|
12
14
|
end
|
@@ -1,5 +1,5 @@
|
|
1
1
|
FactoryGirl.define do
|
2
|
-
factory
|
2
|
+
factory :bigbluebutton_metadata do |r|
|
3
3
|
r.association :owner, :factory => :bigbluebutton_recording
|
4
4
|
r.sequence(:name) { |n| "#{Forgery(:name).first_name.downcase}-#{n}" }
|
5
5
|
r.content { Forgery(:name).full_name }
|
@@ -19,6 +19,7 @@ FactoryGirl.define do
|
|
19
19
|
r.dial_number { SecureRandom.random_number(9999999).to_s }
|
20
20
|
r.sequence(:logout_url) { |n| "http://bigbluebutton#{n}.test.com/logout" }
|
21
21
|
r.sequence(:max_participants) { |n| n }
|
22
|
+
r.create_time { Time.now.to_i + rand(999999) }
|
22
23
|
|
23
24
|
after(:create) do |r|
|
24
25
|
r.updated_at = r.updated_at.change(:usec => 0)
|
@@ -2,7 +2,7 @@ FactoryGirl.define do
|
|
2
2
|
factory :bigbluebutton_server do |s|
|
3
3
|
s.sequence(:name) { |n| "Server #{n}" }
|
4
4
|
s.sequence(:url) { |n| "http://bigbluebutton#{n}.test.com/bigbluebutton/api" }
|
5
|
-
s.
|
5
|
+
s.secret { Forgery(:basic).password :at_least => 30, :at_most => 40 }
|
6
6
|
s.version '0.9'
|
7
7
|
s.sequence(:param) { |n| "server-#{n}" }
|
8
8
|
end
|
@@ -3,55 +3,146 @@ require 'spec_helper'
|
|
3
3
|
describe BigbluebuttonRails::BackgroundTasks do
|
4
4
|
|
5
5
|
describe ".finish_meetings" do
|
6
|
+
let!(:api) { double(BigBlueButton::BigBlueButtonApi) }
|
6
7
|
|
7
|
-
context "set meetings that ended as not running" do
|
8
|
+
context "set meetings that ended as not running and ended" do
|
8
9
|
let(:room) { FactoryGirl.create(:bigbluebutton_room) }
|
9
|
-
let!(:meeting) { FactoryGirl.create(:bigbluebutton_meeting, running: true, room: room) }
|
10
|
+
let!(:meeting) { FactoryGirl.create(:bigbluebutton_meeting, ended: false, running: true, room: room) }
|
11
|
+
let!(:exception) {
|
12
|
+
e = BigBlueButton::BigBlueButtonException.new('Test error')
|
13
|
+
e.key = 'notFound'
|
14
|
+
e
|
15
|
+
}
|
16
|
+
|
10
17
|
before {
|
11
18
|
BigBlueButton::BigBlueButtonApi.any_instance
|
12
19
|
.stub(:get_api_version).and_return("0.9")
|
13
20
|
BigBlueButton::BigBlueButtonApi.any_instance
|
14
|
-
.should_receive(:
|
21
|
+
.should_receive(:get_meeting_info).once { raise exception }
|
15
22
|
}
|
16
23
|
before(:each) { BigbluebuttonRails::BackgroundTasks.finish_meetings }
|
17
|
-
it { meeting.reload.running.should be
|
24
|
+
it { meeting.reload.running.should be(false) }
|
25
|
+
it { meeting.reload.ended.should be(true) }
|
18
26
|
end
|
19
27
|
|
20
28
|
context "doesn't change meetings that are still running" do
|
21
29
|
let(:room) { FactoryGirl.create(:bigbluebutton_room) }
|
22
|
-
let!(:meeting) { FactoryGirl.create(:bigbluebutton_meeting, running: true, room: room) }
|
30
|
+
let!(:meeting) { FactoryGirl.create(:bigbluebutton_meeting, ended: false, running: true, room: room) }
|
23
31
|
before {
|
24
32
|
BigBlueButton::BigBlueButtonApi.any_instance
|
25
33
|
.stub(:get_api_version).and_return("0.9")
|
26
34
|
BigBlueButton::BigBlueButtonApi.any_instance
|
27
|
-
.should_receive(:
|
35
|
+
.should_receive(:get_meeting_info).once.and_return({ running: true })
|
28
36
|
}
|
29
37
|
before(:each) { BigbluebuttonRails::BackgroundTasks.finish_meetings }
|
30
|
-
it { meeting.reload.running.should be
|
38
|
+
it { meeting.reload.running.should be(true) }
|
39
|
+
it { meeting.reload.ended.should be(false) }
|
31
40
|
end
|
32
41
|
|
33
|
-
context "ignores meetings that
|
42
|
+
context "ignores meetings that already ended" do
|
34
43
|
let(:room) { FactoryGirl.create(:bigbluebutton_room) }
|
35
|
-
let!(:meeting) { FactoryGirl.create(:bigbluebutton_meeting,
|
44
|
+
let!(:meeting) { FactoryGirl.create(:bigbluebutton_meeting, ended: true, room: room) }
|
45
|
+
before(:each) {
|
46
|
+
BigbluebuttonRoom.any_instance.should_not_receive(:fetch_meeting_info)
|
47
|
+
BigbluebuttonRails::BackgroundTasks.finish_meetings
|
48
|
+
}
|
49
|
+
it { meeting.reload.running.should be(false) }
|
50
|
+
end
|
51
|
+
|
52
|
+
context "considers both meetings running and not running" do
|
53
|
+
let(:room1) { FactoryGirl.create(:bigbluebutton_room) }
|
54
|
+
let(:room2) { FactoryGirl.create(:bigbluebutton_room) }
|
55
|
+
let!(:meeting1) { FactoryGirl.create(:bigbluebutton_meeting, ended: false, running: true, room: room1) }
|
56
|
+
let!(:meeting2) { FactoryGirl.create(:bigbluebutton_meeting, ended: false, running: false, room: room2) }
|
57
|
+
let!(:exception) {
|
58
|
+
e = BigBlueButton::BigBlueButtonException.new('Test error')
|
59
|
+
e.key = 'notFound'
|
60
|
+
e
|
61
|
+
}
|
62
|
+
|
36
63
|
before {
|
37
|
-
BigBlueButton::BigBlueButtonApi.any_instance
|
64
|
+
BigBlueButton::BigBlueButtonApi.any_instance
|
65
|
+
.stub(:get_api_version).and_return("0.9")
|
66
|
+
BigBlueButton::BigBlueButtonApi.any_instance.stub(:get_meeting_info) { raise exception }
|
38
67
|
}
|
39
68
|
before(:each) { BigbluebuttonRails::BackgroundTasks.finish_meetings }
|
40
|
-
it {
|
69
|
+
it { meeting1.reload.running.should be(false) }
|
70
|
+
it { meeting1.reload.ended.should be(true) }
|
71
|
+
it { meeting1.reload.running.should be(false) }
|
72
|
+
it { meeting1.reload.ended.should be(true) }
|
73
|
+
end
|
74
|
+
|
75
|
+
context "ignore meetings that have no room" do
|
76
|
+
let(:room) { FactoryGirl.create(:bigbluebutton_room) }
|
77
|
+
let!(:meeting) { FactoryGirl.create(:bigbluebutton_meeting, ended: false, running: true, room: room) }
|
78
|
+
before(:each) {
|
79
|
+
BigbluebuttonRoom.any_instance.should_not_receive(:fetch_meeting_info)
|
80
|
+
meeting.room.delete
|
81
|
+
BigbluebuttonRails::BackgroundTasks.finish_meetings
|
82
|
+
}
|
83
|
+
it { meeting.reload.running.should be(true) }
|
41
84
|
end
|
42
85
|
|
43
|
-
|
86
|
+
context "calls finish_meetings if an exception 'notFound' is raised" do
|
87
|
+
let!(:room) { FactoryGirl.create(:bigbluebutton_room) }
|
88
|
+
let!(:meeting) { FactoryGirl.create(:bigbluebutton_meeting, ended: false, running: true, room: room) }
|
89
|
+
let!(:exception) {
|
90
|
+
e = BigBlueButton::BigBlueButtonException.new('Test error')
|
91
|
+
e.key = 'notFound'
|
92
|
+
e
|
93
|
+
}
|
94
|
+
|
95
|
+
before {
|
96
|
+
BigbluebuttonServer.any_instance.should_receive(:api) { api }
|
97
|
+
expect(api).to receive(:get_meeting_info).once { raise exception }
|
98
|
+
BigbluebuttonRoom.any_instance.should_receive(:finish_meetings).once
|
99
|
+
}
|
100
|
+
it { expect { BigbluebuttonRails::BackgroundTasks.finish_meetings }.not_to raise_exception }
|
101
|
+
end
|
102
|
+
|
103
|
+
context "calls finish_meetings if an exception other than 'notFound' is raised" do
|
104
|
+
let!(:room) { FactoryGirl.create(:bigbluebutton_room) }
|
105
|
+
let!(:meeting) { FactoryGirl.create(:bigbluebutton_meeting, ended: false, running: true, room: room) }
|
106
|
+
let!(:exception) {
|
107
|
+
e = BigBlueButton::BigBlueButtonException.new('Test error')
|
108
|
+
e.key = 'anythingElse'
|
109
|
+
e
|
110
|
+
}
|
111
|
+
|
112
|
+
before {
|
113
|
+
BigbluebuttonServer.any_instance.should_receive(:api) { api }
|
114
|
+
expect(api).to receive(:get_meeting_info).once { raise exception }
|
115
|
+
BigbluebuttonRoom.any_instance.should_receive(:finish_meetings)
|
116
|
+
}
|
117
|
+
it { expect { BigbluebuttonRails::BackgroundTasks.finish_meetings }.not_to raise_exception }
|
118
|
+
end
|
119
|
+
|
120
|
+
context "calls finish_meetings if an exception with a blank key is raised" do
|
121
|
+
let!(:room) { FactoryGirl.create(:bigbluebutton_room) }
|
122
|
+
let!(:meeting) { FactoryGirl.create(:bigbluebutton_meeting, ended: false, running: true, room: room) }
|
123
|
+
let!(:exception) {
|
124
|
+
e = BigBlueButton::BigBlueButtonException.new('Test error')
|
125
|
+
e.key = ''
|
126
|
+
e
|
127
|
+
}
|
128
|
+
|
129
|
+
before {
|
130
|
+
BigbluebuttonServer.any_instance.should_receive(:api) { api }
|
131
|
+
expect(api).to receive(:get_meeting_info).once { raise exception }
|
132
|
+
BigbluebuttonRoom.any_instance.should_receive(:finish_meetings)
|
133
|
+
}
|
134
|
+
it { expect { BigbluebuttonRails::BackgroundTasks.finish_meetings }.not_to raise_exception }
|
135
|
+
end
|
44
136
|
end
|
45
137
|
|
46
138
|
describe ".update_recordings" do
|
47
|
-
|
48
139
|
context "fetches the meetings for all servers" do
|
49
140
|
let!(:server1) { FactoryGirl.create(:bigbluebutton_server) }
|
50
141
|
let!(:server2) { FactoryGirl.create(:bigbluebutton_server) }
|
51
142
|
before {
|
52
143
|
BigbluebuttonServer.stub(:find_each).and_yield(server1).and_yield(server2)
|
53
|
-
server1.should_receive(:fetch_recordings).once
|
54
|
-
server2.should_receive(:fetch_recordings).once
|
144
|
+
server1.should_receive(:fetch_recordings).once.with(nil, true)
|
145
|
+
server2.should_receive(:fetch_recordings).once.with(nil, true)
|
55
146
|
}
|
56
147
|
it { BigbluebuttonRails::BackgroundTasks.update_recordings }
|
57
148
|
end
|