bigbluebutton_rails 0.0.6 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (69) hide show
  1. data/.gitignore +1 -1
  2. data/CHANGELOG.rdoc +8 -0
  3. data/Gemfile +13 -7
  4. data/Gemfile.lock +112 -86
  5. data/README.rdoc +26 -80
  6. data/Rakefile +2 -1
  7. data/TODO_08 +13 -0
  8. data/app/controllers/bigbluebutton/rooms_controller.rb +9 -9
  9. data/app/controllers/bigbluebutton/servers_controller.rb +1 -1
  10. data/app/models/bigbluebutton_room.rb +16 -14
  11. data/app/models/bigbluebutton_server.rb +1 -1
  12. data/app/views/bigbluebutton/rooms/_form.html.erb +1 -1
  13. data/app/views/bigbluebutton/rooms/external.html.erb +3 -3
  14. data/app/views/bigbluebutton/rooms/invite.html.erb +3 -3
  15. data/app/views/bigbluebutton/servers/_form.html.erb +1 -1
  16. data/bigbluebutton_rails.gemspec +2 -2
  17. data/lib/bigbluebutton_rails/version.rb +1 -1
  18. data/spec/controllers/bigbluebutton/rooms_controller_spec.rb +42 -37
  19. data/spec/factories/bigbluebutton_room.rb +3 -1
  20. data/spec/models/bigbluebutton_room_db_spec.rb +34 -0
  21. data/spec/models/bigbluebutton_room_spec.rb +452 -457
  22. data/spec/models/bigbluebutton_server_db_spec.rb +14 -0
  23. data/spec/models/bigbluebutton_server_spec.rb +162 -176
  24. data/spec/rails_app/.gitignore +2 -1
  25. data/spec/rails_app/db/seeds.rb +16 -4
  26. data/spec/rails_app/features/activity_monitor_servers.feature +53 -0
  27. data/spec/rails_app/features/config.yml.example +13 -0
  28. data/spec/rails_app/features/create_rooms.feature +17 -0
  29. data/spec/rails_app/features/create_servers.feature +17 -0
  30. data/spec/rails_app/features/destroy_rooms.feature +12 -0
  31. data/spec/rails_app/features/destroy_servers.feature +11 -0
  32. data/spec/rails_app/features/edit_rooms.feature +26 -0
  33. data/spec/rails_app/features/edit_servers.feature +24 -0
  34. data/spec/rails_app/features/join_external_rooms.feature +61 -0
  35. data/spec/rails_app/features/join_mobile.feature +10 -0
  36. data/spec/rails_app/features/join_rooms.feature +117 -0
  37. data/spec/rails_app/features/list_and_show_rooms.feature +18 -0
  38. data/spec/rails_app/features/list_and_show_servers.feature +16 -0
  39. data/spec/rails_app/features/step_definitions/activity_monitor_servers_step.rb +102 -0
  40. data/spec/rails_app/features/step_definitions/common_steps.rb +99 -3
  41. data/spec/rails_app/features/step_definitions/create_rooms_steps.rb +38 -0
  42. data/spec/rails_app/features/step_definitions/{bigbluebutton_server_steps.rb → create_servers_steps.rb} +11 -6
  43. data/spec/rails_app/features/step_definitions/destroy_rooms_steps.rb +17 -0
  44. data/spec/rails_app/features/step_definitions/destroy_servers_steps.rb +15 -0
  45. data/spec/rails_app/features/step_definitions/edit_rooms_steps.rb +15 -0
  46. data/spec/rails_app/features/step_definitions/edit_servers_steps.rb +15 -0
  47. data/spec/rails_app/features/step_definitions/join_mobile_steps.rb +5 -0
  48. data/spec/rails_app/features/step_definitions/join_rooms_steps.rb +49 -0
  49. data/spec/rails_app/features/step_definitions/list_and_show_rooms_steps.rb +11 -0
  50. data/spec/rails_app/features/step_definitions/list_and_show_servers_steps.rb +11 -0
  51. data/spec/rails_app/features/support/configurations.rb +34 -0
  52. data/spec/rails_app/features/support/content.rb +27 -7
  53. data/spec/rails_app/features/support/env_custom.rb +21 -0
  54. data/spec/rails_app/features/support/factories/bigbluebutton_server_integration.rb +5 -0
  55. data/spec/rails_app/features/support/hooks.rb +14 -0
  56. data/spec/rails_app/features/support/locales.rb +18 -0
  57. data/spec/rails_app/features/support/paths.rb +25 -10
  58. data/spec/rails_app/features/support/selectors.rb +26 -0
  59. data/spec/rails_app/features/support/templates.rb +241 -0
  60. metadata +43 -20
  61. data/spec/factories/integration/bigbluebutton_server_integration.rb +0 -8
  62. data/spec/integration_conf.yml.example +0 -5
  63. data/spec/rails_app/features/join_external_bigbluebutton_rooms.feature +0 -19
  64. data/spec/rails_app/features/manage_bigbluebutton_rooms.feature +0 -9
  65. data/spec/rails_app/features/manage_bigbluebutton_servers.feature +0 -9
  66. data/spec/rails_app/features/step_definitions/bigbluebutton_room_steps.rb +0 -64
  67. data/spec/rails_app/features/support/env_gem.rb +0 -10
  68. data/spec/rails_app/features/support/forms.rb +0 -12
  69. data/spec/support/integration/integration_conf.rb +0 -16
