bigbluebutton_rails 2.2.0 → 2.3.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/.travis.yml +3 -3
- data/CHANGELOG.md +34 -0
- data/Dockerfile +23 -0
- data/Gemfile +3 -0
- data/Gemfile.lock +14 -5
- data/README.md +42 -59
- data/Rakefile +6 -3
- data/app/controllers/bigbluebutton/api/rooms_controller.rb +117 -0
- data/app/controllers/bigbluebutton/playback_types_controller.rb +0 -3
- data/app/controllers/bigbluebutton/recordings_controller.rb +37 -23
- data/app/controllers/bigbluebutton/rooms_controller.rb +6 -31
- data/app/controllers/bigbluebutton/servers_controller.rb +0 -14
- data/app/helpers/bigbluebutton_rails_helper.rb +4 -0
- data/app/models/bigbluebutton_attendee.rb +21 -0
- data/app/models/bigbluebutton_meeting.rb +5 -0
- data/app/models/bigbluebutton_playback_format.rb +3 -2
- data/app/models/bigbluebutton_recording.rb +164 -68
- data/app/models/bigbluebutton_room.rb +148 -59
- data/app/models/bigbluebutton_server.rb +1 -1
- data/app/views/bigbluebutton/api/error.rabl +10 -0
- data/app/views/bigbluebutton/api/rooms/index.rabl +45 -0
- data/app/views/bigbluebutton/api/rooms/join.rabl +6 -0
- data/app/views/bigbluebutton/api/rooms/running.rabl +10 -0
- data/app/views/bigbluebutton/recordings/play.html.erb +1 -0
- data/app/views/bigbluebutton/servers/_activity_list.html.erb +5 -5
- data/app/workers/{bigbluebutton_finish_meetings.rb → bigbluebutton_finish_meetings_worker.rb} +2 -2
- data/app/workers/{bigbluebutton_meeting_updater.rb → bigbluebutton_meeting_updater_worker.rb} +3 -3
- data/app/workers/bigbluebutton_recordings_for_room_worker.rb +27 -0
- data/app/workers/{bigbluebutton_update_recordings.rb → bigbluebutton_update_recordings_worker.rb} +2 -2
- data/app/workers/{bigbluebutton_update_server_configs.rb → bigbluebutton_update_server_configs_worker.rb} +3 -3
- data/bigbluebutton_rails.gemspec +1 -0
- data/config/locales/en.yml +21 -0
- data/config/locales/pt-br.yml +1 -0
- data/config/resque/resque.rake +7 -1
- data/config/resque/workers_schedule.yml +3 -3
- data/docker-compose.yml +68 -0
- data/dumb-init_1.2.0 +0 -0
- data/lib/bigbluebutton_rails.rb +1 -2
- data/lib/bigbluebutton_rails/api_controller_methods.rb +138 -0
- data/lib/bigbluebutton_rails/configuration.rb +33 -4
- data/lib/bigbluebutton_rails/controller_methods.rb +0 -31
- data/lib/bigbluebutton_rails/exceptions.rb +17 -0
- data/lib/bigbluebutton_rails/rails/routes.rb +14 -0
- data/lib/bigbluebutton_rails/version.rb +1 -1
- data/lib/generators/bigbluebutton_rails/templates/migration.rb +17 -3
- data/lib/generators/bigbluebutton_rails/templates/migration_2_2_0.rb +1 -1
- data/lib/generators/bigbluebutton_rails/templates/migration_2_2_0_b.rb +106 -0
- data/lib/generators/bigbluebutton_rails/templates/migration_2_3_0.rb +22 -0
- data/lib/tasks/bigbluebutton_rails/meetings.rake +1 -1
- data/spec/controllers/bigbluebutton/api/rooms_controller_spec.rb +498 -0
- data/spec/controllers/bigbluebutton/recordings_controller_spec.rb +84 -0
- data/spec/controllers/bigbluebutton/rooms_controller_exception_handling_spec.rb +2 -2
- data/spec/controllers/bigbluebutton/rooms_controller_spec.rb +24 -22
- data/spec/controllers/bigbluebutton/servers_controller_spec.rb +9 -0
- data/spec/factories/bigbluebutton_attendee.rb +7 -0
- data/spec/factories/bigbluebutton_meeting.rb +0 -1
- data/spec/factories/bigbluebutton_playback_type.rb +1 -0
- data/spec/factories/bigbluebutton_recording.rb +2 -4
- data/spec/helpers/bigbluebutton_rails_helper_spec.rb +10 -2
- data/spec/lib/bigbluebutton_rails/background_tasks_spec.rb +1 -0
- data/spec/lib/tasks/meetings_rake_spec.rb +1 -1
- data/spec/models/bigbluebutton_attendee_spec.rb +44 -0
- data/spec/models/bigbluebutton_meeting_db_spec.rb +0 -1
- data/spec/models/bigbluebutton_meeting_spec.rb +1 -0
- data/spec/models/bigbluebutton_playback_format_spec.rb +2 -0
- data/spec/models/bigbluebutton_playback_type_db_spec.rb +1 -0
- data/spec/models/bigbluebutton_recording_db_spec.rb +2 -2
- data/spec/models/bigbluebutton_recording_spec.rb +404 -72
- data/spec/models/bigbluebutton_room_spec.rb +435 -148
- data/spec/rails_app/config/database.yml.example +10 -11
- data/spec/rails_app/config/initializers/resque.rb +33 -0
- data/spec/rails_app/config/routes.rb +2 -0
- data/spec/rails_app/lib/tasks/db/populate.rake +73 -55
- data/spec/support/mocked_server.rb +1 -1
- data/spec/workers/{bigbluebutton_finish_meetings_spec.rb → bigbluebutton_finish_meetings_worker_spec.rb} +3 -3
- data/spec/workers/{bigbluebutton_meeting_updater_spec.rb → bigbluebutton_meeting_updater_worker_spec.rb} +8 -7
- data/spec/workers/bigbluebutton_recordings_for_room_worker_spec.rb +49 -0
- data/spec/workers/{bigbluebutton_update_recordings_spec.rb → bigbluebutton_update_recordings_worker_spec.rb} +3 -3
- data/spec/workers/{bigbluebutton_update_server_configs_spec.rb → bigbluebutton_update_server_configs_worker_spec.rb} +4 -4
- metadata +42 -14
- data/lib/classes/bigbluebutton_attendee.rb +0 -21
- data/spec/classes/bigbluebutton_attendee_spec.rb +0 -76
- data/spec/controllers/bigbluebutton/recordings_controller_json_responses_spec.rb +0 -111
- data/spec/controllers/bigbluebutton/rooms_controller_json_responses_spec.rb +0 -203
- data/spec/controllers/bigbluebutton/servers_controller_json_responses_spec.rb +0 -162
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
# Used to store the attendees of a meeting as returned by BigBlueButton in
|
|
2
|
-
# <tt>get_meeting_info</tt>.
|
|
3
|
-
class BigbluebuttonAttendee
|
|
4
|
-
|
|
5
|
-
attr_accessor :user_id, :full_name, :role
|
|
6
|
-
|
|
7
|
-
def from_hash(hash)
|
|
8
|
-
self.user_id = hash[:userID].to_s
|
|
9
|
-
self.full_name = hash[:fullName].to_s
|
|
10
|
-
self.role = hash[:role].to_s.downcase == "moderator" ? :moderator : :attendee
|
|
11
|
-
end
|
|
12
|
-
|
|
13
|
-
def ==(other)
|
|
14
|
-
r = true
|
|
15
|
-
[:user_id, :full_name, :role].each do |param|
|
|
16
|
-
r = r && self.send(param) == other.send(param)
|
|
17
|
-
end
|
|
18
|
-
r
|
|
19
|
-
end
|
|
20
|
-
|
|
21
|
-
end
|
|
@@ -1,76 +0,0 @@
|
|
|
1
|
-
require 'spec_helper'
|
|
2
|
-
|
|
3
|
-
describe BigbluebuttonAttendee do
|
|
4
|
-
|
|
5
|
-
it "should be recognized" do
|
|
6
|
-
lambda { BigbluebuttonAttendee.new }.should_not raise_error
|
|
7
|
-
end
|
|
8
|
-
|
|
9
|
-
[:user_id, :full_name, :role].each do |attr|
|
|
10
|
-
it { should respond_to(attr) }
|
|
11
|
-
it { should respond_to(:"#{attr}=") }
|
|
12
|
-
end
|
|
13
|
-
|
|
14
|
-
context "equality" do
|
|
15
|
-
let(:attendee1) {
|
|
16
|
-
attendee = BigbluebuttonAttendee.new
|
|
17
|
-
attendee.user_id = Forgery(:basic).password
|
|
18
|
-
attendee.full_name = Forgery(:name).full_name
|
|
19
|
-
attendee.role = :attendee
|
|
20
|
-
attendee
|
|
21
|
-
}
|
|
22
|
-
let(:attendee2) {
|
|
23
|
-
attendee = BigbluebuttonAttendee.new
|
|
24
|
-
attendee.user_id = Forgery(:basic).password
|
|
25
|
-
attendee.full_name = Forgery(:name).full_name
|
|
26
|
-
attendee.role = :moderator
|
|
27
|
-
attendee
|
|
28
|
-
}
|
|
29
|
-
let(:attendee3) {
|
|
30
|
-
attendee = BigbluebuttonAttendee.new
|
|
31
|
-
attendee.user_id = attendee1.user_id
|
|
32
|
-
attendee.full_name = attendee1.full_name
|
|
33
|
-
attendee.role = attendee1.role
|
|
34
|
-
attendee
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
it { attendee1.should == attendee3 }
|
|
38
|
-
it { attendee1.should_not == attendee2 }
|
|
39
|
-
it { attendee2.should_not == attendee3 }
|
|
40
|
-
end
|
|
41
|
-
|
|
42
|
-
context "gets params from hash" do
|
|
43
|
-
let(:hash) { {:userID=>"user_id", :fullName=>"House M.D.", :role=>"MODERATOR"} }
|
|
44
|
-
let(:attendee) { BigbluebuttonAttendee.new }
|
|
45
|
-
|
|
46
|
-
it "standard case" do
|
|
47
|
-
attendee.from_hash(hash)
|
|
48
|
-
attendee.user_id.should == "user_id"
|
|
49
|
-
attendee.full_name.should == "House M.D."
|
|
50
|
-
attendee.role.should == :moderator
|
|
51
|
-
end
|
|
52
|
-
|
|
53
|
-
it "converts user_id to string" do
|
|
54
|
-
hash[:userID] = 123
|
|
55
|
-
attendee.from_hash(hash)
|
|
56
|
-
attendee.user_id.should == "123"
|
|
57
|
-
end
|
|
58
|
-
|
|
59
|
-
it "role is not case sensitive" do
|
|
60
|
-
hash[:role] = "mODErAtOR"
|
|
61
|
-
attendee.from_hash(hash)
|
|
62
|
-
attendee.role.should == :moderator
|
|
63
|
-
end
|
|
64
|
-
|
|
65
|
-
it "any role other than 'moderator' is attendee" do
|
|
66
|
-
hash[:role] = "VIEWER"
|
|
67
|
-
attendee.from_hash(hash)
|
|
68
|
-
attendee.role.should == :attendee
|
|
69
|
-
|
|
70
|
-
hash[:role] = "whatever"
|
|
71
|
-
attendee.from_hash(hash)
|
|
72
|
-
attendee.role.should == :attendee
|
|
73
|
-
end
|
|
74
|
-
end
|
|
75
|
-
|
|
76
|
-
end
|
|
@@ -1,111 +0,0 @@
|
|
|
1
|
-
require 'spec_helper'
|
|
2
|
-
|
|
3
|
-
describe Bigbluebutton::RecordingsController do
|
|
4
|
-
render_views
|
|
5
|
-
let(:recording) { FactoryGirl.create(:bigbluebutton_recording) }
|
|
6
|
-
|
|
7
|
-
context "json responses for" do
|
|
8
|
-
|
|
9
|
-
describe "#index" do
|
|
10
|
-
before do
|
|
11
|
-
@recording1 = FactoryGirl.create(:bigbluebutton_recording)
|
|
12
|
-
@recording2 = FactoryGirl.create(:bigbluebutton_recording)
|
|
13
|
-
end
|
|
14
|
-
before(:each) { get :index, :format => 'json' }
|
|
15
|
-
it { should respond_with(:success) }
|
|
16
|
-
it { should respond_with_content_type('application/json') }
|
|
17
|
-
it { should respond_with_json([@recording1, @recording2].to_json) }
|
|
18
|
-
end
|
|
19
|
-
|
|
20
|
-
describe "#show" do
|
|
21
|
-
before(:each) { get :show, :id => recording.to_param, :format => 'json' }
|
|
22
|
-
it { should respond_with(:success) }
|
|
23
|
-
it { should respond_with_content_type('application/json') }
|
|
24
|
-
it { should respond_with_json(recording.to_json) }
|
|
25
|
-
end
|
|
26
|
-
|
|
27
|
-
describe "#show" do
|
|
28
|
-
before(:each) { get :show, :id => recording.to_param, :format => 'json' }
|
|
29
|
-
it { should respond_with(:success) }
|
|
30
|
-
it { should respond_with_content_type('application/json') }
|
|
31
|
-
it { should respond_with_json(recording.to_json) }
|
|
32
|
-
end
|
|
33
|
-
|
|
34
|
-
describe "#update" do
|
|
35
|
-
let(:new_recording) { FactoryGirl.build(:bigbluebutton_recording) }
|
|
36
|
-
before { @recording = recording }
|
|
37
|
-
|
|
38
|
-
context "on success" do
|
|
39
|
-
before(:each) {
|
|
40
|
-
put :update, :id => @recording.to_param, :bigbluebutton_recording => new_recording.attributes, :format => 'json'
|
|
41
|
-
}
|
|
42
|
-
it { should respond_with(:success) }
|
|
43
|
-
it { should respond_with_content_type('application/json') }
|
|
44
|
-
it { response.body.should eq("true") }
|
|
45
|
-
end
|
|
46
|
-
|
|
47
|
-
context "on failure" do
|
|
48
|
-
before {
|
|
49
|
-
BigbluebuttonRecording.any_instance.should_receive(:update_attributes).and_return(false)
|
|
50
|
-
}
|
|
51
|
-
before(:each) {
|
|
52
|
-
put :update, :id => @recording.to_param, :bigbluebutton_recording => new_recording.attributes, :format => 'json'
|
|
53
|
-
}
|
|
54
|
-
it { should respond_with(:unprocessable_entity) }
|
|
55
|
-
it { should respond_with_content_type('application/json') }
|
|
56
|
-
it { should respond_with_json([].to_json) }
|
|
57
|
-
end
|
|
58
|
-
end
|
|
59
|
-
|
|
60
|
-
describe "#destroy" do
|
|
61
|
-
before :each do
|
|
62
|
-
@recording = recording
|
|
63
|
-
@recording.server = nil
|
|
64
|
-
BigbluebuttonRecording.stub(:find_by_recordid) { @recording }
|
|
65
|
-
delete :destroy, :id => @recording.to_param, :format => 'json'
|
|
66
|
-
end
|
|
67
|
-
it { should respond_with(:success) }
|
|
68
|
-
it { should respond_with_content_type('application/json') }
|
|
69
|
-
end
|
|
70
|
-
|
|
71
|
-
# these actions are essentially the same
|
|
72
|
-
[:publish, :unpublish].each do |action|
|
|
73
|
-
describe "##{action.to_s}" do
|
|
74
|
-
before { mock_server_and_api }
|
|
75
|
-
let(:flag) { action == :publish ? true : false }
|
|
76
|
-
|
|
77
|
-
context "on success" do
|
|
78
|
-
before {
|
|
79
|
-
mocked_server.should_receive(:send_publish_recordings).with(recording.recordid, flag)
|
|
80
|
-
}
|
|
81
|
-
before(:each) { post action, :id => recording.to_param, :format => 'json' }
|
|
82
|
-
it { should respond_with(:success) }
|
|
83
|
-
it { should respond_with_content_type('application/json') }
|
|
84
|
-
it { should respond_with_json(I18n.t("bigbluebutton_rails.recordings.notice.#{action.to_s}.success")) }
|
|
85
|
-
end
|
|
86
|
-
|
|
87
|
-
context "on failure" do
|
|
88
|
-
let(:bbb_error_msg) { SecureRandom.hex(250) }
|
|
89
|
-
let(:bbb_error) { BigBlueButton::BigBlueButtonException.new(bbb_error_msg) }
|
|
90
|
-
before {
|
|
91
|
-
request.env["HTTP_REFERER"] = "/any"
|
|
92
|
-
mocked_server.should_receive(:send_publish_recordings) { raise bbb_error }
|
|
93
|
-
}
|
|
94
|
-
before(:each) { post action, :id => recording.to_param, :format => 'json' }
|
|
95
|
-
it { should respond_with(:error) }
|
|
96
|
-
it { should respond_with_content_type('application/json') }
|
|
97
|
-
it { should respond_with_json(bbb_error_msg[0..200]) }
|
|
98
|
-
end
|
|
99
|
-
|
|
100
|
-
context "returns error if there's no server associated" do
|
|
101
|
-
before { recording.stub(:server) { nil } }
|
|
102
|
-
before(:each) { post action, :id => recording.to_param, :format => 'json' }
|
|
103
|
-
it { should respond_with(:error) }
|
|
104
|
-
it { should respond_with_content_type('application/json') }
|
|
105
|
-
it { should respond_with_json(I18n.t('bigbluebutton_rails.recordings.errors.check_for_server.no_server')) }
|
|
106
|
-
end
|
|
107
|
-
end
|
|
108
|
-
end
|
|
109
|
-
|
|
110
|
-
end
|
|
111
|
-
end
|
|
@@ -1,203 +0,0 @@
|
|
|
1
|
-
require 'spec_helper'
|
|
2
|
-
|
|
3
|
-
describe Bigbluebutton::RoomsController do
|
|
4
|
-
render_views
|
|
5
|
-
let(:server) { FactoryGirl.create(:bigbluebutton_server) }
|
|
6
|
-
let(:room) { FactoryGirl.create(:bigbluebutton_room) }
|
|
7
|
-
before do
|
|
8
|
-
BigbluebuttonRoom.stub(:find_by_param) { room }
|
|
9
|
-
BigbluebuttonRoom.stub(:find) { room }
|
|
10
|
-
end
|
|
11
|
-
|
|
12
|
-
context "json responses for" do
|
|
13
|
-
|
|
14
|
-
describe "#index" do
|
|
15
|
-
before do
|
|
16
|
-
@room1 = FactoryGirl.create(:bigbluebutton_room)
|
|
17
|
-
@room2 = FactoryGirl.create(:bigbluebutton_room)
|
|
18
|
-
end
|
|
19
|
-
before(:each) { get :index, :format => 'json' }
|
|
20
|
-
it { should respond_with(:success) }
|
|
21
|
-
it { should respond_with_content_type('application/json') }
|
|
22
|
-
it { should respond_with_json([@room1, @room2].to_json) }
|
|
23
|
-
end
|
|
24
|
-
|
|
25
|
-
describe "#new" do
|
|
26
|
-
before(:each) { get :new, :format => 'json' }
|
|
27
|
-
it { should respond_with(:success) }
|
|
28
|
-
it { should respond_with_content_type('application/json') }
|
|
29
|
-
it {
|
|
30
|
-
# we ignore all values bc a BigbluebuttonRoom is generated with some
|
|
31
|
-
# random values (meetingid, voice_bridge)
|
|
32
|
-
should respond_with_json(BigbluebuttonRoom.new.to_json).ignoring_values
|
|
33
|
-
}
|
|
34
|
-
end
|
|
35
|
-
|
|
36
|
-
describe "#show" do
|
|
37
|
-
before(:each) { get :show, :id => room.to_param, :format => 'json' }
|
|
38
|
-
it { should respond_with(:success) }
|
|
39
|
-
it { should respond_with_content_type('application/json') }
|
|
40
|
-
it { should respond_with_json(room.to_json) }
|
|
41
|
-
end
|
|
42
|
-
|
|
43
|
-
describe "#create" do
|
|
44
|
-
let(:new_room) { FactoryGirl.build(:bigbluebutton_room) }
|
|
45
|
-
|
|
46
|
-
context "on success" do
|
|
47
|
-
before(:each) {
|
|
48
|
-
post :create, :bigbluebutton_room => new_room.attributes, :format => 'json'
|
|
49
|
-
}
|
|
50
|
-
it { should respond_with(:created) }
|
|
51
|
-
it { should respond_with_content_type('application/json') }
|
|
52
|
-
it {
|
|
53
|
-
json = { :message => I18n.t('bigbluebutton_rails.rooms.notice.create.success') }.to_json
|
|
54
|
-
should respond_with_json(json)
|
|
55
|
-
}
|
|
56
|
-
end
|
|
57
|
-
|
|
58
|
-
context "on failure" do
|
|
59
|
-
before(:each) {
|
|
60
|
-
new_room.name = nil # invalid
|
|
61
|
-
post :create, :bigbluebutton_room => new_room.attributes, :format => 'json'
|
|
62
|
-
}
|
|
63
|
-
it { should respond_with(:unprocessable_entity) }
|
|
64
|
-
it { should respond_with_content_type('application/json') }
|
|
65
|
-
it {
|
|
66
|
-
new_room.save # should fail
|
|
67
|
-
should respond_with_json(new_room.errors.full_messages.to_json)
|
|
68
|
-
}
|
|
69
|
-
end
|
|
70
|
-
end
|
|
71
|
-
|
|
72
|
-
describe "#update" do
|
|
73
|
-
let(:new_room) { FactoryGirl.build(:bigbluebutton_room) }
|
|
74
|
-
before { @room = room }
|
|
75
|
-
|
|
76
|
-
context "on success" do
|
|
77
|
-
before(:each) {
|
|
78
|
-
put :update, :id => @room.to_param, :bigbluebutton_room => new_room.attributes, :format => 'json'
|
|
79
|
-
}
|
|
80
|
-
it { should respond_with(:success) }
|
|
81
|
-
it { should respond_with_content_type('application/json') }
|
|
82
|
-
it {
|
|
83
|
-
json = { :message => I18n.t('bigbluebutton_rails.rooms.notice.update.success') }.to_json
|
|
84
|
-
should respond_with_json(json)
|
|
85
|
-
}
|
|
86
|
-
end
|
|
87
|
-
|
|
88
|
-
context "on failure" do
|
|
89
|
-
before(:each) {
|
|
90
|
-
new_room.name = nil # invalid
|
|
91
|
-
put :update, :id => @room.to_param, :bigbluebutton_room => new_room.attributes, :format => 'json'
|
|
92
|
-
}
|
|
93
|
-
it { should respond_with(:unprocessable_entity) }
|
|
94
|
-
it { should respond_with_content_type('application/json') }
|
|
95
|
-
it {
|
|
96
|
-
new_room.save # should fail
|
|
97
|
-
should respond_with_json(new_room.errors.full_messages.to_json)
|
|
98
|
-
}
|
|
99
|
-
end
|
|
100
|
-
end
|
|
101
|
-
|
|
102
|
-
describe "#end" do
|
|
103
|
-
before { mock_server_and_api }
|
|
104
|
-
|
|
105
|
-
context "room is running" do
|
|
106
|
-
before {
|
|
107
|
-
mocked_api.should_receive(:is_meeting_running?).and_return(true)
|
|
108
|
-
mocked_api.should_receive(:end_meeting).with(room.meetingid, room.moderator_api_password)
|
|
109
|
-
}
|
|
110
|
-
before(:each) { get :end, :id => room.to_param, :format => 'json' }
|
|
111
|
-
it { should respond_with(:success) }
|
|
112
|
-
it { should respond_with_content_type('application/json') }
|
|
113
|
-
it { should respond_with_json(I18n.t('bigbluebutton_rails.rooms.notice.end.success')) }
|
|
114
|
-
end
|
|
115
|
-
|
|
116
|
-
context "room is not running" do
|
|
117
|
-
before { mocked_api.should_receive(:is_meeting_running?).and_return(false) }
|
|
118
|
-
before(:each) { get :end, :id => room.to_param, :format => 'json' }
|
|
119
|
-
it { should respond_with(:error) }
|
|
120
|
-
it { should respond_with_content_type('application/json') }
|
|
121
|
-
it { should respond_with_json(I18n.t('bigbluebutton_rails.rooms.notice.end.not_running')) }
|
|
122
|
-
end
|
|
123
|
-
|
|
124
|
-
context "throwing an exception" do
|
|
125
|
-
let(:msg) { "any error message" }
|
|
126
|
-
before {
|
|
127
|
-
mocked_api.should_receive(:is_meeting_running?) { raise BigBlueButton::BigBlueButtonException.new(msg) }
|
|
128
|
-
}
|
|
129
|
-
before(:each) { get :end, :id => room.to_param, :format => 'json' }
|
|
130
|
-
it { should respond_with(:error) }
|
|
131
|
-
it { should respond_with_content_type('application/json') }
|
|
132
|
-
it { should respond_with_json(msg) }
|
|
133
|
-
end
|
|
134
|
-
|
|
135
|
-
end
|
|
136
|
-
|
|
137
|
-
describe "#destroy" do
|
|
138
|
-
before { mock_server_and_api }
|
|
139
|
-
|
|
140
|
-
context "on success" do
|
|
141
|
-
before {
|
|
142
|
-
mocked_api.should_receive(:is_meeting_running?).and_return(true)
|
|
143
|
-
mocked_api.should_receive(:end_meeting)
|
|
144
|
-
}
|
|
145
|
-
before(:each) {
|
|
146
|
-
delete :destroy, :id => room.to_param, :format => 'json'
|
|
147
|
-
}
|
|
148
|
-
it { should respond_with(:success) }
|
|
149
|
-
it { should respond_with_content_type('application/json') }
|
|
150
|
-
it {
|
|
151
|
-
json = { :message => I18n.t('bigbluebutton_rails.rooms.notice.destroy.success') }.to_json
|
|
152
|
-
should respond_with_json(json)
|
|
153
|
-
}
|
|
154
|
-
end
|
|
155
|
-
|
|
156
|
-
context "throwing error" do
|
|
157
|
-
let(:msg) { "any error message" }
|
|
158
|
-
before {
|
|
159
|
-
mocked_api.should_receive(:is_meeting_running?) { raise BigBlueButton::BigBlueButtonException.new(msg) }
|
|
160
|
-
}
|
|
161
|
-
before(:each) {
|
|
162
|
-
delete :destroy, :id => room.to_param, :format => 'json'
|
|
163
|
-
}
|
|
164
|
-
it { should respond_with(:error) }
|
|
165
|
-
it { should respond_with_content_type('application/json') }
|
|
166
|
-
it {
|
|
167
|
-
error_msg = I18n.t('bigbluebutton_rails.rooms.notice.destroy.success_with_bbb_error', :error => msg)
|
|
168
|
-
should respond_with_json({ :message => error_msg }.to_json)
|
|
169
|
-
}
|
|
170
|
-
end
|
|
171
|
-
end
|
|
172
|
-
|
|
173
|
-
describe "#fetch_recordings" do
|
|
174
|
-
it "on success"
|
|
175
|
-
it "on error"
|
|
176
|
-
end
|
|
177
|
-
|
|
178
|
-
describe "#generate_dial_number" do
|
|
179
|
-
context "on success" do
|
|
180
|
-
before(:each) {
|
|
181
|
-
BigbluebuttonRoom.any_instance.stub(:generate_dial_number!).and_return(true)
|
|
182
|
-
post :generate_dial_number, id: room.to_param, format: 'json'
|
|
183
|
-
}
|
|
184
|
-
it { should respond_with(:success) }
|
|
185
|
-
it { should respond_with_content_type('application/json') }
|
|
186
|
-
end
|
|
187
|
-
|
|
188
|
-
context "on error" do
|
|
189
|
-
before(:each) {
|
|
190
|
-
BigbluebuttonRoom.any_instance.stub(:generate_dial_number!).and_return(nil)
|
|
191
|
-
post :generate_dial_number, id: room.to_param, format: 'json'
|
|
192
|
-
}
|
|
193
|
-
it { should respond_with(:error) }
|
|
194
|
-
it { should respond_with_content_type('application/json') }
|
|
195
|
-
it {
|
|
196
|
-
error_msg = I18n.t('bigbluebutton_rails.rooms.errors.generate_dial_number.not_unique')
|
|
197
|
-
should respond_with_json({ :message => error_msg }.to_json)
|
|
198
|
-
}
|
|
199
|
-
end
|
|
200
|
-
end
|
|
201
|
-
|
|
202
|
-
end
|
|
203
|
-
end
|
|
@@ -1,162 +0,0 @@
|
|
|
1
|
-
require 'spec_helper'
|
|
2
|
-
|
|
3
|
-
describe Bigbluebutton::ServersController do
|
|
4
|
-
render_views
|
|
5
|
-
let!(:server) { FactoryGirl.create(:bigbluebutton_server) }
|
|
6
|
-
|
|
7
|
-
context "json responses for" do
|
|
8
|
-
|
|
9
|
-
describe "#index" do
|
|
10
|
-
before do
|
|
11
|
-
BigbluebuttonServer.destroy_all
|
|
12
|
-
@server1 = FactoryGirl.create(:bigbluebutton_server)
|
|
13
|
-
@server2 = FactoryGirl.create(:bigbluebutton_server)
|
|
14
|
-
end
|
|
15
|
-
before(:each) { get :index, :format => 'json' }
|
|
16
|
-
it { should respond_with(:success) }
|
|
17
|
-
it { should respond_with_content_type('application/json') }
|
|
18
|
-
it { should respond_with_json([@server1, @server2].to_json) }
|
|
19
|
-
end
|
|
20
|
-
|
|
21
|
-
describe "#new" do
|
|
22
|
-
before(:each) { get :new, :format => 'json' }
|
|
23
|
-
it { should respond_with(:success) }
|
|
24
|
-
it { should respond_with_content_type('application/json') }
|
|
25
|
-
it { should respond_with_json(BigbluebuttonServer.new.to_json).ignoring_values }
|
|
26
|
-
end
|
|
27
|
-
|
|
28
|
-
describe "#show" do
|
|
29
|
-
before(:each) { get :show, :id => server.to_param, :format => 'json' }
|
|
30
|
-
it { should respond_with(:success) }
|
|
31
|
-
it { should respond_with_content_type('application/json') }
|
|
32
|
-
it { should respond_with_json(server.to_json) }
|
|
33
|
-
end
|
|
34
|
-
|
|
35
|
-
describe "#create" do
|
|
36
|
-
let(:new_server) { FactoryGirl.build(:bigbluebutton_server) }
|
|
37
|
-
|
|
38
|
-
context "on success" do
|
|
39
|
-
before {
|
|
40
|
-
api_mock = double(BigBlueButton::BigBlueButtonApi)
|
|
41
|
-
api_mock.stub(:version).and_return("0.9")
|
|
42
|
-
api_mock.stub(:get_default_config_xml)
|
|
43
|
-
api_mock.stub(:get_available_layouts)
|
|
44
|
-
BigBlueButton::BigBlueButtonApi.stub(:new).and_return(api_mock)
|
|
45
|
-
}
|
|
46
|
-
before(:each) {
|
|
47
|
-
post :create, :bigbluebutton_server => new_server.attributes, :format => 'json'
|
|
48
|
-
}
|
|
49
|
-
it { should respond_with(:created) }
|
|
50
|
-
it { should respond_with_content_type('application/json') }
|
|
51
|
-
it { should respond_with_json(new_server.to_json).ignoring_attributes }
|
|
52
|
-
end
|
|
53
|
-
|
|
54
|
-
context "on failure" do
|
|
55
|
-
before(:each) {
|
|
56
|
-
new_server.url = nil # invalid
|
|
57
|
-
post :create, :bigbluebutton_server => new_server.attributes, :format => 'json'
|
|
58
|
-
}
|
|
59
|
-
it { should respond_with(:unprocessable_entity) }
|
|
60
|
-
it { should respond_with_content_type('application/json') }
|
|
61
|
-
it {
|
|
62
|
-
new_server.save # should fail
|
|
63
|
-
should respond_with_json(new_server.errors.full_messages.to_json)
|
|
64
|
-
}
|
|
65
|
-
end
|
|
66
|
-
end
|
|
67
|
-
|
|
68
|
-
describe "#update" do
|
|
69
|
-
let(:new_server) { FactoryGirl.build(:bigbluebutton_server) }
|
|
70
|
-
|
|
71
|
-
context "on success" do
|
|
72
|
-
before(:each) {
|
|
73
|
-
BigbluebuttonServer.any_instance.stub(:set_api_version_from_server)
|
|
74
|
-
put :update, :id => server.to_param, :bigbluebutton_server => new_server.attributes, :format => 'json'
|
|
75
|
-
}
|
|
76
|
-
it { should respond_with(:success) }
|
|
77
|
-
it { should respond_with_content_type('application/json') }
|
|
78
|
-
it { response.body.should eq("true") }
|
|
79
|
-
end
|
|
80
|
-
|
|
81
|
-
context "on failure" do
|
|
82
|
-
before(:each) {
|
|
83
|
-
new_server.url = nil # invalid
|
|
84
|
-
put :update, :id => server.to_param, :bigbluebutton_server => new_server.attributes, :format => 'json'
|
|
85
|
-
}
|
|
86
|
-
it { should respond_with(:unprocessable_entity) }
|
|
87
|
-
it { should respond_with_content_type('application/json') }
|
|
88
|
-
it {
|
|
89
|
-
new_server.save # should fail
|
|
90
|
-
should respond_with_json(new_server.errors.full_messages.to_json)
|
|
91
|
-
}
|
|
92
|
-
end
|
|
93
|
-
end
|
|
94
|
-
|
|
95
|
-
describe "#destroy" do
|
|
96
|
-
before :each do
|
|
97
|
-
delete :destroy, :id => server.to_param, :format => 'json'
|
|
98
|
-
end
|
|
99
|
-
it { should respond_with(:success) }
|
|
100
|
-
it { should respond_with_content_type('application/json') }
|
|
101
|
-
it { response.body.should eq("true") }
|
|
102
|
-
end
|
|
103
|
-
|
|
104
|
-
describe "#activity" do
|
|
105
|
-
let(:room1) { FactoryGirl.create(:bigbluebutton_room) }
|
|
106
|
-
let(:room2) { FactoryGirl.create(:bigbluebutton_room) }
|
|
107
|
-
before do
|
|
108
|
-
# so we return our mocked server
|
|
109
|
-
BigbluebuttonServer.stub(:find_by_param).with(server.to_param).
|
|
110
|
-
and_return(server)
|
|
111
|
-
end
|
|
112
|
-
|
|
113
|
-
context "on success" do
|
|
114
|
-
before do
|
|
115
|
-
server.should_receive(:fetch_meetings).and_return({ })
|
|
116
|
-
server.should_receive(:meetings).twice.and_return([room1, room2])
|
|
117
|
-
room1.should_receive(:fetch_meeting_info)
|
|
118
|
-
room2.should_receive(:fetch_meeting_info)
|
|
119
|
-
end
|
|
120
|
-
before(:each) { get :activity, :id => server.to_param, :format => 'json' }
|
|
121
|
-
it { should respond_with(:success) }
|
|
122
|
-
it { should respond_with_content_type('application/json') }
|
|
123
|
-
it { should respond_with_json([room1, room2].to_json) }
|
|
124
|
-
end
|
|
125
|
-
|
|
126
|
-
context "on failure" do
|
|
127
|
-
let(:bbb_error_msg) { SecureRandom.hex(250) }
|
|
128
|
-
let(:bbb_error) { BigBlueButton::BigBlueButtonException.new(bbb_error_msg) }
|
|
129
|
-
before do
|
|
130
|
-
server.should_receive(:fetch_meetings).and_return({ })
|
|
131
|
-
server.should_receive(:meetings).at_least(:once).and_return([room1, room2])
|
|
132
|
-
room1.should_receive(:fetch_meeting_info) { raise bbb_error }
|
|
133
|
-
end
|
|
134
|
-
before(:each) { get :activity, :id => server.to_param, :format => 'json' }
|
|
135
|
-
it { should respond_with(:error) }
|
|
136
|
-
it { should respond_with_content_type('application/json') }
|
|
137
|
-
it { should respond_with_json([{ :message => bbb_error_msg[0..200] }, room1, room2].to_json) }
|
|
138
|
-
it { should set_the_flash.to(bbb_error_msg[0..200]) }
|
|
139
|
-
end
|
|
140
|
-
|
|
141
|
-
context "ignores params[:update_list]" do
|
|
142
|
-
before do
|
|
143
|
-
server.should_receive(:fetch_meetings).and_return({ })
|
|
144
|
-
server.should_receive(:meetings).twice.and_return([room1, room2])
|
|
145
|
-
room1.should_receive(:fetch_meeting_info)
|
|
146
|
-
room2.should_receive(:fetch_meeting_info)
|
|
147
|
-
end
|
|
148
|
-
before(:each) { get :activity, :id => server.to_param, :update_list => true, :format => 'json' }
|
|
149
|
-
it { should respond_with(:success) }
|
|
150
|
-
it { should respond_with_content_type('application/json') }
|
|
151
|
-
it { should respond_with_json([room1, room2].to_json) }
|
|
152
|
-
end
|
|
153
|
-
|
|
154
|
-
end
|
|
155
|
-
|
|
156
|
-
describe "#fetch_recordings" do
|
|
157
|
-
it "on success"
|
|
158
|
-
it "on error"
|
|
159
|
-
end
|
|
160
|
-
|
|
161
|
-
end
|
|
162
|
-
end
|