bigbluebutton_rails 0.0.4 → 0.0.5
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +2 -1
- data/CHANGELOG.rdoc +12 -0
- data/Gemfile.lock +53 -14
- data/README.rdoc +31 -29
- data/Rakefile +63 -11
- data/app/controllers/bigbluebutton/rooms_controller.rb +89 -26
- data/app/controllers/bigbluebutton/servers_controller.rb +38 -5
- data/app/helpers/bigbluebutton_rails_helper.rb +12 -0
- data/app/models/bigbluebutton_room.rb +44 -1
- data/app/models/bigbluebutton_server.rb +48 -12
- data/app/views/bigbluebutton/rooms/_form.html.erb +8 -0
- data/app/views/bigbluebutton/rooms/index.html.erb +34 -43
- data/app/views/bigbluebutton/rooms/join_mobile.html.erb +9 -0
- data/app/views/bigbluebutton/rooms/show.html.erb +8 -0
- data/app/views/bigbluebutton/servers/_activity_list.html.erb +48 -0
- data/app/views/bigbluebutton/servers/_form.html.erb +4 -0
- data/app/views/bigbluebutton/servers/activity.html.erb +51 -0
- data/app/views/bigbluebutton/servers/index.html.erb +21 -25
- data/app/views/bigbluebutton/servers/show.html.erb +5 -0
- data/bigbluebutton_rails.gemspec +9 -6
- data/config/locales/en.yml +11 -2
- data/lib/bigbluebutton_rails/controller_methods.rb +47 -14
- data/lib/bigbluebutton_rails/exceptions.rb +6 -0
- data/lib/bigbluebutton_rails/rails/routes.rb +17 -12
- data/lib/bigbluebutton_rails/rails.rb +4 -0
- data/lib/bigbluebutton_rails/version.rb +1 -1
- data/lib/bigbluebutton_rails.rb +1 -0
- data/lib/generators/bigbluebutton_rails/install_generator.rb +28 -5
- data/lib/generators/bigbluebutton_rails/templates/migration.rb +3 -0
- data/lib/generators/bigbluebutton_rails/templates/migration_0_0_4.rb +38 -0
- data/lib/generators/bigbluebutton_rails/templates/migration_0_0_5.rb +23 -0
- data/{lib/generators/bigbluebutton_rails/templates/public → public}/images/loading.gif +0 -0
- data/{lib/generators/bigbluebutton_rails/templates/public → public}/javascripts/jquery.min.js +0 -0
- data/public/stylesheets/bigbluebutton_rails.css +138 -0
- data/spec/controllers/bigbluebutton/rooms_controller_spec.rb +284 -25
- data/spec/controllers/bigbluebutton/servers_controller_spec.rb +93 -1
- data/spec/factories/bigbluebutton_room.rb +1 -0
- data/spec/factories/bigbluebutton_server.rb +1 -0
- data/spec/factories/integration/bigbluebutton_server_integration.rb +8 -0
- data/spec/generators/install_generator_spec.rb +53 -10
- data/spec/generators/views_generator_spec.rb +6 -2
- data/spec/helpers/bigbluebutton_rails_helper_spec.rb +19 -0
- data/spec/integration_conf.yml.example +5 -0
- data/spec/models/bigbluebutton_room_spec.rb +99 -72
- data/spec/models/bigbluebutton_server_spec.rb +81 -20
- data/spec/rails_app/.gitignore +2 -1
- data/spec/rails_app/app/views/layouts/application.html.erb +1 -1
- data/spec/rails_app/config/cucumber.yml +8 -0
- data/spec/rails_app/config/database.yml +4 -1
- data/spec/rails_app/db/seeds.rb +6 -5
- data/spec/rails_app/features/manage_bigbluebutton_rooms.feature +9 -0
- data/spec/rails_app/features/manage_bigbluebutton_servers.feature +9 -0
- data/spec/rails_app/features/step_definitions/bigbluebutton_room_steps.rb +38 -0
- data/spec/rails_app/features/step_definitions/bigbluebutton_server_steps.rb +23 -0
- data/spec/rails_app/features/step_definitions/common_steps.rb +3 -0
- data/spec/rails_app/features/step_definitions/web_steps.rb +211 -0
- data/spec/rails_app/features/support/content.rb +11 -0
- data/spec/rails_app/features/support/env.rb +50 -0
- data/spec/rails_app/features/support/env_gem.rb +9 -0
- data/spec/rails_app/features/support/paths.rb +38 -0
- data/spec/rails_app/features/support/selectors.rb +39 -0
- data/spec/rails_app/lib/tasks/cucumber.rake +65 -0
- data/spec/rails_app/public/images/loading.gif +0 -0
- data/spec/rails_app/public/javascripts/jquery.min.js +16 -0
- data/spec/rails_app/public/stylesheets/bigbluebutton_rails.css +138 -0
- data/spec/rails_app/script/cucumber +10 -0
- data/spec/routing/bigbluebutton/rooms_routing_spec.rb +12 -0
- data/spec/spec_helper.rb +0 -1
- data/spec/support/integration/integration_conf.rb +16 -0
- data/spec/support/matchers/shoulda/respond_with_json_matcher.rb +67 -0
- data/spec/support/mocked_server.rb +1 -0
- metadata +91 -29
- data/lib/generators/bigbluebutton_rails/public_generator.rb +0 -16
- data/spec/generators/public_generator_spec.rb +0 -31
@@ -1,3 +1,4 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
1
2
|
require 'spec_helper'
|
2
3
|
|
3
4
|
describe BigbluebuttonRoom do
|
@@ -21,21 +22,20 @@ describe BigbluebuttonRoom do
|
|
21
22
|
it { should have_db_column(:max_participants).of_type(:integer) }
|
22
23
|
it { should have_db_column(:private).of_type(:boolean) }
|
23
24
|
it { should have_db_column(:randomize_meetingid).of_type(:boolean) }
|
25
|
+
it { should have_db_column(:external).of_type(:boolean) }
|
26
|
+
it { should have_db_column(:param).of_type(:string) }
|
24
27
|
it { should have_db_index(:server_id) }
|
25
28
|
it { should have_db_index(:meetingid).unique(true) }
|
26
29
|
it { should have_db_index(:voice_bridge).unique(true) }
|
27
|
-
it
|
30
|
+
it "default values" do
|
28
31
|
room = BigbluebuttonRoom.new
|
29
32
|
room.private.should be_false
|
30
|
-
}
|
31
|
-
it {
|
32
|
-
room = BigbluebuttonRoom.new
|
33
33
|
room.randomize_meetingid.should be_true
|
34
|
-
|
34
|
+
room.external.should be_false
|
35
|
+
end
|
35
36
|
end
|
36
37
|
|
37
38
|
context do
|
38
|
-
|
39
39
|
before { Factory.create(:bigbluebutton_room) }
|
40
40
|
|
41
41
|
it { should belong_to(:server) }
|
@@ -47,13 +47,15 @@ describe BigbluebuttonRoom do
|
|
47
47
|
it { should validate_presence_of(:meetingid) }
|
48
48
|
it { should validate_presence_of(:voice_bridge) }
|
49
49
|
it { should validate_presence_of(:name) }
|
50
|
+
it { should validate_presence_of(:param) }
|
50
51
|
|
51
52
|
it { should be_boolean(:private) }
|
52
53
|
it { should be_boolean(:randomize_meetingid) }
|
53
54
|
|
54
55
|
[:name, :server_id, :meetingid, :attendee_password, :moderator_password,
|
55
56
|
:welcome_msg, :owner, :server, :private, :logout_url, :dial_number,
|
56
|
-
:voice_bridge, :max_participants, :owner_id, :owner_type,
|
57
|
+
:voice_bridge, :max_participants, :owner_id, :owner_type,
|
58
|
+
:randomize_meetingid, :param].
|
57
59
|
each do |attribute|
|
58
60
|
it { should allow_mass_assignment_of(attribute) }
|
59
61
|
end
|
@@ -62,6 +64,7 @@ describe BigbluebuttonRoom do
|
|
62
64
|
it { should validate_uniqueness_of(:meetingid) }
|
63
65
|
it { should validate_uniqueness_of(:name) }
|
64
66
|
it { should validate_uniqueness_of(:voice_bridge) }
|
67
|
+
it { should validate_uniqueness_of(:param) }
|
65
68
|
|
66
69
|
it {
|
67
70
|
room = Factory.create(:bigbluebutton_room)
|
@@ -73,14 +76,23 @@ describe BigbluebuttonRoom do
|
|
73
76
|
it { should ensure_length_of(:attendee_password).is_at_most(16) }
|
74
77
|
it { should ensure_length_of(:moderator_password).is_at_most(16) }
|
75
78
|
it { should ensure_length_of(:welcome_msg).is_at_most(250) }
|
79
|
+
it { should ensure_length_of(:param).is_at_least(3) }
|
76
80
|
|
77
81
|
# attr_accessors
|
78
82
|
[:running, :participant_count, :moderator_count, :attendees,
|
79
|
-
:has_been_forcibly_ended, :start_time, :end_time].each do |attr|
|
83
|
+
:has_been_forcibly_ended, :start_time, :end_time, :external].each do |attr|
|
80
84
|
it { should respond_to(attr) }
|
81
85
|
it { should respond_to("#{attr}=") }
|
82
86
|
end
|
83
87
|
|
88
|
+
context ".to_param" do
|
89
|
+
it { should respond_to(:to_param) }
|
90
|
+
it {
|
91
|
+
r = Factory.create(:bigbluebutton_room)
|
92
|
+
r.to_param.should be(r.param)
|
93
|
+
}
|
94
|
+
end
|
95
|
+
|
84
96
|
it { should respond_to(:is_running?) }
|
85
97
|
|
86
98
|
describe "#user_role" do
|
@@ -93,6 +105,42 @@ describe BigbluebuttonRoom do
|
|
93
105
|
it { room.user_role({ :not_password => "any" }).should == nil }
|
94
106
|
end
|
95
107
|
|
108
|
+
describe "#instance_variables_compare" do
|
109
|
+
let(:room) { Factory.create(:bigbluebutton_room) }
|
110
|
+
let(:room2) { BigbluebuttonRoom.last }
|
111
|
+
it { should respond_to(:instance_variables_compare) }
|
112
|
+
it { room.instance_variables_compare(room2).should be_empty }
|
113
|
+
it "compares instance variables" do
|
114
|
+
room2.running = !room.running
|
115
|
+
room.instance_variables_compare(room2).should_not be_empty
|
116
|
+
room.instance_variables_compare(room2).should include(:@running)
|
117
|
+
end
|
118
|
+
it "ignores attributes" do
|
119
|
+
room2.private = !room.private
|
120
|
+
room.instance_variables_compare(room2).should be_empty
|
121
|
+
end
|
122
|
+
end
|
123
|
+
|
124
|
+
describe "#attr_equal?" do
|
125
|
+
before { Factory.create(:bigbluebutton_room) }
|
126
|
+
let(:room) { BigbluebuttonRoom.last }
|
127
|
+
let(:room2) { BigbluebuttonRoom.last }
|
128
|
+
it { should respond_to(:attr_equal?) }
|
129
|
+
it { room.attr_equal?(room2).should be_true }
|
130
|
+
it "compares instance variables" do
|
131
|
+
room2.running = !room.running
|
132
|
+
room.attr_equal?(room2).should be_false
|
133
|
+
end
|
134
|
+
it "compares attributes" do
|
135
|
+
room2.private = !room.private
|
136
|
+
room.attr_equal?(room2).should be_false
|
137
|
+
end
|
138
|
+
it "compares objects" do
|
139
|
+
room2 = room.clone
|
140
|
+
room.attr_equal?(room2).should be_false
|
141
|
+
end
|
142
|
+
end
|
143
|
+
|
96
144
|
context "initializes" do
|
97
145
|
let(:room) { BigbluebuttonRoom.new }
|
98
146
|
|
@@ -125,63 +173,38 @@ describe BigbluebuttonRoom do
|
|
125
173
|
end
|
126
174
|
end
|
127
175
|
|
176
|
+
context "param format" do
|
177
|
+
let(:msg) { I18n.t('bigbluebutton_rails.rooms.errors.param_format') }
|
178
|
+
it { should validate_format_of(:param).not_with("123 321").with_message(msg) }
|
179
|
+
it { should validate_format_of(:param).not_with("").with_message(msg) }
|
180
|
+
it { should validate_format_of(:param).not_with("ab@c").with_message(msg) }
|
181
|
+
it { should validate_format_of(:param).not_with("ab#c").with_message(msg) }
|
182
|
+
it { should validate_format_of(:param).not_with("ab$c").with_message(msg) }
|
183
|
+
it { should validate_format_of(:param).not_with("ab%c").with_message(msg) }
|
184
|
+
it { should validate_format_of(:param).not_with("ábcd").with_message(msg) }
|
185
|
+
it { should validate_format_of(:param).not_with("-abc").with_message(msg) }
|
186
|
+
it { should validate_format_of(:param).not_with("abc-").with_message(msg) }
|
187
|
+
it { should validate_format_of(:param).with("_abc").with_message(msg) }
|
188
|
+
it { should validate_format_of(:param).with("abc_").with_message(msg) }
|
189
|
+
it { should validate_format_of(:param).with("abc") }
|
190
|
+
it { should validate_format_of(:param).with("123") }
|
191
|
+
it { should validate_format_of(:param).with("abc-123_d5") }
|
192
|
+
end
|
128
193
|
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
:messageKey => "duplicateWarning" } }
|
134
|
-
let(:success_hash) { { :returncode => true, :meetingID => "new id",
|
135
|
-
:messageKey => "" } }
|
136
|
-
let(:new_id) { "new id" }
|
137
|
-
before {
|
138
|
-
room.randomize_meetingid = true
|
139
|
-
room.server = mocked_server
|
140
|
-
}
|
141
|
-
|
142
|
-
it "before calling create" do
|
143
|
-
room.should_receive(:random_meetingid).and_return(new_id)
|
144
|
-
mocked_api.should_receive(:create_meeting).
|
145
|
-
with(room.name, new_id, room.moderator_password,
|
146
|
-
room.attendee_password, room.welcome_msg, room.dial_number,
|
147
|
-
room.logout_url, room.max_participants, room.voice_bridge)
|
148
|
-
room.send_create
|
149
|
-
end
|
150
|
-
|
151
|
-
it "and tries again on error" do
|
152
|
-
# fails twice and them succeds
|
153
|
-
room.should_receive(:random_meetingid).exactly(3).times.and_return(new_id)
|
154
|
-
mocked_api.should_receive(:create_meeting).
|
155
|
-
with(room.name, new_id, room.moderator_password,
|
156
|
-
room.attendee_password, room.welcome_msg, room.dial_number,
|
157
|
-
room.logout_url, room.max_participants, room.voice_bridge).
|
158
|
-
twice.
|
159
|
-
and_return(fail_hash)
|
160
|
-
mocked_api.should_receive(:create_meeting).
|
161
|
-
with(room.name, new_id, room.moderator_password,
|
162
|
-
room.attendee_password, room.welcome_msg, room.dial_number,
|
163
|
-
room.logout_url, room.max_participants, room.voice_bridge).
|
164
|
-
once.
|
165
|
-
and_return(success_hash)
|
166
|
-
room.send_create
|
167
|
-
end
|
168
|
-
|
169
|
-
it "and limits to 10 tries" do
|
170
|
-
room.should_receive(:random_meetingid).exactly(11).times.and_return(new_id)
|
171
|
-
mocked_api.should_receive(:create_meeting).
|
172
|
-
with(room.name, new_id, room.moderator_password,
|
173
|
-
room.attendee_password, room.welcome_msg, room.dial_number,
|
174
|
-
room.logout_url, room.max_participants, room.voice_bridge).
|
175
|
-
exactly(10).times.
|
176
|
-
and_return(fail_hash)
|
177
|
-
room.send_create
|
178
|
-
end
|
179
|
-
end
|
180
|
-
|
194
|
+
context "sets param as the downcased parameterized name if param is" do
|
195
|
+
after :each do
|
196
|
+
@room.save.should be_true
|
197
|
+
@room.param.should == @room.name.downcase.parameterize
|
181
198
|
end
|
182
|
-
|
183
|
-
|
184
|
-
|
199
|
+
it "nil" do
|
200
|
+
@room = Factory.build(:bigbluebutton_room, :param => nil,
|
201
|
+
:name => "-My Name@ _Is Odd_-")
|
202
|
+
end
|
203
|
+
it "empty" do
|
204
|
+
@room = Factory.build(:bigbluebutton_room, :param => "",
|
205
|
+
:name => "-My Name@ _Is Odd_-")
|
206
|
+
end
|
207
|
+
end
|
185
208
|
|
186
209
|
context "using the api" do
|
187
210
|
before { mock_server_and_api }
|
@@ -298,15 +321,6 @@ describe BigbluebuttonRoom do
|
|
298
321
|
|
299
322
|
it { should respond_to(:send_create) }
|
300
323
|
|
301
|
-
it "send create_meeting" do
|
302
|
-
mocked_api.should_receive(:create_meeting).
|
303
|
-
with(room.name, room.meetingid, room.moderator_password,
|
304
|
-
room.attendee_password, room.welcome_msg, room.dial_number,
|
305
|
-
room.logout_url, room.max_participants, room.voice_bridge)
|
306
|
-
room.server = mocked_server
|
307
|
-
room.send_create
|
308
|
-
end
|
309
|
-
|
310
324
|
it "send create_meeting" do
|
311
325
|
mocked_api.should_receive(:create_meeting).
|
312
326
|
with(room.name, room.meetingid, room.moderator_password,
|
@@ -395,9 +409,22 @@ describe BigbluebuttonRoom do
|
|
395
409
|
room.server = mocked_server
|
396
410
|
room.join_url(username, :attendee)
|
397
411
|
end
|
412
|
+
end
|
398
413
|
|
414
|
+
end
|
415
|
+
|
416
|
+
context "validates passwords" do
|
417
|
+
context "for private rooms" do
|
418
|
+
let (:room) { Factory.build(:bigbluebutton_room, :private => true) }
|
419
|
+
it { room.should_not allow_value('').for(:moderator_password) }
|
420
|
+
it { room.should_not allow_value('').for(:attendee_password) }
|
399
421
|
end
|
400
422
|
|
423
|
+
context "for public rooms" do
|
424
|
+
let (:room) { Factory.build(:bigbluebutton_room, :private => false) }
|
425
|
+
it { room.should allow_value('').for(:moderator_password) }
|
426
|
+
it { room.should allow_value('').for(:attendee_password) }
|
427
|
+
end
|
401
428
|
end
|
402
429
|
|
403
430
|
end
|
@@ -1,3 +1,4 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
1
2
|
require 'spec_helper'
|
2
3
|
|
3
4
|
describe BigbluebuttonServer do
|
@@ -11,6 +12,7 @@ describe BigbluebuttonServer do
|
|
11
12
|
it { should have_db_column(:url).of_type(:string) }
|
12
13
|
it { should have_db_column(:salt).of_type(:string) }
|
13
14
|
it { should have_db_column(:version).of_type(:string) }
|
15
|
+
it { should have_db_column(:param).of_type(:string) }
|
14
16
|
end
|
15
17
|
|
16
18
|
context do
|
@@ -21,15 +23,20 @@ describe BigbluebuttonServer do
|
|
21
23
|
it { should validate_presence_of(:url) }
|
22
24
|
it { should validate_presence_of(:salt) }
|
23
25
|
it { should validate_presence_of(:version) }
|
26
|
+
it { should validate_presence_of(:param) }
|
24
27
|
|
25
28
|
it { should allow_mass_assignment_of(:name) }
|
26
29
|
it { should allow_mass_assignment_of(:url) }
|
27
30
|
it { should allow_mass_assignment_of(:salt) }
|
28
|
-
|
29
|
-
it {
|
30
|
-
|
31
|
-
|
32
|
-
|
31
|
+
it { should allow_mass_assignment_of(:version) }
|
32
|
+
it { should allow_mass_assignment_of(:param) }
|
33
|
+
|
34
|
+
context "uniqueness of" do
|
35
|
+
before(:each) { Factory.create(:bigbluebutton_server) }
|
36
|
+
it { should validate_uniqueness_of(:url) }
|
37
|
+
it { should validate_uniqueness_of(:name) }
|
38
|
+
it { should validate_uniqueness_of(:param) }
|
39
|
+
end
|
33
40
|
|
34
41
|
it "has associated rooms" do
|
35
42
|
server = Factory.create(:bigbluebutton_server)
|
@@ -54,17 +61,63 @@ describe BigbluebuttonServer do
|
|
54
61
|
it { should ensure_length_of(:name).is_at_least(1).is_at_most(500) }
|
55
62
|
it { should ensure_length_of(:url).is_at_most(500) }
|
56
63
|
it { should ensure_length_of(:salt).is_at_least(1).is_at_most(500) }
|
64
|
+
it { should ensure_length_of(:param).is_at_least(3) }
|
65
|
+
|
66
|
+
context ".to_param" do
|
67
|
+
it { should respond_to(:to_param) }
|
68
|
+
it {
|
69
|
+
s = Factory.create(:bigbluebutton_server)
|
70
|
+
s.to_param.should be(s.param)
|
71
|
+
}
|
72
|
+
end
|
57
73
|
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
74
|
+
context "url format" do
|
75
|
+
it { should allow_value('http://demo.bigbluebutton.org/bigbluebutton/api').for(:url) }
|
76
|
+
it { should_not allow_value('').for(:url) }
|
77
|
+
it { should_not allow_value('http://demo.bigbluebutton.org').for(:url) }
|
78
|
+
it { should_not allow_value('demo.bigbluebutton.org/bigbluebutton/api').for(:url) }
|
79
|
+
end
|
62
80
|
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
81
|
+
context "supported versions" do
|
82
|
+
it { should allow_value('0.64').for(:version) }
|
83
|
+
it { should allow_value('0.7').for(:version) }
|
84
|
+
it { should_not allow_value('').for(:version) }
|
85
|
+
it { should_not allow_value('0.8').for(:version) }
|
86
|
+
it { should_not allow_value('0.6').for(:version) }
|
87
|
+
end
|
88
|
+
|
89
|
+
context "param format" do
|
90
|
+
let(:msg) { I18n.t('bigbluebutton_rails.servers.errors.param_format') }
|
91
|
+
it { should validate_format_of(:param).not_with("123 321").with_message(msg) }
|
92
|
+
it { should validate_format_of(:param).not_with("").with_message(msg) }
|
93
|
+
it { should validate_format_of(:param).not_with("ab@c").with_message(msg) }
|
94
|
+
it { should validate_format_of(:param).not_with("ab#c").with_message(msg) }
|
95
|
+
it { should validate_format_of(:param).not_with("ab$c").with_message(msg) }
|
96
|
+
it { should validate_format_of(:param).not_with("ab%c").with_message(msg) }
|
97
|
+
it { should validate_format_of(:param).not_with("ábcd").with_message(msg) }
|
98
|
+
it { should validate_format_of(:param).not_with("-abc").with_message(msg) }
|
99
|
+
it { should validate_format_of(:param).not_with("abc-").with_message(msg) }
|
100
|
+
it { should validate_format_of(:param).with("_abc").with_message(msg) }
|
101
|
+
it { should validate_format_of(:param).with("abc_").with_message(msg) }
|
102
|
+
it { should validate_format_of(:param).with("abc") }
|
103
|
+
it { should validate_format_of(:param).with("123") }
|
104
|
+
it { should validate_format_of(:param).with("abc-123_d5") }
|
105
|
+
end
|
106
|
+
|
107
|
+
context "sets param as the downcased parameterized name if param is" do
|
108
|
+
after :each do
|
109
|
+
@server.save.should be_true
|
110
|
+
@server.param.should == @server.name.downcase.parameterize
|
111
|
+
end
|
112
|
+
it "nil" do
|
113
|
+
@server = Factory.build(:bigbluebutton_server, :param => nil,
|
114
|
+
:name => "-My Name@ _Is Odd_-")
|
115
|
+
end
|
116
|
+
it "empty" do
|
117
|
+
@server = Factory.build(:bigbluebutton_server, :param => "",
|
118
|
+
:name => "-My Name@ _Is Odd_-")
|
119
|
+
end
|
120
|
+
end
|
68
121
|
|
69
122
|
context "has an api object" do
|
70
123
|
let(:server) { server = Factory.build(:bigbluebutton_server) }
|
@@ -100,8 +153,8 @@ describe BigbluebuttonServer do
|
|
100
153
|
|
101
154
|
context "fetching info from bbb" do
|
102
155
|
let(:server) { Factory.create(:bigbluebutton_server) }
|
103
|
-
let(:room1) { Factory.create(:bigbluebutton_room, :server => server, :meetingid => "room1") }
|
104
|
-
let(:room2) { Factory.create(:bigbluebutton_room, :server => server, :meetingid => "room2") }
|
156
|
+
let(:room1) { Factory.create(:bigbluebutton_room, :server => server, :meetingid => "room1", :randomize_meetingid => true) }
|
157
|
+
let(:room2) { Factory.create(:bigbluebutton_room, :server => server, :meetingid => "room2", :randomize_meetingid => true) }
|
105
158
|
before {
|
106
159
|
@api_mock = mock(BigBlueButton::BigBlueButtonApi)
|
107
160
|
server.stub(:api).and_return(@api_mock)
|
@@ -110,9 +163,9 @@ describe BigbluebuttonServer do
|
|
110
163
|
# the hashes should be exactly as returned by bigbluebutton-api-ruby to be sure we are testing it right
|
111
164
|
let(:meetings) {
|
112
165
|
[
|
113
|
-
{ :meetingID => room1.meetingid, :attendeePW=>"ap", :moderatorPW=>"mp", :hasBeenForciblyEnded => false, :running => true},
|
114
|
-
{ :meetingID => room2.meetingid, :attendeePW=>"pass", :moderatorPW=>"pass", :hasBeenForciblyEnded => true, :running => false},
|
115
|
-
{ :meetingID => "im not in the db", :attendeePW=>"pass", :moderatorPW=>"pass", :hasBeenForciblyEnded => true, :running => true}
|
166
|
+
{ :meetingID => room1.meetingid, :attendeePW => "ap", :moderatorPW => "mp", :hasBeenForciblyEnded => false, :running => true},
|
167
|
+
{ :meetingID => room2.meetingid, :attendeePW => "pass", :moderatorPW => "pass", :hasBeenForciblyEnded => true, :running => false},
|
168
|
+
{ :meetingID => "im not in the db", :attendeePW => "pass", :moderatorPW => "pass", :hasBeenForciblyEnded => true, :running => true}
|
116
169
|
]
|
117
170
|
}
|
118
171
|
let(:hash) {
|
@@ -134,18 +187,26 @@ describe BigbluebuttonServer do
|
|
134
187
|
server.meetings[0].attendee_password.should == "ap"
|
135
188
|
server.meetings[0].moderator_password.should == "mp"
|
136
189
|
server.meetings[0].running.should == true
|
190
|
+
server.meetings[0].new_record?.should be_false
|
191
|
+
server.meetings[0].external.should be_false
|
192
|
+
server.meetings[0].randomize_meetingid.should be_true
|
137
193
|
|
138
194
|
server.meetings[1].should == room2
|
139
195
|
server.meetings[1].attendee_password.should == "pass"
|
140
196
|
server.meetings[1].moderator_password.should == "pass"
|
141
197
|
server.meetings[1].running.should == false
|
198
|
+
server.meetings[1].new_record?.should be_false
|
199
|
+
server.meetings[1].external.should be_false
|
200
|
+
server.meetings[1].randomize_meetingid.should be_true
|
142
201
|
|
143
202
|
server.meetings[2].meetingid.should == "im not in the db"
|
144
203
|
server.meetings[2].server.should == server
|
145
|
-
server.meetings[2].new_record?.should be_true
|
146
204
|
server.meetings[2].attendee_password.should == "pass"
|
147
205
|
server.meetings[2].moderator_password.should == "pass"
|
148
206
|
server.meetings[2].running.should == true
|
207
|
+
server.meetings[2].new_record?.should be_false
|
208
|
+
server.meetings[2].external.should be_true
|
209
|
+
server.meetings[2].randomize_meetingid.should be_false
|
149
210
|
end
|
150
211
|
|
151
212
|
end
|
data/spec/rails_app/.gitignore
CHANGED
@@ -0,0 +1,8 @@
|
|
1
|
+
<%
|
2
|
+
rerun = File.file?('rerun.txt') ? IO.read('rerun.txt') : ""
|
3
|
+
rerun_opts = rerun.to_s.strip.empty? ? "--format #{ENV['CUCUMBER_FORMAT'] || 'progress'} features" : "--format #{ENV['CUCUMBER_FORMAT'] || 'pretty'} #{rerun}"
|
4
|
+
std_opts = "--format #{ENV['CUCUMBER_FORMAT'] || 'pretty'} --strict --tags ~@wip"
|
5
|
+
%>
|
6
|
+
default: <%= std_opts %> features
|
7
|
+
wip: --tags @wip:3 --wip features
|
8
|
+
rerun: <%= rerun_opts %> --format rerun --out rerun.txt --strict --tags ~@wip
|
@@ -9,7 +9,7 @@ development:
|
|
9
9
|
# Warning: The database defined as "test" will be erased and
|
10
10
|
# re-generated from your development database when you run "rake".
|
11
11
|
# Do not set this db to the same as development or production.
|
12
|
-
test:
|
12
|
+
test: &test
|
13
13
|
adapter: sqlite3
|
14
14
|
database: db/test.sqlite3
|
15
15
|
pool: 5
|
@@ -20,3 +20,6 @@ production:
|
|
20
20
|
database: db/production.sqlite3
|
21
21
|
pool: 5
|
22
22
|
timeout: 5000
|
23
|
+
|
24
|
+
cucumber:
|
25
|
+
<<: *test
|
data/spec/rails_app/db/seeds.rb
CHANGED
@@ -1,7 +1,8 @@
|
|
1
1
|
# This file should contain all the record creation needed to seed the database with its default values.
|
2
2
|
# The data can then be loaded with the rake db:seed (or created alongside the db with db:setup).
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
3
|
+
|
4
|
+
file = File.join(Rails.root, "..", "integration_conf.yml")
|
5
|
+
if File.exists? file
|
6
|
+
config = YAML.load_file(file)["server"]
|
7
|
+
BigbluebuttonServer.create!(config)
|
8
|
+
end
|
@@ -0,0 +1,9 @@
|
|
1
|
+
Feature: Manage BigBlueButton rooms
|
2
|
+
In order to held webconferences
|
3
|
+
One needs to be able to create and manage BigBlueButton rooms
|
4
|
+
|
5
|
+
Scenario: Register a new BigBlueButton room
|
6
|
+
Given a BigBlueButton server
|
7
|
+
When the user goes to the new BigBlueButton room page
|
8
|
+
And registers a new BigBlueButton room
|
9
|
+
Then he should see the information about this room
|
@@ -0,0 +1,9 @@
|
|
1
|
+
Feature: Manage BigBlueButton servers
|
2
|
+
In order to held webconferences
|
3
|
+
One needs to be able to create and manage BigBlueButton servers
|
4
|
+
|
5
|
+
Scenario: Register a new BigBlueButton server
|
6
|
+
Given a user named "test user"
|
7
|
+
When he goes to the new BigBlueButton server page
|
8
|
+
And registers a new BigBlueButton server
|
9
|
+
Then he should see the information about this server
|
@@ -0,0 +1,38 @@
|
|
1
|
+
Given /a BigBlueButton server/i do
|
2
|
+
@server = Factory.create(:bigbluebutton_server_integration)
|
3
|
+
end
|
4
|
+
|
5
|
+
And /^registers a new BigBlueButton room$/i do
|
6
|
+
attrs = Factory.attributes_for(:bigbluebutton_room, :server => @server)
|
7
|
+
fill_in("bigbluebutton_room[name]", :with => attrs[:name])
|
8
|
+
fill_in("bigbluebutton_room[meetingid]", :with => attrs[:meetingid])
|
9
|
+
check("bigbluebutton_room[randomize_meetingid]") if attrs[:randomize_meetingid]
|
10
|
+
check("bigbluebutton_room[private]") if attrs[:private]
|
11
|
+
fill_in("bigbluebutton_room[attendee_password]", :with => attrs[:attendee_password])
|
12
|
+
fill_in("bigbluebutton_room[moderator_password]", :with => attrs[:moderator_password])
|
13
|
+
fill_in("bigbluebutton_room[welcome_msg]", :with => attrs[:welcome_msg])
|
14
|
+
fill_in("bigbluebutton_room[logout_url]", :with => attrs[:logout_url])
|
15
|
+
fill_in("bigbluebutton_room[dial_number]", :with => attrs[:dial_number])
|
16
|
+
fill_in("bigbluebutton_room[max_participants]", :with => attrs[:max_participants])
|
17
|
+
check("bigbluebutton_room[external]") if attrs[:external]
|
18
|
+
fill_in("bigbluebutton_room[param]", :with => attrs[:param])
|
19
|
+
# Note: voice_bridge is generated when the BigbluebuttonRoom is created
|
20
|
+
click_button("Create")
|
21
|
+
end
|
22
|
+
|
23
|
+
Then /(?:|I ) should see the information about this room/ do
|
24
|
+
room = BigbluebuttonRoom.last
|
25
|
+
page_has_content(room.name)
|
26
|
+
page_has_content(room.meetingid)
|
27
|
+
page_has_content(room.randomize_meetingid)
|
28
|
+
page_has_content(room.private)
|
29
|
+
page_has_content(room.attendee_password)
|
30
|
+
page_has_content(room.moderator_password)
|
31
|
+
page_has_content(room.welcome_msg)
|
32
|
+
page_has_content(room.logout_url)
|
33
|
+
page_has_content(room.dial_number)
|
34
|
+
page_has_content(room.voice_bridge)
|
35
|
+
page_has_content(room.max_participants)
|
36
|
+
page_has_content(room.external)
|
37
|
+
page_has_content(room.param)
|
38
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
Given /a user named "(.+)"/i do |username|
|
2
|
+
@username = username
|
3
|
+
# TODO useless for now
|
4
|
+
end
|
5
|
+
|
6
|
+
And /^registers a new BigBlueButton server$/i do
|
7
|
+
attrs = Factory.attributes_for(:bigbluebutton_server_integration)
|
8
|
+
fill_in("bigbluebutton_server[name]", :with => attrs[:name])
|
9
|
+
fill_in("bigbluebutton_server[url]", :with => attrs[:url])
|
10
|
+
fill_in("bigbluebutton_server[salt]", :with => attrs[:salt])
|
11
|
+
fill_in("bigbluebutton_server[version]", :with => attrs[:version])
|
12
|
+
fill_in("bigbluebutton_server[param]", :with => attrs[:param])
|
13
|
+
click_button("Create")
|
14
|
+
end
|
15
|
+
|
16
|
+
Then /(?:|I ) should see the information about this server/ do
|
17
|
+
server = BigbluebuttonServer.last
|
18
|
+
page_has_content(server.name)
|
19
|
+
page_has_content(server.url)
|
20
|
+
page_has_content(server.salt)
|
21
|
+
page_has_content(server.version)
|
22
|
+
page_has_content(server.param)
|
23
|
+
end
|