bigbluebutton_rails 1.0.0 → 1.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.
- data/CHANGELOG.rdoc +11 -0
- data/Gemfile.lock +1 -1
- data/README.rdoc +46 -32
- data/Rakefile +0 -1
- data/app/controllers/bigbluebutton/rooms_controller.rb +17 -16
- data/app/controllers/bigbluebutton/servers_controller.rb +6 -2
- data/app/models/bigbluebutton_room.rb +35 -1
- data/app/models/bigbluebutton_server.rb +1 -1
- data/app/views/bigbluebutton/rooms/_form.html.erb +7 -3
- data/app/views/bigbluebutton/rooms/_rooms.html.erb +37 -0
- data/app/views/bigbluebutton/rooms/edit.html.erb +2 -2
- data/app/views/bigbluebutton/rooms/external.html.erb +2 -1
- data/app/views/bigbluebutton/rooms/index.html.erb +2 -37
- data/app/views/bigbluebutton/rooms/invite.html.erb +2 -2
- data/app/views/bigbluebutton/rooms/join.html.erb +1 -1
- data/app/views/bigbluebutton/rooms/new.html.erb +1 -1
- data/app/views/bigbluebutton/rooms/show.html.erb +10 -4
- data/app/views/bigbluebutton/servers/_activity_list.html.erb +6 -6
- data/app/views/bigbluebutton/servers/index.html.erb +4 -3
- data/app/views/bigbluebutton/servers/rooms.html.erb +2 -0
- data/app/views/bigbluebutton/servers/show.html.erb +3 -4
- data/config/locales/en.yml +7 -3
- data/lib/bigbluebutton_rails/exceptions.rb +4 -0
- data/lib/bigbluebutton_rails/rails/routes.rb +28 -35
- data/lib/bigbluebutton_rails/version.rb +1 -1
- data/spec/controllers/bigbluebutton/rooms_controller_exception_handling_spec.rb +13 -10
- data/spec/controllers/bigbluebutton/rooms_controller_json_responses_spec.rb +13 -13
- data/spec/controllers/bigbluebutton/rooms_controller_spec.rb +114 -115
- data/spec/controllers/bigbluebutton/servers_controller_json_responses_spec.rb +12 -1
- data/spec/controllers/bigbluebutton/servers_controller_spec.rb +11 -0
- data/spec/generators/install_generator_spec.rb +1 -1
- data/spec/models/bigbluebutton_room_spec.rb +166 -80
- data/spec/models/bigbluebutton_server_spec.rb +4 -4
- data/spec/rails_app/features/activity_monitor_servers.feature +6 -0
- data/spec/rails_app/features/create_rooms.feature +5 -0
- data/spec/rails_app/features/create_servers.feature +7 -2
- data/spec/rails_app/features/edit_rooms.feature +7 -0
- data/spec/rails_app/features/edit_servers.feature +8 -2
- data/spec/rails_app/features/join_rooms.feature +1 -0
- data/spec/rails_app/features/list_and_show_rooms.feature +10 -2
- data/spec/rails_app/features/step_definitions/activity_monitor_servers_step.rb +10 -10
- data/spec/rails_app/features/step_definitions/common_steps.rb +6 -4
- data/spec/rails_app/features/step_definitions/create_rooms_steps.rb +1 -0
- data/spec/rails_app/features/step_definitions/join_mobile_steps.rb +1 -3
- data/spec/rails_app/features/step_definitions/join_rooms_steps.rb +3 -7
- data/spec/rails_app/features/step_definitions/list_and_show_rooms_steps.rb +12 -5
- data/spec/rails_app/features/step_definitions/list_and_show_servers_steps.rb +1 -5
- data/spec/rails_app/features/support/{application_controller.rb → patches/application_controller.rb} +0 -0
- data/spec/rails_app/features/support/patches/bigbluebutton_room.rb +9 -0
- data/spec/rails_app/features/support/paths.rb +12 -10
- data/spec/rails_app/features/support/templates.rb +90 -46
- data/spec/routing/bigbluebutton/custom_controllers_routing_spec.rb +38 -22
- data/spec/routing/bigbluebutton/rooms_routing_spec.rb +142 -58
- data/spec/routing/bigbluebutton/servers_routing_spec.rb +9 -1
- metadata +11 -8
@@ -4,7 +4,7 @@ describe Bigbluebutton::ServersController do
|
|
4
4
|
render_views
|
5
5
|
let(:server) { Factory.create(:bigbluebutton_server) }
|
6
6
|
|
7
|
-
context "json responses for
|
7
|
+
context "json responses for" do
|
8
8
|
|
9
9
|
describe "#index" do
|
10
10
|
before do
|
@@ -144,5 +144,16 @@ describe Bigbluebutton::ServersController do
|
|
144
144
|
|
145
145
|
end
|
146
146
|
|
147
|
+
describe "#rooms" do
|
148
|
+
before do
|
149
|
+
@room1 = Factory.create(:bigbluebutton_room, :server => server)
|
150
|
+
@room2 = Factory.create(:bigbluebutton_room, :server => server)
|
151
|
+
end
|
152
|
+
before(:each) { get :rooms, :id => server.to_param, :format => 'json' }
|
153
|
+
it { should respond_with(:success) }
|
154
|
+
it { should respond_with_content_type(:json) }
|
155
|
+
it { should respond_with_json([@room1, @room2].to_json) }
|
156
|
+
end
|
157
|
+
|
147
158
|
end
|
148
159
|
end
|
@@ -140,5 +140,16 @@ describe Bigbluebutton::ServersController do
|
|
140
140
|
|
141
141
|
end # #activity
|
142
142
|
|
143
|
+
describe "#rooms" do
|
144
|
+
before do
|
145
|
+
@room1 = Factory.create(:bigbluebutton_room, :server => server)
|
146
|
+
@room2 = Factory.create(:bigbluebutton_room, :server => server)
|
147
|
+
end
|
148
|
+
before(:each) { get :rooms, :id => server.to_param }
|
149
|
+
it { should respond_with(:success) }
|
150
|
+
it { should render_template(:rooms) }
|
151
|
+
it { should assign_to(:rooms).with([@room1, @room2]) }
|
152
|
+
end
|
153
|
+
|
143
154
|
end
|
144
155
|
|
@@ -21,8 +21,8 @@ describe BigbluebuttonRails::Generators::InstallGenerator do
|
|
21
21
|
|
22
22
|
it "all files are properly destroyed" do
|
23
23
|
run_generator %w(), :behavior => :revoke
|
24
|
-
assert_no_file "config/locales/bigbluebutton_rails.en.yml"
|
25
24
|
assert_no_migration "db/migrate/create_bigbluebutton_rails.rb"
|
25
|
+
assert_no_file "config/locales/bigbluebutton_rails.en.yml"
|
26
26
|
assert_no_file "public/stylesheets/bigbluebutton_rails.css"
|
27
27
|
assert_no_file "public/javascripts/jquery.min.js"
|
28
28
|
assert_no_file "public/images/loading.gif"
|
@@ -13,7 +13,7 @@ describe BigbluebuttonRoom do
|
|
13
13
|
it { should_not validate_presence_of(:owner_id) }
|
14
14
|
it { should_not validate_presence_of(:owner_type) }
|
15
15
|
|
16
|
-
it {
|
16
|
+
it { should_not validate_presence_of(:server_id) }
|
17
17
|
it { should validate_presence_of(:meetingid) }
|
18
18
|
it { should validate_presence_of(:voice_bridge) }
|
19
19
|
it { should validate_presence_of(:name) }
|
@@ -22,10 +22,10 @@ describe BigbluebuttonRoom do
|
|
22
22
|
it { should be_boolean(:private) }
|
23
23
|
it { should be_boolean(:randomize_meetingid) }
|
24
24
|
|
25
|
-
[:name, :server_id, :meetingid, :attendee_password,
|
26
|
-
:
|
27
|
-
:voice_bridge, :max_participants, :owner_id,
|
28
|
-
:randomize_meetingid, :param].
|
25
|
+
[:name, :server_id, :meetingid, :attendee_password,
|
26
|
+
:moderator_password, :welcome_msg, :owner, :private, :logout_url,
|
27
|
+
:dial_number, :voice_bridge, :max_participants, :owner_id,
|
28
|
+
:owner_type, :randomize_meetingid, :param].
|
29
29
|
each do |attribute|
|
30
30
|
it { should allow_mass_assignment_of(attribute) }
|
31
31
|
end
|
@@ -36,11 +36,6 @@ describe BigbluebuttonRoom do
|
|
36
36
|
it { should validate_uniqueness_of(:voice_bridge) }
|
37
37
|
it { should validate_uniqueness_of(:param) }
|
38
38
|
|
39
|
-
it {
|
40
|
-
room = Factory.create(:bigbluebutton_room)
|
41
|
-
room.server.should_not be_nil
|
42
|
-
}
|
43
|
-
|
44
39
|
it { should ensure_length_of(:meetingid).is_at_least(1).is_at_most(100) }
|
45
40
|
it { should ensure_length_of(:name).is_at_least(1).is_at_most(150) }
|
46
41
|
it { should ensure_length_of(:attendee_password).is_at_most(16) }
|
@@ -50,7 +45,8 @@ describe BigbluebuttonRoom do
|
|
50
45
|
|
51
46
|
# attr_accessors
|
52
47
|
[:running, :participant_count, :moderator_count, :attendees,
|
53
|
-
:has_been_forcibly_ended, :start_time, :end_time,
|
48
|
+
:has_been_forcibly_ended, :start_time, :end_time,
|
49
|
+
:external, :server].each do |attr|
|
54
50
|
it { should respond_to(attr) }
|
55
51
|
it { should respond_to("#{attr}=") }
|
56
52
|
end
|
@@ -192,20 +188,26 @@ describe BigbluebuttonRoom do
|
|
192
188
|
|
193
189
|
it { should respond_to(:fetch_is_running?) }
|
194
190
|
|
195
|
-
|
196
|
-
|
197
|
-
|
198
|
-
|
199
|
-
|
200
|
-
|
191
|
+
context "fetches is_running? when not running" do
|
192
|
+
before {
|
193
|
+
mocked_api.should_receive(:is_meeting_running?).with(room.meetingid).and_return(false)
|
194
|
+
room.should_receive(:require_server)
|
195
|
+
room.server = mocked_server
|
196
|
+
}
|
197
|
+
before(:each) { room.fetch_is_running? }
|
198
|
+
it { room.running.should == false }
|
199
|
+
it { room.is_running?.should == false }
|
201
200
|
end
|
202
201
|
|
203
|
-
|
204
|
-
|
205
|
-
|
206
|
-
|
207
|
-
|
208
|
-
|
202
|
+
context "fetches is_running? when running" do
|
203
|
+
before {
|
204
|
+
mocked_api.should_receive(:is_meeting_running?).with(room.meetingid).and_return(true)
|
205
|
+
room.should_receive(:require_server)
|
206
|
+
room.server = mocked_server
|
207
|
+
}
|
208
|
+
before(:each) { room.fetch_is_running? }
|
209
|
+
it { room.running.should == true }
|
210
|
+
it { room.is_running?.should == true }
|
209
211
|
end
|
210
212
|
|
211
213
|
end
|
@@ -237,53 +239,57 @@ describe BigbluebuttonRoom do
|
|
237
239
|
|
238
240
|
it { should respond_to(:fetch_meeting_info) }
|
239
241
|
|
240
|
-
|
241
|
-
|
242
|
-
|
243
|
-
|
244
|
-
|
245
|
-
|
246
|
-
|
247
|
-
room.
|
248
|
-
room.
|
249
|
-
room.
|
250
|
-
room.
|
251
|
-
room.
|
252
|
-
room.
|
242
|
+
context "fetches meeting info when the meeting is not running" do
|
243
|
+
before {
|
244
|
+
mocked_api.should_receive(:get_meeting_info).
|
245
|
+
with(room.meetingid, room.moderator_password).and_return(hash_info)
|
246
|
+
room.should_receive(:require_server)
|
247
|
+
room.server = mocked_server
|
248
|
+
}
|
249
|
+
before(:each) { room.fetch_meeting_info }
|
250
|
+
it { room.running.should == false }
|
251
|
+
it { room.has_been_forcibly_ended.should == false }
|
252
|
+
it { room.participant_count.should == 0 }
|
253
|
+
it { room.moderator_count.should == 0 }
|
254
|
+
it { room.start_time.should == nil }
|
255
|
+
it { room.end_time.should == nil }
|
256
|
+
it { room.attendees.should == [] }
|
253
257
|
end
|
254
258
|
|
255
|
-
|
256
|
-
|
257
|
-
|
258
|
-
|
259
|
-
|
260
|
-
|
261
|
-
|
262
|
-
room.
|
263
|
-
room.
|
264
|
-
room.
|
265
|
-
room.
|
266
|
-
room.
|
267
|
-
|
268
|
-
|
269
|
-
|
270
|
-
|
271
|
-
|
272
|
-
|
259
|
+
context "fetches meeting info when the meeting is running" do
|
260
|
+
before {
|
261
|
+
mocked_api.should_receive(:get_meeting_info).
|
262
|
+
with(room.meetingid, room.moderator_password).and_return(hash_info2)
|
263
|
+
room.should_receive(:require_server)
|
264
|
+
room.server = mocked_server
|
265
|
+
}
|
266
|
+
before(:each) { room.fetch_meeting_info }
|
267
|
+
it { room.running.should == true }
|
268
|
+
it { room.has_been_forcibly_ended.should == false }
|
269
|
+
it { room.participant_count.should == 4 }
|
270
|
+
it { room.moderator_count.should == 2 }
|
271
|
+
it { room.start_time.should == DateTime.parse("Wed Apr 06 17:09:57 UTC 2011") }
|
272
|
+
it { room.end_time.should == nil }
|
273
|
+
it {
|
274
|
+
users.each do |att|
|
275
|
+
attendee = BigbluebuttonAttendee.new
|
276
|
+
attendee.from_hash(att)
|
277
|
+
room.attendees.should include(attendee)
|
278
|
+
end
|
279
|
+
}
|
273
280
|
end
|
274
281
|
|
275
282
|
end
|
276
283
|
|
277
284
|
describe "#send_end" do
|
278
|
-
|
279
285
|
it { should respond_to(:send_end) }
|
280
286
|
|
281
287
|
it "send end_meeting" do
|
282
288
|
mocked_api.should_receive(:end_meeting).with(room.meetingid, room.moderator_password)
|
289
|
+
room.should_receive(:require_server)
|
283
290
|
room.server = mocked_server
|
284
291
|
room.send_end
|
285
292
|
end
|
286
|
-
|
287
293
|
end
|
288
294
|
|
289
295
|
describe "#send_create" do
|
@@ -299,7 +305,7 @@ describe BigbluebuttonRoom do
|
|
299
305
|
|
300
306
|
it { should respond_to(:send_create) }
|
301
307
|
|
302
|
-
context "
|
308
|
+
context "sends create_meeting" do
|
303
309
|
|
304
310
|
context "for a stored room" do
|
305
311
|
before do
|
@@ -309,6 +315,7 @@ describe BigbluebuttonRoom do
|
|
309
315
|
:voiceBridge => room.voice_bridge)
|
310
316
|
mocked_api.should_receive(:create_meeting).
|
311
317
|
with(room.name, room.meetingid, hash).and_return(hash_create)
|
318
|
+
room.stub(:select_server).and_return(mocked_server)
|
312
319
|
room.server = mocked_server
|
313
320
|
room.send_create
|
314
321
|
end
|
@@ -326,6 +333,7 @@ describe BigbluebuttonRoom do
|
|
326
333
|
:voiceBridge => new_room.voice_bridge)
|
327
334
|
mocked_api.should_receive(:create_meeting).
|
328
335
|
with(new_room.name, new_room.meetingid, hash).and_return(hash_create)
|
336
|
+
new_room.stub(:select_server).and_return(mocked_server)
|
329
337
|
new_room.server = mocked_server
|
330
338
|
new_room.send_create
|
331
339
|
end
|
@@ -337,13 +345,12 @@ describe BigbluebuttonRoom do
|
|
337
345
|
end
|
338
346
|
|
339
347
|
context "randomizes meetingid" do
|
340
|
-
let(:fail_hash) { { :returncode => true, :meetingID => "new id",
|
341
|
-
|
342
|
-
let(:success_hash) { { :returncode => true, :meetingID => "new id",
|
343
|
-
:messageKey => "" } }
|
348
|
+
let(:fail_hash) { { :returncode => true, :meetingID => "new id", :messageKey => "duplicateWarning" } }
|
349
|
+
let(:success_hash) { { :returncode => true, :meetingID => "new id", :messageKey => "" } }
|
344
350
|
let(:new_id) { "new id" }
|
345
351
|
before {
|
346
352
|
room.randomize_meetingid = true
|
353
|
+
room.stub(:select_server).and_return(mocked_server)
|
347
354
|
room.server = mocked_server
|
348
355
|
}
|
349
356
|
|
@@ -358,7 +365,7 @@ describe BigbluebuttonRoom do
|
|
358
365
|
end
|
359
366
|
|
360
367
|
it "and tries again on error" do
|
361
|
-
# fails twice and
|
368
|
+
# fails twice and then succeds
|
362
369
|
room.should_receive(:random_meetingid).exactly(3).times.and_return(new_id)
|
363
370
|
hash = hash_including(:moderatorPW => room.moderator_password, :attendeePW => room.attendee_password,
|
364
371
|
:welcome => room.welcome_msg, :dialNumber => room.dial_number,
|
@@ -392,37 +399,72 @@ describe BigbluebuttonRoom do
|
|
392
399
|
:voiceBridge => room.voice_bridge)
|
393
400
|
mocked_api.should_receive(:create_meeting).
|
394
401
|
with(room.name, room.meetingid, hash).and_return(hash_create)
|
402
|
+
room.stub(:select_server).and_return(mocked_server)
|
395
403
|
room.server = mocked_server
|
396
404
|
end
|
397
405
|
it { room.send_create }
|
398
406
|
end
|
399
407
|
|
400
|
-
|
408
|
+
context "selects and requires a server" do
|
409
|
+
let(:another_server) { Factory.create(:bigbluebutton_server) }
|
410
|
+
|
411
|
+
context "and saves the result" do
|
412
|
+
before do
|
413
|
+
room.randomize_meetingid = false # take the shortest path inside #send_create
|
414
|
+
room.should_receive(:select_server).and_return(another_server)
|
415
|
+
room.should_receive(:require_server)
|
416
|
+
room.should_receive(:do_create_meeting)
|
417
|
+
room.server = mocked_server
|
418
|
+
room.send_create
|
419
|
+
end
|
420
|
+
it { BigbluebuttonRoom.find(room.id).server_id.should == another_server.id }
|
421
|
+
end
|
422
|
+
|
423
|
+
context "and does not save when is a new record" do
|
424
|
+
let(:new_room) { Factory.build(:bigbluebutton_room) }
|
425
|
+
before do
|
426
|
+
new_room.randomize_meetingid = false # take the shortest path inside #send_create
|
427
|
+
new_room.should_receive(:select_server).and_return(another_server)
|
428
|
+
new_room.should_receive(:require_server)
|
429
|
+
new_room.should_receive(:do_create_meeting).and_return(nil)
|
430
|
+
new_room.should_not_receive(:save)
|
431
|
+
new_room.server = mocked_server
|
432
|
+
new_room.send_create
|
433
|
+
end
|
434
|
+
it { new_room.new_record?.should be_true }
|
435
|
+
end
|
436
|
+
end
|
437
|
+
|
438
|
+
end # #send_create
|
401
439
|
|
402
440
|
describe "#join_url" do
|
403
441
|
let(:username) { Forgery(:name).full_name }
|
404
442
|
|
405
443
|
it { should respond_to(:join_url) }
|
406
444
|
|
407
|
-
|
408
|
-
|
409
|
-
with(room.meetingid, username, room.moderator_password)
|
410
|
-
room.server = mocked_server
|
411
|
-
room.join_url(username, :moderator)
|
412
|
-
end
|
445
|
+
context do
|
446
|
+
before { room.should_receive(:require_server) }
|
413
447
|
|
414
|
-
|
415
|
-
|
416
|
-
|
417
|
-
|
418
|
-
|
419
|
-
|
448
|
+
it "with moderator role" do
|
449
|
+
mocked_api.should_receive(:join_meeting_url).
|
450
|
+
with(room.meetingid, username, room.moderator_password)
|
451
|
+
room.server = mocked_server
|
452
|
+
room.join_url(username, :moderator)
|
453
|
+
end
|
420
454
|
|
421
|
-
|
422
|
-
|
423
|
-
|
424
|
-
|
425
|
-
|
455
|
+
it "with attendee role" do
|
456
|
+
mocked_api.should_receive(:join_meeting_url).
|
457
|
+
with(room.meetingid, username, room.attendee_password)
|
458
|
+
room.server = mocked_server
|
459
|
+
room.join_url(username, :attendee)
|
460
|
+
end
|
461
|
+
|
462
|
+
it "without a role" do
|
463
|
+
mocked_api.should_receive(:join_meeting_url).
|
464
|
+
with(room.meetingid, username, 'pass')
|
465
|
+
room.server = mocked_server
|
466
|
+
room.join_url(username, nil, 'pass')
|
467
|
+
end
|
426
468
|
end
|
427
469
|
end
|
428
470
|
|
@@ -548,4 +590,48 @@ describe BigbluebuttonRoom do
|
|
548
590
|
it { should respond_to(:"full_logout_url=") }
|
549
591
|
end
|
550
592
|
|
593
|
+
describe "#require_server" do
|
594
|
+
let(:room) { Factory.create(:bigbluebutton_room) }
|
595
|
+
it { should respond_to(:require_server) }
|
596
|
+
|
597
|
+
context "throws exception when the room has no server associated" do
|
598
|
+
before { room.server = nil }
|
599
|
+
it {
|
600
|
+
lambda {
|
601
|
+
room.send(:require_server)
|
602
|
+
}.should raise_error(BigbluebuttonRails::ServerRequired)
|
603
|
+
}
|
604
|
+
end
|
605
|
+
|
606
|
+
context "does nothing if the room has a server associated" do
|
607
|
+
before { room.server = Factory.create(:bigbluebutton_server) }
|
608
|
+
it {
|
609
|
+
lambda {
|
610
|
+
room.send(:require_server)
|
611
|
+
}.should_not raise_error(BigbluebuttonRails::ServerRequired)
|
612
|
+
}
|
613
|
+
end
|
614
|
+
end
|
615
|
+
|
616
|
+
describe "#select_server" do
|
617
|
+
let(:room) { Factory.create(:bigbluebutton_room, :server => nil) }
|
618
|
+
it { should respond_to(:select_server) }
|
619
|
+
|
620
|
+
context "selects the server with less rooms" do
|
621
|
+
before {
|
622
|
+
BigbluebuttonServer.destroy_all
|
623
|
+
s1 = Factory.create(:bigbluebutton_server)
|
624
|
+
@s2 = Factory.create(:bigbluebutton_server)
|
625
|
+
3.times{ Factory.create(:bigbluebutton_room, :server => s1) }
|
626
|
+
2.times{ Factory.create(:bigbluebutton_room, :server => @s2) }
|
627
|
+
}
|
628
|
+
it { room.send(:select_server).should == @s2 }
|
629
|
+
end
|
630
|
+
|
631
|
+
context "returns nil of there are no servers" do
|
632
|
+
before(:each) { BigbluebuttonServer.destroy_all }
|
633
|
+
it { room.send(:select_server).should == nil }
|
634
|
+
end
|
635
|
+
end
|
636
|
+
|
551
637
|
end
|
@@ -36,15 +36,15 @@ describe BigbluebuttonServer do
|
|
36
36
|
server.rooms.should_not be_empty
|
37
37
|
end
|
38
38
|
|
39
|
-
it "
|
39
|
+
it "nullifies associated rooms" do
|
40
40
|
server = Factory.create(:bigbluebutton_server)
|
41
|
-
Factory.create(:bigbluebutton_room, :server => server)
|
42
|
-
Factory.create(:bigbluebutton_room, :server => server)
|
41
|
+
room = Factory.create(:bigbluebutton_room, :server => server)
|
43
42
|
expect {
|
44
43
|
expect {
|
45
44
|
server.destroy
|
46
45
|
}.to change{ BigbluebuttonServer.count }.by(-1)
|
47
|
-
}.to change{ BigbluebuttonRoom.count }.by(
|
46
|
+
}.to change{ BigbluebuttonRoom.count }.by(0)
|
47
|
+
BigbluebuttonRoom.find(room.id).server_id.should == nil
|
48
48
|
end
|
49
49
|
|
50
50
|
it { should ensure_length_of(:name).is_at_least(1).is_at_most(500) }
|
@@ -2,6 +2,12 @@ Feature: Monitor the active in the webconference servers
|
|
2
2
|
To check the current status of a server
|
3
3
|
One needs a real-time activity monitor
|
4
4
|
|
5
|
+
Scenario: View the activity monitor page
|
6
|
+
Given an anonymous user
|
7
|
+
And a real server
|
8
|
+
When he goes to the server activity monitor page
|
9
|
+
Then he should see the server activity monitor page
|
10
|
+
|
5
11
|
@need-bot
|
6
12
|
Scenario: View the list of meetings running in a server
|
7
13
|
Given an anonymous user
|