@@ -0,0 +1,13 @@
1
+ # maximum wait until the bot starts (secs)
2
+ timeout_bot_start: 60
3
+
4
+ servers:
5
+ bbb-dev-07:
6
+ salt: 'your-salt'
7
+ url: 'http://your-server/bigbluebutton/api'
8
+ version: '0.7'
9
+ test-install-08:
10
+ salt: '8cd8ef52e8e101574e400365b55e11a6'
11
+ url: 'http://test-install.blindsidenetworks.com/bigbluebutton/api'
12
+ version: '0.8'
13
+ mobile_salt: '03b07' # needed for >= 0.8
@@ -0,0 +1,17 @@
1
+ Feature: Create webconference rooms
2
+ In order to held webconferences
3
+ One needs to create and configure webconference rooms
4
+
5
+ Scenario: Register a new BigBlueButton room
6
+ Given a real server
7
+ When the user goes to the new room page
8
+ And registers a new room
9
+ Then he should see the information about this room
10
+
11
+ Scenario: Try to register a new BigBlueButton room with errors
12
+ Given a real server
13
+ When the user goes to the new room page
14
+ And registers a new room with wrong parameters
15
+ Then he should be at the create room URL
16
+ And see the new room page
17
+ And see 2 errors in the field "bigbluebutton_room[name]"
@@ -0,0 +1,17 @@
1
+ Feature: Create webconference servers
2
+ In order to held webconferences
3
+ One needs to create and configure webconference servers
4
+
5
+ Scenario: Register a new BigBlueButton server
6
+ Given an anonymous user
7
+ When he goes to the new server page
8
+ And registers a new server
9
+ Then he should see the information about this server
10
+
11
+ Scenario: Try to register a BigBlueButton server with errors
12
+ Given an anonymous user
13
+ When he goes to the new server page
14
+ And registers a new server with a wrong URL
15
+ Then he should be at the create server URL
16
+ And see the new server page
17
+ And see 1 error in the field "bigbluebutton_server[url]"
@@ -0,0 +1,12 @@
1
+ Feature: Destroy webconference rooms
2
+ To remove a webconference room from a server
3
+ One needs to destroy its record
4
+
5
+ Scenario: Destroy a stored BigBlueButton server
6
+ Given an anonymous user
7
+ And a real server
8
+ And a room in this server
9
+ When he goes to the rooms index page
10
+ And clicks in the link to remove the first room
11
+ Then he should be at the rooms index URL
12
+ And the removed room should not be listed
@@ -0,0 +1,11 @@
1
+ Feature: Destroy webconference servers
2
+ To remove a webconference server from the list
3
+ One needs to destroy its record
4
+
5
+ Scenario: Destroy a stored BigBlueButton server
6
+ Given an anonymous user
7
+ And a real server
8
+ When he goes to the servers index page
9
+ And clicks in the link to remove the first server
10
+ Then he should be at the servers index URL
11
+ And the removed server should not be listed
@@ -0,0 +1,26 @@
1
+ Feature: Edit webconference rooms
2
+ To change the information of a webconference rooms
3
+ One needs to be able to edit and update the room
4
+
5
+ Scenario: Edit data in a BigBlueButton room
6
+ Given an anonymous user
7
+ And a real server
8
+ And a room in this server
9
+ When he goes to the edit room page
10
+ And change the room name to "Anything different"
11
+ And click in the button to save the room
12
+ Then he should be at the show room URL
13
+ And the room name should be "Anything different"
14
+
15
+ Scenario: Try to edit data in a BigBlueButton room with incorrect values
16
+ Given an anonymous user
17
+ And a real server
18
+ And a room in this server
19
+ When he goes to the edit room page
20
+ And change the room name to ""
21
+ And click in the button to save the room
22
+ Then he should be at the update room URL
23
+ And see the edit room page
24
+ And see 2 errors in the field "bigbluebutton_room[name]"
25
+ And the room name should NOT be "Anything different"
26
+
@@ -0,0 +1,24 @@
1
+ Feature: Edit webconference servers
2
+ To change the information of a webconference server
3
+ One needs to be able to edit and update the server
4
+
5
+ Scenario: Edit data in a BigBlueButton server
6
+ Given an anonymous user
7
+ And a real server
8
+ When he goes to the edit server page
9
+ And change the server URL to "http://test.com/bigbluebutton/api"
10
+ And click in the button to save the server
11
+ Then he should be at the show server URL
12
+ And the server URL should be "http://test.com/bigbluebutton/api"
13
+
14
+ Scenario: Try to edit data in a BigBlueButton server with incorrect values
15
+ Given an anonymous user
16
+ And a real server
17
+ When he goes to the edit server page
18
+ And change the server URL to "http://test.com/"
19
+ And click in the button to save the server
20
+ Then he should be at the update server URL
21
+ And see the edit server page
22
+ And see 1 errors in the field "bigbluebutton_server[url]"
23
+ And the server URL should NOT be "http://test.com/"
24
+
@@ -0,0 +1,61 @@
1
+ Feature: Join external webconference rooms
2
+ In order to join webconferences that were created from another application
3
+ One needs to enter his name and a password, that will define his role
4
+
5
+ @mechanize
6
+ Scenario: Joining an external room as moderator (a room that is not in the database)
7
+ Given an anonymous user
8
+ And a real server
9
+ And an external room in this server
10
+ When the user goes to the join external room page
11
+ And enters his name and the moderator password
12
+ And clicks in the button "Submit"
13
+ Then he should join the conference room
14
+
15
+ Scenario: Joining an external room that is NOT running as attendee
16
+ Given an anonymous user
17
+ And a real server
18
+ And an external room in this server
19
+ When the user goes to the join external room page
20
+ And enters his name and the attendee password
21
+ And clicks in the button "Submit"
22
+ Then he should NOT join the conference room
23
+ And should see an error message with the message "The meeting is not running"
24
+
25
+ @mechanize @need-bot
26
+ Scenario: Joining an external room that is running as attendee
27
+ Given an anonymous user
28
+ And a real server
29
+ And an external room in this server
30
+ And a meeting is running in this room
31
+ When the user goes to the join external room page
32
+ And enters his name and the attendee password
33
+ And clicks in the button "Submit"
34
+ Then he should join the conference room
35
+
36
+ Scenario: Joining an external room without entering a user name
37
+ Given an anonymous user
38
+ And a real server
39
+ And an external room in this server
40
+ When the user goes to the join external room page
41
+ And enters only the moderator password
42
+ And clicks in the button "Submit"
43
+ Then he should NOT join the conference room
44
+ And should see an error message with the message "Authentication failure"
45
+
46
+ Scenario: Joining an external room without entering a password (wrong password)
47
+ Given an anonymous user
48
+ And a real server
49
+ And an external room in this server
50
+ When the user goes to the join external room page
51
+ And enters only the user name
52
+ And clicks in the button "Submit"
53
+ Then he should NOT join the conference room
54
+ And should see an error message with the message "Authentication failure"
55
+
56
+ Scenario: Uses the current user's name as the default name to join an external room
57
+ Given a user named "test user"
58
+ And a real server
59
+ And an external room in this server
60
+ When the user goes to the join external room page
61
+ Then he should see his name in the user name input
@@ -0,0 +1,10 @@
1
+ Feature: Join a webconference using a mobile device
2
+ In order to participate in webconference using a mobile device
3
+ One needs to access the page with the mobile link and QR code
4
+
5
+ Scenario: Accessing the mobile join page
6
+ Given a user named "test user"
7
+ And a real server
8
+ And a public room in this server
9
+ When the user goes to the mobile join page
10
+ Then he should see the QR code and a link to join using a mobile device
@@ -0,0 +1,117 @@
1
+ Feature: Join webconference rooms
2
+ In order to participate in webconferences
3
+ One needs to join webconference rooms
4
+
5
+ # These scenarios are based in the permission defined in the default
6
+ # bigbluebutton_role method:
7
+ # if room.private or bigbluebutton_user.nil?
8
+ # :password # ask for a password
9
+ # else
10
+ # :moderator
11
+ # end
12
+
13
+ # First we check the behaviour of BigbluebuttonRoom#join and the redirects to
14
+ # BigbluebuttonRoom#invite
15
+
16
+ @mechanize
17
+ Scenario: Joining a public room
18
+ Given a user named "test user"
19
+ And a real server
20
+ And a public room in this server
21
+ When the user goes to the join room page
22
+ Then he should join the conference room
23
+
24
+ Scenario: Joining a public room as an anonymous user
25
+ Given an anonymous user
26
+ And a real server
27
+ And a public room in this server
28
+ When the user goes to the join room page
29
+ Then he should be at the invite room URL
30
+ And the password field was pre-filled with the attendee password
31
+
32
+ Scenario: Joining a private room requires a password
33
+ Given a user named "test user"
34
+ And a real server
35
+ And a private room in this server
36
+ When the user goes to the join room page
37
+ Then he should be redirected to the invite room URL
38
+
39
+ @mechanize
40
+ Scenario: Joining a private room as a moderator
41
+ Given a user named "test user"
42
+ And a real server
43
+ And a private room in this server
44
+ When the user goes to the join room page
45
+ And enters his name and the moderator password
46
+ And clicks in the button "Submit"
47
+ Then he should join the conference room
48
+
49
+ Scenario: Joining a private room that is NOT running as attendee
50
+ Given a user named "test user"
51
+ And a real server
52
+ And a private room in this server
53
+ When the user goes to the join room page
54
+ And enters his name and the attendee password
55
+ And clicks in the button "Submit"
56
+ Then he should NOT join the conference room
57
+ And should see an error message with the message "The meeting is not running"
58
+
59
+ @mechanize @need-bot
60
+ Scenario: Joining a private room that is running as attendee
61
+ Given a user named "test user"
62
+ And a real server
63
+ And a private room in this server
64
+ And a meeting is running in this room
65
+ When the user goes to the join room page
66
+ And enters his name and the attendee password
67
+ And clicks in the button "Submit"
68
+ Then he should join the conference room
69
+
70
+ Scenario: Joining a private room without entering a user name
71
+ Given an anonymous user
72
+ And a real server
73
+ And a private room in this server
74
+ When the user goes to the join room page
75
+ And enters only the moderator password
76
+ And clicks in the button "Submit"
77
+ Then he should NOT join the conference room
78
+ And should see an error message with the message "Authentication failure"
79
+
80
+ Scenario: Joining a private room without entering a password (wrong password)
81
+ Given an anonymous user
82
+ And a real server
83
+ And a private room in this server
84
+ When the user goes to the join room page
85
+ And enters only the user name
86
+ And clicks in the button "Submit"
87
+ Then he should NOT join the conference room
88
+ And should see an error message with the message "Authentication failure"
89
+
90
+ Scenario: Uses the current user's name as the default name to join a room
91
+ Given a user named "test user"
92
+ And a real server
93
+ And a private room in this server
94
+ When the user goes to the join room page
95
+ Then he should see his name in the user name input
96
+
97
+
98
+ # For the BigbluebuttonRoom#invite action we only check that it can be used by logged
99
+ # or anonymous users. Other cases were already tested above
100
+
101
+ @mechanize
102
+ Scenario: A logged user may join the meeting through the invite page
103
+ Given a user named "test user"
104
+ And a real server
105
+ And a public room in this server
106
+ When the user goes to the invite room page (no view check)
107
+ Then he should join the conference room
108
+
109
+ @mechanize
110
+ Scenario: An anonymous user may join the meeting through the invite page
111
+ Given an anonymous user
112
+ And a real server
113
+ And a public room in this server
114
+ When the user goes to the invite room page
115
+ And enters his name and the moderator password
116
+ And clicks in the button "Submit"
117
+ Then he should join the conference room
@@ -0,0 +1,18 @@
1
+ Feature: List and show webconference rooms
2
+ To view information of a webconference room
3
+ One needs to see the room in a list of rooms
4
+ and see all the information it has stored
5
+
6
+ Scenario: View the list of BigBlueButton rooms
7
+ Given an anonymous user
8
+ And a real server
9
+ And 3 rooms in this server
10
+ When he goes to the rooms index page
11
+ Then he should see all available rooms in the list
12
+
13
+ Scenario: View all information of a BigBlueButton room
14
+ Given an anonymous user
15
+ And a real server
16
+ And a room in this server
17
+ When he goes to the show room page
18
+ Then he should see all the information available for this room
@@ -0,0 +1,16 @@
1
+ Feature: List and show webconference servers
2
+ To view information of a webconference server
3
+ One needs to see the server in a list of servers
4
+ and see all the information it has stored
5
+
6
+ Scenario: View the list of BigBlueButton servers
7
+ Given an anonymous user
8
+ And 3 servers
9
+ When he goes to the servers index page
10
+ Then he should see all available servers in the list
11
+
12
+ Scenario: View all information of a BigBlueButton server
13
+ Given an anonymous user
14
+ And a real server
15
+ When he goes to the show server page
16
+ Then he should see all the information available for this server
@@ -0,0 +1,102 @@
1
+ When /^(\d+) meetings running in this server$/ do |count|
2
+ msalt = FeaturesConfig.server.has_key?('mobile_salt') ? FeaturesConfig.server['mobile_salt'] : ""
3
+ @rooms = []
4
+ count.to_i.times do |i|
5
+ room = Factory.create(:bigbluebutton_room, :server => @server)
6
+ room.send_create
7
+ BigBlueButtonBot.new(@server.api, room.meetingid, msalt,
8
+ 1, FeaturesConfig.root['timeout_bot_start'])
9
+ @rooms << room
10
+ end
11
+ end
12
+
13
+ When /^(\d+) meetings recently ended in this server$/ do |count|
14
+ msalt = FeaturesConfig.server.has_key?('mobile_salt') ? FeaturesConfig.server['mobile_salt'] : ""
15
+ @ended_rooms = []
16
+ count.to_i.times do |i|
17
+ room = Factory.create(:bigbluebutton_room, :server => @server)
18
+ room.send_create
19
+ BigBlueButtonBot.new(@server.api, room.meetingid, msalt,
20
+ 1, FeaturesConfig.root['timeout_bot_start'])
21
+ BigBlueButtonBot.finalize(room.meetingid)
22
+ sleep 1
23
+ @ended_rooms << room
24
+ end
25
+ end
26
+
27
+ When /^he should see the (\d+) meetings that are running$/ do |count|
28
+ check_server_activity_monitor_rooms(@rooms)
29
+ end
30
+
31
+ When /^he should see the external room in the list$/ do
32
+ check_server_activity_monitor_rooms([@room])
33
+ end
34
+
35
+ When /^he should see the (\d+) recently ended meetings$/ do |count|
36
+ check_server_activity_monitor_rooms(@ended_rooms)
37
+ end
38
+
39
+ When /^the first meeting is ended$/ do
40
+ @rooms.first.send_end
41
+ BigBlueButtonBot.finalize(@rooms.first.meetingid)
42
+ sleep 1 # give the bot some time to finish
43
+ end
44
+
45
+ When /^he clicks in the link to update the meeting list$/ do
46
+ find(make_selector("a.bbbrails_refresh_now")).click
47
+ end
48
+
49
+ When /^he should see one meeting running and the other meeting not running$/ do
50
+ # first was ended, second is running
51
+ @rooms.first.fetch_is_running?
52
+ @rooms.first.is_running?.should be_false
53
+ @rooms.last.fetch_is_running?
54
+ @rooms.last.is_running?.should be_true
55
+
56
+ check_server_activity_monitor_rooms(@rooms)
57
+ end
58
+
59
+ When /^after (\d+) seconds$/ do |count|
60
+ sleep count.to_i
61
+ end
62
+
63
+ # checks the rooms inside the activity monitor
64
+ def check_server_activity_monitor_rooms(rooms)
65
+ within(make_selector("div#bbbrails_server_activity_meetings")) do
66
+ rooms.each do |room|
67
+
68
+ # restrict the search to this room's div
69
+ xpath = ".//div[@class=\"bbbrails_meeting_description\" and contains(., \"#{room.meetingid}\")]"
70
+ within(find(:xpath, xpath)) do
71
+
72
+ # FIXME in bbb 0.7 get_meeting_info didn't return the room's name, only
73
+ # the meeting_id, so the name in the obj will be == meeting_id
74
+ # See BigbluebuttonServer#fetch_meetings
75
+ has_content(room.name) unless room.new_record?
76
+ has_content(room.meetingid)
77
+
78
+ method = room.new_record? ? method(:doesnt_have_element) : method(:has_element)
79
+ method.call("a", { :href => bigbluebutton_server_room_path(@server, room) })
80
+ method.call("a", { :href => edit_bigbluebutton_server_room_path(@server, room) })
81
+ method.call("a", { :href => bigbluebutton_server_room_path(@server, room), :"data-method" => :delete })
82
+ method.call("a", { :href => join_bigbluebutton_server_room_path(@server, room) })
83
+ method.call("a", { :href => join_mobile_bigbluebutton_server_room_path(@server, room) })
84
+ method.call("a", { :href => end_bigbluebutton_server_room_path(@server, room) })
85
+
86
+ room.fetch_is_running?
87
+ if room.is_running?
88
+ has_content(room.start_time)
89
+ has_element("span.running")
90
+ room.participant_count.times do |i|
91
+ has_content("Bot #{i}") # user name
92
+ end
93
+ else
94
+ has_content(room.start_time)
95
+ has_content(room.end_time)
96
+ has_element("span.not_running")
97
+ end
98
+ end
99
+
100
+ end
101
+ end
102
+ end