bigbluebutton_rails 0.0.6 → 0.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.
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