bigbluebutton_rails 0.0.5 → 0.0.6
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +2 -0
- data/.rvmrc +6 -0
- data/.travis.yml +4 -0
- data/CHANGELOG.rdoc +9 -0
- data/Gemfile +18 -0
- data/Gemfile.lock +85 -65
- data/README.rdoc +23 -0
- data/Rakefile +17 -6
- data/app/controllers/bigbluebutton/rooms_controller.rb +79 -58
- data/app/controllers/bigbluebutton/servers_controller.rb +41 -24
- data/app/models/bigbluebutton_room.rb +45 -5
- data/app/models/bigbluebutton_server.rb +5 -7
- data/app/views/bigbluebutton/rooms/external.html.erb +24 -0
- data/app/views/bigbluebutton/rooms/join_mobile.html.erb +1 -1
- data/app/views/bigbluebutton/servers/_activity_list.html.erb +7 -7
- data/app/views/bigbluebutton/servers/activity.html.erb +1 -1
- data/bigbluebutton_rails.gemspec +2 -12
- data/config/locales/en.yml +3 -0
- data/lib/bigbluebutton_rails/rails/routes.rb +12 -6
- data/lib/bigbluebutton_rails/utils.rb +8 -0
- data/lib/bigbluebutton_rails/version.rb +1 -1
- data/lib/bigbluebutton_rails.rb +1 -0
- data/spec/bigbluebutton_rails_spec.rb +13 -0
- data/spec/controllers/bigbluebutton/rooms_controller_exception_handling_spec.rb +114 -0
- data/spec/controllers/bigbluebutton/rooms_controller_json_responses_spec.rb +167 -0
- data/spec/controllers/bigbluebutton/rooms_controller_spec.rb +213 -457
- data/spec/controllers/bigbluebutton/servers_controller_json_responses_spec.rb +148 -0
- data/spec/controllers/bigbluebutton/servers_controller_spec.rb +50 -76
- data/spec/factories/bigbluebutton_room.rb +1 -0
- data/spec/models/bigbluebutton_room_spec.rb +141 -17
- data/spec/models/bigbluebutton_server_spec.rb +27 -36
- data/spec/rails_app/app/controllers/application_controller.rb +4 -3
- data/spec/rails_app/config/initializers/rack_hotfix.rb +13 -0
- data/spec/rails_app/features/join_external_bigbluebutton_rooms.feature +19 -0
- data/spec/rails_app/features/manage_bigbluebutton_rooms.feature +3 -3
- data/spec/rails_app/features/manage_bigbluebutton_servers.feature +2 -2
- data/spec/rails_app/features/step_definitions/bigbluebutton_room_steps.rb +29 -3
- data/spec/rails_app/features/step_definitions/bigbluebutton_server_steps.rb +2 -7
- data/spec/rails_app/features/step_definitions/common_steps.rb +15 -2
- data/spec/rails_app/features/step_definitions/web_steps.rb +7 -3
- data/spec/rails_app/features/support/application_controller.rb +12 -0
- data/spec/rails_app/features/support/content.rb +10 -0
- data/spec/rails_app/features/support/env.rb +4 -4
- data/spec/rails_app/features/support/env_gem.rb +2 -1
- data/spec/rails_app/features/support/forms.rb +12 -0
- data/spec/rails_app/features/support/paths.rb +17 -8
- data/spec/rails_app/features/support/selectors.rb +57 -0
- data/spec/rails_app/features/support/within.rb +7 -0
- data/spec/routing/bigbluebutton/rooms_routing_spec.rb +60 -52
- data/spec/routing/bigbluebutton/servers_routing_spec.rb +8 -8
- data/spec/spec_helper.rb +5 -0
- data/spec/support/controllers/bigbluebutton/rooms_controller.rb +7 -0
- data/spec/support/matchers/shoulda/be_boolean.rb +1 -1
- data/spec/support/shared_examples/rooms_controller.rb +37 -0
- metadata +24 -110
- data/spec/rails_app/app/helpers/application_helper.rb +0 -2
@@ -3,7 +3,7 @@ Feature: Manage BigBlueButton rooms
|
|
3
3
|
One needs to be able to create and manage BigBlueButton rooms
|
4
4
|
|
5
5
|
Scenario: Register a new BigBlueButton room
|
6
|
-
Given a
|
7
|
-
When the user goes to the new
|
8
|
-
And registers a new
|
6
|
+
Given a server
|
7
|
+
When the user goes to the new room page
|
8
|
+
And registers a new room
|
9
9
|
Then he should see the information about this room
|
@@ -4,6 +4,6 @@ Feature: Manage BigBlueButton servers
|
|
4
4
|
|
5
5
|
Scenario: Register a new BigBlueButton server
|
6
6
|
Given a user named "test user"
|
7
|
-
When he goes to the new
|
8
|
-
And registers a new
|
7
|
+
When he goes to the new server page
|
8
|
+
And registers a new server
|
9
9
|
Then he should see the information about this server
|
@@ -1,8 +1,8 @@
|
|
1
|
-
|
1
|
+
When /a server/i do
|
2
2
|
@server = Factory.create(:bigbluebutton_server_integration)
|
3
3
|
end
|
4
4
|
|
5
|
-
|
5
|
+
When /^registers a new room$/i do
|
6
6
|
attrs = Factory.attributes_for(:bigbluebutton_room, :server => @server)
|
7
7
|
fill_in("bigbluebutton_room[name]", :with => attrs[:name])
|
8
8
|
fill_in("bigbluebutton_room[meetingid]", :with => attrs[:meetingid])
|
@@ -20,7 +20,7 @@ And /^registers a new BigBlueButton room$/i do
|
|
20
20
|
click_button("Create")
|
21
21
|
end
|
22
22
|
|
23
|
-
|
23
|
+
When /(?:|I ) should see the information about this room/i do
|
24
24
|
room = BigbluebuttonRoom.last
|
25
25
|
page_has_content(room.name)
|
26
26
|
page_has_content(room.meetingid)
|
@@ -36,3 +36,29 @@ Then /(?:|I ) should see the information about this room/ do
|
|
36
36
|
page_has_content(room.external)
|
37
37
|
page_has_content(room.param)
|
38
38
|
end
|
39
|
+
|
40
|
+
When /^an external room$/i do
|
41
|
+
@room = Factory.build(:bigbluebutton_room, :server => @server, :external => true)
|
42
|
+
@room.send_create
|
43
|
+
end
|
44
|
+
|
45
|
+
When /(?:|I ) should see a form to join the external room$/i do
|
46
|
+
within(form_selector(external_bigbluebutton_server_rooms_path(@server), 'post')) do
|
47
|
+
has_element("input", { :name => 'meeting', :type => 'hidden', :value => @room.meetingid })
|
48
|
+
has_element("input", { :name => 'user[name]', :type => 'text' })
|
49
|
+
has_element("input", { :name => 'user[password]', :type => 'password' })
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
When /his name should be in the appropriate input$/i do
|
54
|
+
within(form_selector(external_bigbluebutton_server_rooms_path(@server), 'post')) do
|
55
|
+
has_element("input", { :name => 'user[name]', :type => 'text', :value => @user.name })
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
When /^be able to join the room$/i do
|
60
|
+
fill_in("user[name]", :with => @user.name)
|
61
|
+
fill_in("user[password]", :with => @room.moderator_password)
|
62
|
+
click_button("Submit")
|
63
|
+
# TODO: check current_url to ensure it is inside the conference
|
64
|
+
end
|
@@ -1,9 +1,4 @@
|
|
1
|
-
|
2
|
-
@username = username
|
3
|
-
# TODO useless for now
|
4
|
-
end
|
5
|
-
|
6
|
-
And /^registers a new BigBlueButton server$/i do
|
1
|
+
When /^registers a new server$/i do
|
7
2
|
attrs = Factory.attributes_for(:bigbluebutton_server_integration)
|
8
3
|
fill_in("bigbluebutton_server[name]", :with => attrs[:name])
|
9
4
|
fill_in("bigbluebutton_server[url]", :with => attrs[:url])
|
@@ -13,7 +8,7 @@ And /^registers a new BigBlueButton server$/i do
|
|
13
8
|
click_button("Create")
|
14
9
|
end
|
15
10
|
|
16
|
-
|
11
|
+
When /(?:|I ) should see the information about this server/ do
|
17
12
|
server = BigbluebuttonServer.last
|
18
13
|
page_has_content(server.name)
|
19
14
|
page_has_content(server.url)
|
@@ -1,3 +1,16 @@
|
|
1
|
-
When /(?:|I ) go(es)? to (.+) page$/i do |_, page_name|
|
2
|
-
visit path_to(page_name)
|
1
|
+
When /(?:|I ) go(es)? to the (.+) page$/i do |_, page_name|
|
2
|
+
visit path_to(page_name, @params)
|
3
|
+
end
|
4
|
+
|
5
|
+
When /(?:|I ) go(es)? to the (.+) page for (.+)$/i do |_, page_name, param|
|
6
|
+
case page_name
|
7
|
+
when /join external room/i
|
8
|
+
@params = { :meeting => @room.meetingid }
|
9
|
+
end
|
10
|
+
visit path_to(page_name, @params)
|
11
|
+
end
|
12
|
+
|
13
|
+
When /a user named "(.+)"/i do |username|
|
14
|
+
@user = Factory.build(:user, :name => username)
|
15
|
+
ApplicationController.set_user(@user) # This is now the logged user
|
3
16
|
end
|
@@ -24,6 +24,7 @@ require 'cgi'
|
|
24
24
|
require File.expand_path(File.join(File.dirname(__FILE__), "..", "support", "paths"))
|
25
25
|
require File.expand_path(File.join(File.dirname(__FILE__), "..", "support", "selectors"))
|
26
26
|
|
27
|
+
=begin
|
27
28
|
module WithinHelpers
|
28
29
|
def with_scope(locator)
|
29
30
|
locator ? within(*selector_for(locator)) { yield } : yield
|
@@ -48,6 +49,7 @@ end
|
|
48
49
|
When /^(?:|I )go to (.+)$/ do |page_name|
|
49
50
|
visit path_to(page_name)
|
50
51
|
end
|
52
|
+
=end
|
51
53
|
|
52
54
|
When /^(?:|I )press "([^"]*)"$/ do |button|
|
53
55
|
click_button(button)
|
@@ -102,6 +104,7 @@ When /^(?:|I )attach the file "([^"]*)" to "([^"]*)"$/ do |path, field|
|
|
102
104
|
attach_file(field, File.expand_path(path))
|
103
105
|
end
|
104
106
|
|
107
|
+
=begin
|
105
108
|
Then /^(?:|I )should see "([^"]*)"$/ do |text|
|
106
109
|
if page.respond_to? :should
|
107
110
|
page.should have_content(text)
|
@@ -137,6 +140,7 @@ Then /^(?:|I )should not see \/([^\/]*)\/$/ do |regexp|
|
|
137
140
|
assert page.has_no_xpath?('//*', :text => regexp)
|
138
141
|
end
|
139
142
|
end
|
143
|
+
=end
|
140
144
|
|
141
145
|
Then /^the "([^"]*)" field(?: within (.*))? should contain "([^"]*)"$/ do |field, parent, value|
|
142
146
|
with_scope(parent) do
|
@@ -183,7 +187,7 @@ Then /^the "([^"]*)" checkbox(?: within (.*))? should not be checked$/ do |label
|
|
183
187
|
end
|
184
188
|
end
|
185
189
|
end
|
186
|
-
|
190
|
+
|
187
191
|
Then /^(?:|I )should be on (.+)$/ do |page_name|
|
188
192
|
current_path = URI.parse(current_url).path
|
189
193
|
if current_path.respond_to? :should
|
@@ -197,8 +201,8 @@ Then /^(?:|I )should have the following query string:$/ do |expected_pairs|
|
|
197
201
|
query = URI.parse(current_url).query
|
198
202
|
actual_params = query ? CGI.parse(query) : {}
|
199
203
|
expected_params = {}
|
200
|
-
expected_pairs.rows_hash.each_pair{|k,v| expected_params[k] = v.split(',')}
|
201
|
-
|
204
|
+
expected_pairs.rows_hash.each_pair{|k,v| expected_params[k] = v.split(',')}
|
205
|
+
|
202
206
|
if actual_params.respond_to? :should
|
203
207
|
actual_params.should == expected_params
|
204
208
|
else
|
@@ -1,4 +1,13 @@
|
|
1
1
|
module ContentHelpers
|
2
|
+
|
3
|
+
def page_has_content(text)
|
4
|
+
if page.respond_to? :should
|
5
|
+
page.should have_content(text)
|
6
|
+
else
|
7
|
+
assert page.has_content?(text)
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
2
11
|
def page_has_content(text)
|
3
12
|
if page.respond_to? :should
|
4
13
|
page.should have_content(text)
|
@@ -6,6 +15,7 @@ module ContentHelpers
|
|
6
15
|
assert page.has_content?(text)
|
7
16
|
end
|
8
17
|
end
|
18
|
+
|
9
19
|
end
|
10
20
|
|
11
21
|
World(ContentHelpers)
|
@@ -1,6 +1,6 @@
|
|
1
1
|
# IMPORTANT: This file is generated by cucumber-rails - edit at your own peril.
|
2
|
-
# It is recommended to regenerate this file in the future when you upgrade to a
|
3
|
-
# newer version of cucumber-rails. Consider adding your own code to a new file
|
2
|
+
# It is recommended to regenerate this file in the future when you upgrade to a
|
3
|
+
# newer version of cucumber-rails. Consider adding your own code to a new file
|
4
4
|
# instead of editing this one. Cucumber will automatically load all features/**/*.rb
|
5
5
|
# files.
|
6
6
|
|
@@ -13,8 +13,8 @@ require 'cucumber/rails'
|
|
13
13
|
Capybara.default_selector = :css
|
14
14
|
|
15
15
|
# By default, any exception happening in your Rails application will bubble up
|
16
|
-
# to Cucumber so that your scenario will fail. This is a different from how
|
17
|
-
# your application behaves in the production environment, where an error page will
|
16
|
+
# to Cucumber so that your scenario will fail. This is a different from how
|
17
|
+
# your application behaves in the production environment, where an error page will
|
18
18
|
# be rendered instead.
|
19
19
|
#
|
20
20
|
# Sometimes we want to override this default behaviour and allow Rails to rescue
|
@@ -6,4 +6,5 @@ Dir["#{File.dirname(__FILE__)}/../../../support/integration/**/*.rb"].each { |f|
|
|
6
6
|
# Load the factories in the gem spec/factories folder
|
7
7
|
require 'factory_girl'
|
8
8
|
require 'forgery'
|
9
|
-
Dir["#{ File.dirname(__FILE__)}/../../../factories
|
9
|
+
Dir["#{ File.dirname(__FILE__)}/../../../factories/*.rb"].each { |f| require f }
|
10
|
+
Dir["#{ File.dirname(__FILE__)}/../../../factories/integration/*.rb"].each { |f| require f }
|
@@ -0,0 +1,12 @@
|
|
1
|
+
module FormsHelpers
|
2
|
+
|
3
|
+
# Creates a css selector to match a form with certain action, method and possibly other attribues
|
4
|
+
def form_selector(action, method='post', attrs={})
|
5
|
+
attrs[:action] = action
|
6
|
+
attrs[:method] = method
|
7
|
+
make_selector("form", attrs)
|
8
|
+
end
|
9
|
+
|
10
|
+
end
|
11
|
+
|
12
|
+
World(FormsHelpers)
|
@@ -5,15 +5,19 @@ module NavigationHelpers
|
|
5
5
|
#
|
6
6
|
# step definition in web_steps.rb
|
7
7
|
#
|
8
|
-
def path_to(page_name)
|
8
|
+
def path_to(page_name, params=nil)
|
9
|
+
params = "?" + params.map{ |k,v| "#{k}=#{CGI::escape(v)}" }.join("&") if params
|
10
|
+
|
9
11
|
case page_name
|
10
12
|
|
11
|
-
when /^
|
12
|
-
'/'
|
13
|
-
when /
|
14
|
-
new_bigbluebutton_server_path
|
15
|
-
when /
|
16
|
-
new_bigbluebutton_server_room_path(@server)
|
13
|
+
when /^home\s?$/
|
14
|
+
p = '/'
|
15
|
+
when /new server/i
|
16
|
+
p = new_bigbluebutton_server_path
|
17
|
+
when /new room/i
|
18
|
+
p = new_bigbluebutton_server_room_path(@server)
|
19
|
+
when /join external room/i
|
20
|
+
p = external_bigbluebutton_server_rooms_path(@server)
|
17
21
|
|
18
22
|
|
19
23
|
# Add more mappings here.
|
@@ -23,15 +27,20 @@ module NavigationHelpers
|
|
23
27
|
# user_profile_path(User.find_by_login($1))
|
24
28
|
|
25
29
|
else
|
30
|
+
=begin
|
26
31
|
begin
|
27
32
|
page_name =~ /^the (.*) page$/
|
28
33
|
path_components = $1.split(/\s+/)
|
29
34
|
self.send(path_components.push('path').join('_').to_sym)
|
30
35
|
rescue NoMethodError, ArgumentError
|
36
|
+
=end
|
31
37
|
raise "Can't find mapping from \"#{page_name}\" to a path.\n" +
|
32
38
|
"Now, go and add a mapping in #{__FILE__}"
|
33
|
-
end
|
39
|
+
# end
|
34
40
|
end
|
41
|
+
|
42
|
+
p += params if params
|
43
|
+
p
|
35
44
|
end
|
36
45
|
end
|
37
46
|
|
@@ -1,4 +1,61 @@
|
|
1
1
|
module HtmlSelectorsHelpers
|
2
|
+
|
3
|
+
# Creates a selector (a string) using xpath or css selectors (default)
|
4
|
+
def make_selector(element, attrs={}, method=:css)
|
5
|
+
case method
|
6
|
+
when :xpath
|
7
|
+
# TODO: test xpath with multiple attrs
|
8
|
+
"//#{element}" + attrs.map{ |k,v| "[@#{k.to_s}='#{v.to_s}']" }.join
|
9
|
+
else # :css
|
10
|
+
"#{element}" + attrs.map{ |k,v| "[#{k.to_s}='#{v.to_s}']" }.join
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
# Ensures the page has certain element with certain attributes
|
15
|
+
# Same as has_element but for the entire page
|
16
|
+
def page_has_element(element, attrs={}, method=:css)
|
17
|
+
selector = make_selector(element, attrs, method)
|
18
|
+
if page.respond_to? :should
|
19
|
+
case method
|
20
|
+
when :xpath
|
21
|
+
page.should have_xpath(selector)
|
22
|
+
else # :css
|
23
|
+
page.should have_selector(selector)
|
24
|
+
end
|
25
|
+
else
|
26
|
+
case method
|
27
|
+
when :xpath
|
28
|
+
assert page.has_xpath?(selector)
|
29
|
+
else # :css
|
30
|
+
assert page.has_selector?(selector)
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
# Ensures there is a certain element with certain attributes
|
36
|
+
# Used inside "within" blocks
|
37
|
+
# Exemples (both will have the same result):
|
38
|
+
# has_element("input", { :name => 'meeting', :type => 'hidden', :value => 'my-value' })
|
39
|
+
# has_element("input[name='meeting'][type='hidden'][value='my-value']")
|
40
|
+
def has_element(element, attrs={}, method=:css)
|
41
|
+
selector = make_selector(element, attrs, method)
|
42
|
+
if respond_to? :should
|
43
|
+
case method
|
44
|
+
when :xpath
|
45
|
+
should have_xpath(selector)
|
46
|
+
else # :css
|
47
|
+
should have_selector(selector)
|
48
|
+
end
|
49
|
+
else
|
50
|
+
case method
|
51
|
+
when :xpath
|
52
|
+
assert has_xpath?(selector)
|
53
|
+
else # :css
|
54
|
+
assert has_xpath?(selector)
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
2
59
|
# Maps a name to a selector. Used primarily by the
|
3
60
|
#
|
4
61
|
# When /^(.+) within (.+)$/ do |step, scope|
|
@@ -9,115 +9,123 @@ describe Bigbluebutton::RoomsController do
|
|
9
9
|
['bigbluebutton', 'webconference'].each do |prefix|
|
10
10
|
|
11
11
|
it {
|
12
|
-
{:get => "/#{prefix}/servers/1/rooms"}.
|
13
|
-
should route_to(:controller => "bigbluebutton/rooms", :action => "index", :server_id => "1")
|
12
|
+
{:get => "/#{prefix}/servers/server-1/rooms"}.
|
13
|
+
should route_to(:controller => "bigbluebutton/rooms", :action => "index", :server_id => "server-1")
|
14
14
|
}
|
15
15
|
it {
|
16
|
-
{:get => "/#{prefix}/servers/1/rooms/new"}.
|
17
|
-
should route_to(:controller => "bigbluebutton/rooms", :action => "new", :server_id => "1")
|
16
|
+
{:get => "/#{prefix}/servers/server-1/rooms/new"}.
|
17
|
+
should route_to(:controller => "bigbluebutton/rooms", :action => "new", :server_id => "server-1")
|
18
18
|
}
|
19
19
|
it {
|
20
|
-
{:get => "/#{prefix}/servers/1/rooms/
|
21
|
-
should route_to(:controller => "bigbluebutton/rooms", :action => "
|
20
|
+
{:get => "/#{prefix}/servers/server-1/rooms/external"}.
|
21
|
+
should route_to(:controller => "bigbluebutton/rooms", :action => "external", :server_id => "server-1")
|
22
22
|
}
|
23
23
|
it {
|
24
|
-
{:
|
25
|
-
should route_to(:controller => "bigbluebutton/rooms", :action => "
|
24
|
+
{:post => "/#{prefix}/servers/server-1/rooms/external"}.
|
25
|
+
should route_to(:controller => "bigbluebutton/rooms", :action => "external_auth", :server_id => "server-1")
|
26
26
|
}
|
27
27
|
it {
|
28
|
-
{:
|
29
|
-
should route_to(:controller => "bigbluebutton/rooms", :action => "
|
28
|
+
{:get => "/#{prefix}/servers/server-1/rooms/room-1/edit"}.
|
29
|
+
should route_to(:controller => "bigbluebutton/rooms", :action => "edit", :server_id => "server-1", :id => "room-1")
|
30
30
|
}
|
31
31
|
it {
|
32
|
-
{:
|
33
|
-
should route_to(:controller => "bigbluebutton/rooms", :action => "
|
32
|
+
{:get => "/#{prefix}/servers/server-1/rooms/room-1"}.
|
33
|
+
should route_to(:controller => "bigbluebutton/rooms", :action => "show", :server_id => "server-1", :id => "room-1")
|
34
34
|
}
|
35
35
|
it {
|
36
|
-
{:
|
37
|
-
should route_to(:controller => "bigbluebutton/rooms", :action => "
|
36
|
+
{:put => "/#{prefix}/servers/server-1/rooms/room-1"}.
|
37
|
+
should route_to(:controller => "bigbluebutton/rooms", :action => "update", :server_id => "server-1", :id => "room-1")
|
38
38
|
}
|
39
39
|
it {
|
40
|
-
{:
|
41
|
-
should route_to(:controller => "bigbluebutton/rooms", :action => "
|
40
|
+
{:delete => "/#{prefix}/servers/server-1/rooms/room-1"}.
|
41
|
+
should route_to(:controller => "bigbluebutton/rooms", :action => "destroy", :server_id => "server-1", :id => "room-1")
|
42
42
|
}
|
43
43
|
it {
|
44
|
-
{:get => "/#{prefix}/servers/1/rooms/1/
|
45
|
-
should route_to(:controller => "bigbluebutton/rooms", :action => "
|
44
|
+
{:get => "/#{prefix}/servers/server-1/rooms/room-1/join"}.
|
45
|
+
should route_to(:controller => "bigbluebutton/rooms", :action => "join", :server_id => "server-1", :id => "room-1")
|
46
46
|
}
|
47
47
|
it {
|
48
|
-
{:get => "/#{prefix}/servers/1/rooms/1/
|
49
|
-
should route_to(:controller => "bigbluebutton/rooms", :action => "
|
48
|
+
{:get => "/#{prefix}/servers/server-1/rooms/room-1/join_mobile"}.
|
49
|
+
should route_to(:controller => "bigbluebutton/rooms", :action => "join_mobile", :server_id => "server-1" ,:id => "room-1")
|
50
50
|
}
|
51
51
|
it {
|
52
|
-
{:get => "/#{prefix}/servers/1/rooms/1/
|
53
|
-
should route_to(:controller => "bigbluebutton/rooms", :action => "
|
52
|
+
{:get => "/#{prefix}/servers/server-1/rooms/room-1/running"}.
|
53
|
+
should route_to(:controller => "bigbluebutton/rooms", :action => "running", :server_id => "server-1", :id => "room-1")
|
54
54
|
}
|
55
55
|
it {
|
56
|
-
{:
|
57
|
-
should route_to(:controller => "bigbluebutton/rooms", :action => "
|
56
|
+
{:get => "/#{prefix}/servers/server-1/rooms/room-1/end"}.
|
57
|
+
should route_to(:controller => "bigbluebutton/rooms", :action => "end", :server_id => "server-1", :id => "room-1")
|
58
|
+
}
|
59
|
+
it {
|
60
|
+
{:get => "/#{prefix}/servers/server-1/rooms/room-1/invite"}.
|
61
|
+
should route_to(:controller => "bigbluebutton/rooms", :action => "invite", :server_id => "server-1", :id => "room-1")
|
62
|
+
}
|
63
|
+
it {
|
64
|
+
{:post => "/#{prefix}/servers/server-1/rooms/room-1/join"}.
|
65
|
+
should route_to(:controller => "bigbluebutton/rooms", :action => "auth", :server_id => "server-1", :id => "room-1")
|
58
66
|
}
|
59
67
|
|
60
68
|
end
|
61
69
|
|
62
70
|
# room matchers inside users
|
63
71
|
it {
|
64
|
-
should route(:get, "/users/1/room/1").
|
65
|
-
to(:action => :show, :user_id => "1", :id => "1")
|
72
|
+
should route(:get, "/users/1/room/room-1").
|
73
|
+
to(:action => :show, :user_id => "1", :id => "room-1")
|
66
74
|
}
|
67
75
|
it {
|
68
|
-
should route(:get, "/users/1/room/1/join").
|
69
|
-
to(:action => :join, :user_id => "1", :id => "1")
|
76
|
+
should route(:get, "/users/1/room/room-1/join").
|
77
|
+
to(:action => :join, :user_id => "1", :id => "room-1")
|
70
78
|
}
|
71
79
|
it {
|
72
|
-
should route(:get, "/users/1/room/1/join_mobile").
|
73
|
-
to(:action => :join_mobile, :user_id => "1", :id => "1")
|
80
|
+
should route(:get, "/users/1/room/room-1/join_mobile").
|
81
|
+
to(:action => :join_mobile, :user_id => "1", :id => "room-1")
|
74
82
|
}
|
75
83
|
it {
|
76
|
-
should route(:get, "/users/1/room/1/running").
|
77
|
-
to(:action => :running, :user_id => "1", :id => "1")
|
84
|
+
should route(:get, "/users/1/room/room-1/running").
|
85
|
+
to(:action => :running, :user_id => "1", :id => "room-1")
|
78
86
|
}
|
79
87
|
it {
|
80
|
-
should route(:get, "/users/1/room/1/end").
|
81
|
-
to(:action => :end, :user_id => "1", :id => "1")
|
88
|
+
should route(:get, "/users/1/room/room-1/end").
|
89
|
+
to(:action => :end, :user_id => "1", :id => "room-1")
|
82
90
|
}
|
83
91
|
it {
|
84
|
-
should route(:get, "/users/1/room/1/invite").
|
85
|
-
to(:action => :invite, :user_id => "1", :id => "1")
|
92
|
+
should route(:get, "/users/1/room/room-1/invite").
|
93
|
+
to(:action => :invite, :user_id => "1", :id => "room-1")
|
86
94
|
}
|
87
95
|
it {
|
88
|
-
should route(:post, "/users/1/room/1/join").
|
89
|
-
to(:action => :auth, :user_id => "1", :id => "1")
|
96
|
+
should route(:post, "/users/1/room/room-1/join").
|
97
|
+
to(:action => :auth, :user_id => "1", :id => "room-1")
|
90
98
|
}
|
91
99
|
|
92
100
|
# room matchers inside users/spaces
|
93
101
|
# FIXME shoulda-matcher is not working here, why?
|
94
102
|
it {
|
95
|
-
{ :get => "/users/1/spaces/2/room/
|
96
|
-
should route_to(:controller => "bigbluebutton/rooms", :action => "show", :user_id => "1", :space_id => "2", :id => "
|
103
|
+
{ :get => "/users/1/spaces/2/room/room-1" }.
|
104
|
+
should route_to(:controller => "bigbluebutton/rooms", :action => "show", :user_id => "1", :space_id => "2", :id => "room-1")
|
97
105
|
}
|
98
106
|
it {
|
99
|
-
{ :get => "/users/1/spaces/2/room/
|
100
|
-
should route_to(:controller => "bigbluebutton/rooms", :action => "join", :user_id => "1", :space_id => "2", :id => "
|
107
|
+
{ :get => "/users/1/spaces/2/room/room-1/join" }.
|
108
|
+
should route_to(:controller => "bigbluebutton/rooms", :action => "join", :user_id => "1", :space_id => "2", :id => "room-1")
|
101
109
|
}
|
102
110
|
it {
|
103
|
-
{ :get => "/users/1/spaces/2/room/
|
104
|
-
should route_to(:controller => "bigbluebutton/rooms", :action => "join_mobile", :user_id => "1", :space_id => "2", :id => "
|
111
|
+
{ :get => "/users/1/spaces/2/room/room-1/join_mobile" }.
|
112
|
+
should route_to(:controller => "bigbluebutton/rooms", :action => "join_mobile", :user_id => "1", :space_id => "2", :id => "room-1")
|
105
113
|
}
|
106
114
|
it {
|
107
|
-
{ :get => "/users/1/spaces/2/room/
|
108
|
-
should route_to(:controller => "bigbluebutton/rooms", :action => "running", :user_id => "1", :space_id => "2", :id => "
|
115
|
+
{ :get => "/users/1/spaces/2/room/room-1/running" }.
|
116
|
+
should route_to(:controller => "bigbluebutton/rooms", :action => "running", :user_id => "1", :space_id => "2", :id => "room-1")
|
109
117
|
}
|
110
118
|
it {
|
111
|
-
{ :get => "/users/1/spaces/2/room/
|
112
|
-
should route_to(:controller => "bigbluebutton/rooms", :action => "end", :user_id => "1", :space_id => "2", :id => "
|
119
|
+
{ :get => "/users/1/spaces/2/room/room-1/end" }.
|
120
|
+
should route_to(:controller => "bigbluebutton/rooms", :action => "end", :user_id => "1", :space_id => "2", :id => "room-1")
|
113
121
|
}
|
114
122
|
it {
|
115
|
-
{ :get => "/users/1/spaces/2/room/
|
116
|
-
should route_to(:controller => "bigbluebutton/rooms", :action => "invite", :user_id => "1", :space_id => "2", :id => "
|
123
|
+
{ :get => "/users/1/spaces/2/room/room-1/invite" }.
|
124
|
+
should route_to(:controller => "bigbluebutton/rooms", :action => "invite", :user_id => "1", :space_id => "2", :id => "room-1")
|
117
125
|
}
|
118
126
|
it {
|
119
|
-
{ :post => "/users/1/spaces/2/room/
|
120
|
-
should route_to(:controller => "bigbluebutton/rooms", :action => "auth", :user_id => "1", :space_id => "2", :id => "
|
127
|
+
{ :post => "/users/1/spaces/2/room/room-1/join" }.
|
128
|
+
should route_to(:controller => "bigbluebutton/rooms", :action => "auth", :user_id => "1", :space_id => "2", :id => "room-1")
|
121
129
|
}
|
122
130
|
end
|
123
131
|
|
@@ -20,20 +20,20 @@ describe Bigbluebutton::ServersController do
|
|
20
20
|
should route_to(:controller => "bigbluebutton/servers", :action => "new")
|
21
21
|
}
|
22
22
|
it {
|
23
|
-
{:get => "/#{prefix}/servers/1/edit"}.
|
24
|
-
should route_to(:controller => "bigbluebutton/servers", :action => "edit", :id => "1")
|
23
|
+
{:get => "/#{prefix}/servers/server-1/edit"}.
|
24
|
+
should route_to(:controller => "bigbluebutton/servers", :action => "edit", :id => "server-1")
|
25
25
|
}
|
26
26
|
it {
|
27
|
-
{:get => "/#{prefix}/servers/1"}.
|
28
|
-
should route_to(:controller => "bigbluebutton/servers", :action => "show", :id => "1")
|
27
|
+
{:get => "/#{prefix}/servers/server-1"}.
|
28
|
+
should route_to(:controller => "bigbluebutton/servers", :action => "show", :id => "server-1")
|
29
29
|
}
|
30
30
|
it {
|
31
|
-
{:put => "/#{prefix}/servers/1"}.
|
32
|
-
should route_to(:controller => "bigbluebutton/servers", :action => "update", :id => "1")
|
31
|
+
{:put => "/#{prefix}/servers/server-1"}.
|
32
|
+
should route_to(:controller => "bigbluebutton/servers", :action => "update", :id => "server-1")
|
33
33
|
}
|
34
34
|
it {
|
35
|
-
{:delete => "/#{prefix}/servers/1"}.
|
36
|
-
should route_to(:controller => "bigbluebutton/servers", :action => "destroy", :id => "1")
|
35
|
+
{:delete => "/#{prefix}/servers/server-1"}.
|
36
|
+
should route_to(:controller => "bigbluebutton/servers", :action => "destroy", :id => "server-1")
|
37
37
|
}
|
38
38
|
end
|
39
39
|
|
data/spec/spec_helper.rb
CHANGED
@@ -0,0 +1,37 @@
|
|
1
|
+
# Checks calls to RoomsController.join_internal method when the user
|
2
|
+
# is an ATTENDEE (it can be the role of the current user or can be defined
|
3
|
+
# by the password the user typed)
|
4
|
+
#
|
5
|
+
# Arguments:
|
6
|
+
# room # the target BigbluebuttonRoom
|
7
|
+
# request # the request to be executed
|
8
|
+
# template # the template that should be rendered
|
9
|
+
#
|
10
|
+
# TODO: review if we really need this shared_example
|
11
|
+
shared_examples_for "internal join caller" do
|
12
|
+
before {
|
13
|
+
BigbluebuttonRoom.stub(:find_by_param).and_return(room)
|
14
|
+
controller.stub(:bigbluebutton_role).and_return(:attendee)
|
15
|
+
}
|
16
|
+
|
17
|
+
context "when the user has permission to join" do
|
18
|
+
before {
|
19
|
+
room.should_receive(:perform_join).with(user.name, :attendee, controller.request).
|
20
|
+
and_return("http://test.com/join/url")
|
21
|
+
}
|
22
|
+
before(:each) { request }
|
23
|
+
it { should respond_with(:redirect) }
|
24
|
+
it { should redirect_to("http://test.com/join/url") }
|
25
|
+
end
|
26
|
+
|
27
|
+
context "when the user doesn't have permission to join" do
|
28
|
+
before {
|
29
|
+
room.should_receive(:perform_join).with(user.name, :attendee, controller.request).
|
30
|
+
and_return(nil)
|
31
|
+
}
|
32
|
+
before(:each) { request }
|
33
|
+
it { should respond_with(:success) }
|
34
|
+
it { should render_template(template) }
|
35
|
+
it { should set_the_flash.to(I18n.t('bigbluebutton_rails.rooms.errors.auth.not_running')) }
|
36
|
+
end
|
37
|
+
end
|