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.
- data/.gitignore +1 -1
- data/CHANGELOG.rdoc +8 -0
- data/Gemfile +13 -7
- data/Gemfile.lock +112 -86
- data/README.rdoc +26 -80
- data/Rakefile +2 -1
- data/TODO_08 +13 -0
- data/app/controllers/bigbluebutton/rooms_controller.rb +9 -9
- data/app/controllers/bigbluebutton/servers_controller.rb +1 -1
- data/app/models/bigbluebutton_room.rb +16 -14
- data/app/models/bigbluebutton_server.rb +1 -1
- data/app/views/bigbluebutton/rooms/_form.html.erb +1 -1
- data/app/views/bigbluebutton/rooms/external.html.erb +3 -3
- data/app/views/bigbluebutton/rooms/invite.html.erb +3 -3
- data/app/views/bigbluebutton/servers/_form.html.erb +1 -1
- data/bigbluebutton_rails.gemspec +2 -2
- data/lib/bigbluebutton_rails/version.rb +1 -1
- data/spec/controllers/bigbluebutton/rooms_controller_spec.rb +42 -37
- data/spec/factories/bigbluebutton_room.rb +3 -1
- data/spec/models/bigbluebutton_room_db_spec.rb +34 -0
- data/spec/models/bigbluebutton_room_spec.rb +452 -457
- data/spec/models/bigbluebutton_server_db_spec.rb +14 -0
- data/spec/models/bigbluebutton_server_spec.rb +162 -176
- data/spec/rails_app/.gitignore +2 -1
- data/spec/rails_app/db/seeds.rb +16 -4
- data/spec/rails_app/features/activity_monitor_servers.feature +53 -0
- data/spec/rails_app/features/config.yml.example +13 -0
- data/spec/rails_app/features/create_rooms.feature +17 -0
- data/spec/rails_app/features/create_servers.feature +17 -0
- data/spec/rails_app/features/destroy_rooms.feature +12 -0
- data/spec/rails_app/features/destroy_servers.feature +11 -0
- data/spec/rails_app/features/edit_rooms.feature +26 -0
- data/spec/rails_app/features/edit_servers.feature +24 -0
- data/spec/rails_app/features/join_external_rooms.feature +61 -0
- data/spec/rails_app/features/join_mobile.feature +10 -0
- data/spec/rails_app/features/join_rooms.feature +117 -0
- data/spec/rails_app/features/list_and_show_rooms.feature +18 -0
- data/spec/rails_app/features/list_and_show_servers.feature +16 -0
- data/spec/rails_app/features/step_definitions/activity_monitor_servers_step.rb +102 -0
- data/spec/rails_app/features/step_definitions/common_steps.rb +99 -3
- data/spec/rails_app/features/step_definitions/create_rooms_steps.rb +38 -0
- data/spec/rails_app/features/step_definitions/{bigbluebutton_server_steps.rb → create_servers_steps.rb} +11 -6
- data/spec/rails_app/features/step_definitions/destroy_rooms_steps.rb +17 -0
- data/spec/rails_app/features/step_definitions/destroy_servers_steps.rb +15 -0
- data/spec/rails_app/features/step_definitions/edit_rooms_steps.rb +15 -0
- data/spec/rails_app/features/step_definitions/edit_servers_steps.rb +15 -0
- data/spec/rails_app/features/step_definitions/join_mobile_steps.rb +5 -0
- data/spec/rails_app/features/step_definitions/join_rooms_steps.rb +49 -0
- data/spec/rails_app/features/step_definitions/list_and_show_rooms_steps.rb +11 -0
- data/spec/rails_app/features/step_definitions/list_and_show_servers_steps.rb +11 -0
- data/spec/rails_app/features/support/configurations.rb +34 -0
- data/spec/rails_app/features/support/content.rb +27 -7
- data/spec/rails_app/features/support/env_custom.rb +21 -0
- data/spec/rails_app/features/support/factories/bigbluebutton_server_integration.rb +5 -0
- data/spec/rails_app/features/support/hooks.rb +14 -0
- data/spec/rails_app/features/support/locales.rb +18 -0
- data/spec/rails_app/features/support/paths.rb +25 -10
- data/spec/rails_app/features/support/selectors.rb +26 -0
- data/spec/rails_app/features/support/templates.rb +241 -0
- metadata +43 -20
- data/spec/factories/integration/bigbluebutton_server_integration.rb +0 -8
- data/spec/integration_conf.yml.example +0 -5
- data/spec/rails_app/features/join_external_bigbluebutton_rooms.feature +0 -19
- data/spec/rails_app/features/manage_bigbluebutton_rooms.feature +0 -9
- data/spec/rails_app/features/manage_bigbluebutton_servers.feature +0 -9
- data/spec/rails_app/features/step_definitions/bigbluebutton_room_steps.rb +0 -64
- data/spec/rails_app/features/support/env_gem.rb +0 -10
- data/spec/rails_app/features/support/forms.rb +0 -12
- data/spec/support/integration/integration_conf.rb +0 -16
@@ -1,16 +1,112 @@
|
|
1
|
-
When
|
2
|
-
|
1
|
+
When /^a real server$/i do
|
2
|
+
@server = Factory.create(:bigbluebutton_server_integration)
|
3
|
+
end
|
4
|
+
|
5
|
+
When /^(\d+) server(s)?$/i do |count, _|
|
6
|
+
# Note: these servers are not real, it will NOT be possible to make api requests
|
7
|
+
# for a real server use :bigbluebutton_server_integration
|
8
|
+
# Use "a real server" whenever possible
|
9
|
+
count.to_i.times do
|
10
|
+
Factory.create(:bigbluebutton_server)
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
When /^a(n external)? room in this server$/i do |external|
|
15
|
+
if external.nil?
|
16
|
+
@room = Factory.create(:bigbluebutton_room, :server => @server)
|
17
|
+
else
|
18
|
+
@room = Factory.build(:bigbluebutton_room, :server => @server, :external => true)
|
19
|
+
end
|
20
|
+
@room.send_create
|
21
|
+
end
|
22
|
+
|
23
|
+
When /^a public room in this server$/i do
|
24
|
+
steps %Q{ When a room in this server }
|
25
|
+
@room.update_attributes(:private => false)
|
26
|
+
end
|
27
|
+
|
28
|
+
When /^a private room in this server$/i do
|
29
|
+
steps %Q{ When a room in this server }
|
30
|
+
@room.update_attributes(:private => true)
|
3
31
|
end
|
4
32
|
|
5
|
-
When
|
33
|
+
When /^(\d+) room(s)? in this server$/i do |count, _|
|
34
|
+
count.to_i.times do
|
35
|
+
steps %Q{ When a room in this server }
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
# Some paths will just redirect to other paths instead of rendering a view
|
40
|
+
# So we can set "(no view check)" and the view won't be verified
|
41
|
+
When /(?:|I ) go(es)? to the (.+) page( \(no view check\))?$/i do |_, page_name, not_check|
|
6
42
|
case page_name
|
7
43
|
when /join external room/i
|
8
44
|
@params = { :meeting => @room.meetingid }
|
9
45
|
end
|
10
46
|
visit path_to(page_name, @params)
|
47
|
+
check_template(page_name) if not_check.nil?
|
48
|
+
end
|
49
|
+
|
50
|
+
When /see the (.+) page$/i do |page_name|
|
51
|
+
check_template(page_name)
|
11
52
|
end
|
12
53
|
|
13
54
|
When /a user named "(.+)"/i do |username|
|
14
55
|
@user = Factory.build(:user, :name => username)
|
15
56
|
ApplicationController.set_user(@user) # This is now the logged user
|
16
57
|
end
|
58
|
+
|
59
|
+
When /an anonymous user/i do
|
60
|
+
@user = nil
|
61
|
+
ApplicationController.set_user(@user)
|
62
|
+
end
|
63
|
+
|
64
|
+
When /(?:|I ) should be at the (.+) URL$/i do |page_name|
|
65
|
+
current_url.should match(/#{path_to(page_name)}/)
|
66
|
+
end
|
67
|
+
|
68
|
+
When /^he should be redirected to the (.+) URL$/ do |page|
|
69
|
+
steps %Q{ When he should be at the #{page} URL }
|
70
|
+
end
|
71
|
+
|
72
|
+
When /^(he )?should see an error message with the message "(.+)"$/i do |_, msg|
|
73
|
+
key = message_to_locale_key(msg)
|
74
|
+
within(make_selector("div#error_explanation")) do
|
75
|
+
has_content(I18n.t(key))
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
When /^see (\d+) error(s)? in the field "(.+)"$/i do |errors, _, field_name|
|
80
|
+
within(make_selector("#error_explanation")) do
|
81
|
+
errors.to_i == 1 ? has_content("1 error:") : has_content("#{errors} errors:")
|
82
|
+
end
|
83
|
+
id = field_name.gsub(/\]?\[/, "_").gsub(/\]/, "")
|
84
|
+
has_element("div.field_with_errors > label", { :for => id })
|
85
|
+
has_element("div.field_with_errors > input##{id}", { :name => field_name })
|
86
|
+
end
|
87
|
+
|
88
|
+
When /^clicks in the button "(.+)"$/i do |button|
|
89
|
+
click_button(button)
|
90
|
+
end
|
91
|
+
|
92
|
+
When /^a meeting is running in this room$/ do
|
93
|
+
steps %Q{ When a meeting is running in this room with 1 attendees }
|
94
|
+
end
|
95
|
+
|
96
|
+
When /^a meeting is running in this room with (\d+) attendees$/ do |count|
|
97
|
+
msalt = FeaturesConfig.server.has_key?('mobile_salt') ? FeaturesConfig.server['mobile_salt'] : ""
|
98
|
+
BigBlueButtonBot.new(@server.api, @room.meetingid, msalt,
|
99
|
+
count.to_i, FeaturesConfig.root['timeout_bot_start'])
|
100
|
+
end
|
101
|
+
|
102
|
+
|
103
|
+
# helpers for development
|
104
|
+
|
105
|
+
When /is pending/i do
|
106
|
+
pending
|
107
|
+
end
|
108
|
+
|
109
|
+
When /puts the page/i do
|
110
|
+
puts current_url
|
111
|
+
puts body.inspect
|
112
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
When /^registers a new room$/i do
|
2
|
+
attrs = Factory.attributes_for(:bigbluebutton_room, :server => @server)
|
3
|
+
fill_in("bigbluebutton_room[name]", :with => attrs[:name])
|
4
|
+
fill_in("bigbluebutton_room[meetingid]", :with => attrs[:meetingid])
|
5
|
+
check("bigbluebutton_room[randomize_meetingid]") if attrs[:randomize_meetingid]
|
6
|
+
check("bigbluebutton_room[private]") if attrs[:private]
|
7
|
+
fill_in("bigbluebutton_room[attendee_password]", :with => attrs[:attendee_password])
|
8
|
+
fill_in("bigbluebutton_room[moderator_password]", :with => attrs[:moderator_password])
|
9
|
+
fill_in("bigbluebutton_room[welcome_msg]", :with => attrs[:welcome_msg])
|
10
|
+
fill_in("bigbluebutton_room[logout_url]", :with => attrs[:logout_url])
|
11
|
+
fill_in("bigbluebutton_room[dial_number]", :with => attrs[:dial_number])
|
12
|
+
fill_in("bigbluebutton_room[max_participants]", :with => attrs[:max_participants])
|
13
|
+
check("bigbluebutton_room[external]") if attrs[:external]
|
14
|
+
fill_in("bigbluebutton_room[param]", :with => attrs[:param])
|
15
|
+
# Note: voice_bridge is generated when the BigbluebuttonRoom is created
|
16
|
+
click_button("Create")
|
17
|
+
end
|
18
|
+
|
19
|
+
When /^registers a new room with wrong parameters$/i do
|
20
|
+
attrs = Factory.attributes_for(:bigbluebutton_room, :server => @server)
|
21
|
+
fill_in("bigbluebutton_room[name]", :with => nil) # invalid
|
22
|
+
fill_in("bigbluebutton_room[meetingid]", :with => attrs[:meetingid])
|
23
|
+
check("bigbluebutton_room[randomize_meetingid]") if attrs[:randomize_meetingid]
|
24
|
+
check("bigbluebutton_room[private]") if attrs[:private]
|
25
|
+
fill_in("bigbluebutton_room[attendee_password]", :with => attrs[:attendee_password])
|
26
|
+
fill_in("bigbluebutton_room[moderator_password]", :with => attrs[:moderator_password])
|
27
|
+
fill_in("bigbluebutton_room[welcome_msg]", :with => attrs[:welcome_msg])
|
28
|
+
fill_in("bigbluebutton_room[logout_url]", :with => attrs[:logout_url])
|
29
|
+
fill_in("bigbluebutton_room[dial_number]", :with => attrs[:dial_number])
|
30
|
+
fill_in("bigbluebutton_room[max_participants]", :with => attrs[:max_participants])
|
31
|
+
check("bigbluebutton_room[external]") if attrs[:external]
|
32
|
+
fill_in("bigbluebutton_room[param]", :with => attrs[:param])
|
33
|
+
click_button("Create")
|
34
|
+
end
|
35
|
+
|
36
|
+
When /(?:|I ) should see the information about this room/i do
|
37
|
+
steps %Q{ When see the show room page }
|
38
|
+
end
|
@@ -8,11 +8,16 @@ When /^registers a new server$/i do
|
|
8
8
|
click_button("Create")
|
9
9
|
end
|
10
10
|
|
11
|
+
When /^registers a new server with a wrong URL$/i do
|
12
|
+
attrs = Factory.attributes_for(:bigbluebutton_server_integration)
|
13
|
+
fill_in("bigbluebutton_server[name]", :with => attrs[:name])
|
14
|
+
fill_in("bigbluebutton_server[url]", :with => "invalid url")
|
15
|
+
fill_in("bigbluebutton_server[salt]", :with => attrs[:salt])
|
16
|
+
fill_in("bigbluebutton_server[version]", :with => attrs[:version])
|
17
|
+
fill_in("bigbluebutton_server[param]", :with => attrs[:param])
|
18
|
+
click_button("Create")
|
19
|
+
end
|
20
|
+
|
11
21
|
When /(?:|I ) should see the information about this server/ do
|
12
|
-
server
|
13
|
-
page_has_content(server.name)
|
14
|
-
page_has_content(server.url)
|
15
|
-
page_has_content(server.salt)
|
16
|
-
page_has_content(server.version)
|
17
|
-
page_has_content(server.param)
|
22
|
+
steps %Q{ When see the show server page }
|
18
23
|
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
When /^clicks in the link to remove the first room$/i do
|
2
|
+
# there's only 1 room created, so only 1 "Destroy" link
|
3
|
+
click_link("Destroy")
|
4
|
+
end
|
5
|
+
|
6
|
+
When /^the removed room should not be listed$/i do
|
7
|
+
BigbluebuttonRoom.find_by_id(@room.id).should be_nil
|
8
|
+
|
9
|
+
# check params that are specific for this server
|
10
|
+
doesnt_have_content(@room.meetingid)
|
11
|
+
doesnt_have_content(@room.name)
|
12
|
+
doesnt_have_content(@room.attendee_password)
|
13
|
+
doesnt_have_content(@room.moderator_password)
|
14
|
+
doesnt_have_content(@room.voice_bridge)
|
15
|
+
doesnt_have_content(@room.param)
|
16
|
+
end
|
17
|
+
|
@@ -0,0 +1,15 @@
|
|
1
|
+
When /^clicks in the link to remove the first server$/i do
|
2
|
+
# there's only 1 server created, so only 1 "Destroy" link
|
3
|
+
click_link("Destroy")
|
4
|
+
end
|
5
|
+
|
6
|
+
When /^the removed server should not be listed$/i do
|
7
|
+
BigbluebuttonServer.find_by_id(@server.id).should be_nil
|
8
|
+
|
9
|
+
# check params that are specific for this server
|
10
|
+
doesnt_have_content(@server.name)
|
11
|
+
doesnt_have_content(@server.url)
|
12
|
+
doesnt_have_content(@server.salt)
|
13
|
+
doesnt_have_content(@server.param)
|
14
|
+
end
|
15
|
+
|
@@ -0,0 +1,15 @@
|
|
1
|
+
When /^change the room name to "(.*)"$/ do |name|
|
2
|
+
fill_in("bigbluebutton_room[name]", :with => name)
|
3
|
+
end
|
4
|
+
|
5
|
+
When /^click in the button to save the room$/ do
|
6
|
+
find(:css, "input#bigbluebutton_room_submit").click
|
7
|
+
end
|
8
|
+
|
9
|
+
Then /^the room name should( not)? be "(.+)"$/i do |negate, name|
|
10
|
+
if negate.nil?
|
11
|
+
BigbluebuttonRoom.first.name.should == name
|
12
|
+
else
|
13
|
+
BigbluebuttonRoom.first.name.should_not == name
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
When /^change the server URL to "(.+)"$/ do |url|
|
2
|
+
fill_in("bigbluebutton_server[url]", :with => url)
|
3
|
+
end
|
4
|
+
|
5
|
+
When /^click in the button to save the server$/ do
|
6
|
+
find(:css, "input#bigbluebutton_server_submit").click
|
7
|
+
end
|
8
|
+
|
9
|
+
Then /^the server URL should( not)? be "(.+)"$/i do |negate, url|
|
10
|
+
if negate.nil?
|
11
|
+
BigbluebuttonServer.first.url.should == url
|
12
|
+
else
|
13
|
+
BigbluebuttonServer.first.url.should_not == url
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,49 @@
|
|
1
|
+
When /^he should see a form to join the external room$/i do
|
2
|
+
within(form_selector(external_bigbluebutton_server_rooms_path(@server), 'post')) do
|
3
|
+
has_element("input", { :name => 'meeting', :type => 'hidden', :value => @room.meetingid })
|
4
|
+
has_element("input", { :name => 'user[name]', :type => 'text' })
|
5
|
+
has_element("input", { :name => 'user[password]', :type => 'password' })
|
6
|
+
end
|
7
|
+
end
|
8
|
+
|
9
|
+
When /^he should see his name in the user name input$/i do
|
10
|
+
case current_url
|
11
|
+
when /\/invite$/ # normal rooms
|
12
|
+
form = form_selector(join_bigbluebutton_server_room_path(@server, @room), 'post')
|
13
|
+
when /\/external(\?.*)?/ # external rooms
|
14
|
+
form = form_selector(external_bigbluebutton_server_rooms_path(@server), 'post')
|
15
|
+
end
|
16
|
+
within(form) do
|
17
|
+
has_element("input", { :name => 'user[name]', :type => 'text', :value => @user.name })
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
When /^he should( not)? join the conference room$/i do |negate|
|
22
|
+
if negate.nil?
|
23
|
+
current_url.should match(/\/client\/BigBlueButton\.html/) # BBB client page
|
24
|
+
else
|
25
|
+
current_url.should_not match(/\/client\/BigBlueButton\.html/)
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
When /^enters his name and the (.+) password$/i do |role|
|
30
|
+
name = @user.nil? ? "Anonymous" : @user.name
|
31
|
+
password = role.downcase.to_sym == :moderator ? @room.moderator_password : @room.attendee_password
|
32
|
+
fill_in("user[name]", :with => name)
|
33
|
+
fill_in("user[password]", :with => password)
|
34
|
+
end
|
35
|
+
|
36
|
+
When /^enters only the (.+) password$/ do |role|
|
37
|
+
password = role.downcase.to_sym == :moderator ? @room.moderator_password : @room.attendee_password
|
38
|
+
fill_in("user[password]", :with => password)
|
39
|
+
fill_in("user[name]", :with => "")
|
40
|
+
end
|
41
|
+
|
42
|
+
When /^enters only the user name$/ do
|
43
|
+
name = @user.nil? ? "Anonymous" : @user.name
|
44
|
+
fill_in("user[name]", :with => name)
|
45
|
+
end
|
46
|
+
|
47
|
+
When /^the password field was pre-filled with the attendee password$/ do
|
48
|
+
has_element("input", { :name => 'user[password]', :type => 'password', :value => @room.attendee_password })
|
49
|
+
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
When /^he should see all available rooms in the list$/i do
|
2
|
+
# FIXME this is already being checked in "he goes to the rooms index page"
|
3
|
+
# any better ideas?
|
4
|
+
check_template("rooms index")
|
5
|
+
end
|
6
|
+
|
7
|
+
When /^he should see all the information available for this room$/i do
|
8
|
+
# FIXME this is already being checked in "he goes to the show room page"
|
9
|
+
# any better ideas?
|
10
|
+
check_template("show room")
|
11
|
+
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
When /^he should see all available servers in the list$/i do
|
2
|
+
# FIXME this is already being checked in "he goes to the servers index page"
|
3
|
+
# any better ideas?
|
4
|
+
check_template("servers index")
|
5
|
+
end
|
6
|
+
|
7
|
+
When /^he should see all the information available for this server$/i do
|
8
|
+
# FIXME this is already being checked in "he goes to the show server page"
|
9
|
+
# any better ideas?
|
10
|
+
check_template("show server")
|
11
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
class FeaturesConfig
|
2
|
+
cattr_accessor :root # root of the config file
|
3
|
+
cattr_accessor :server # 'pointer' to the server selected
|
4
|
+
|
5
|
+
def self.load
|
6
|
+
self.server = nil
|
7
|
+
load_file
|
8
|
+
select_server
|
9
|
+
end
|
10
|
+
|
11
|
+
protected
|
12
|
+
|
13
|
+
def self.load_file
|
14
|
+
file = File.join(File.dirname(__FILE__), "..", "config.yml")
|
15
|
+
unless File.exists?(file)
|
16
|
+
throw Exception.new("Could not load #{file}. Please create it to be able to run the integration tests.")
|
17
|
+
end
|
18
|
+
self.root = YAML.load_file(file)
|
19
|
+
end
|
20
|
+
|
21
|
+
def self.select_server
|
22
|
+
if ENV['SERVER']
|
23
|
+
unless self.root['servers'].has_key?(ENV['SERVER'])
|
24
|
+
throw Exception.new("Server #{ENV['SERVER']} does not exists in your configuration file.")
|
25
|
+
end
|
26
|
+
server = self.root['servers'][ENV['SERVER']]
|
27
|
+
else
|
28
|
+
server = self.root['servers'].first[1]
|
29
|
+
end
|
30
|
+
server['version'] = '0.7' unless server.has_key?('version')
|
31
|
+
server['name'] = URI.parse(server['url']).host
|
32
|
+
self.server = server
|
33
|
+
end
|
34
|
+
end
|
@@ -1,18 +1,38 @@
|
|
1
1
|
module ContentHelpers
|
2
2
|
|
3
|
-
|
4
|
-
|
3
|
+
# Passing the xpath in the methods below is useful to check for
|
4
|
+
# content in any item of a list, for example
|
5
|
+
# page_has_content("Hi", './/li[@id="my-element"]'
|
6
|
+
|
7
|
+
def page_has_content(text, xpath=nil)
|
8
|
+
if xpath.nil?
|
5
9
|
page.should have_content(text)
|
6
10
|
else
|
7
|
-
|
11
|
+
page.should_not have_xpath(xpath, :text => text)
|
8
12
|
end
|
9
13
|
end
|
10
14
|
|
11
|
-
def
|
12
|
-
if
|
13
|
-
page.
|
15
|
+
def page_doesnt_have_content(text, xpath=nil)
|
16
|
+
if xpath.nil?
|
17
|
+
page.should_not have_content(text)
|
18
|
+
else
|
19
|
+
page.should_not have_xpath(xpath, :text => text)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
def has_content(text, xpath=nil)
|
24
|
+
if xpath.nil?
|
25
|
+
should have_content(text)
|
26
|
+
else
|
27
|
+
should have_xpath(xpath, :text => text)
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
def doesnt_have_content(text, xpath=nil)
|
32
|
+
if xpath.nil?
|
33
|
+
should_not have_content(text)
|
14
34
|
else
|
15
|
-
|
35
|
+
should_not have_xpath(xpath, :text => text)
|
16
36
|
end
|
17
37
|
end
|
18
38
|
|
@@ -0,0 +1,21 @@
|
|
1
|
+
require 'capybara-webkit'
|
2
|
+
require 'capybara/mechanize/cucumber'
|
3
|
+
require 'bigbluebutton_bot'
|
4
|
+
|
5
|
+
# Load the environment in the gem folders, not in the rails_app
|
6
|
+
# Load the factories in the gem spec/factories folder
|
7
|
+
require 'factory_girl'
|
8
|
+
require 'forgery'
|
9
|
+
Dir["#{ File.dirname(__FILE__)}/../../../factories/*.rb"].each { |f| require f }
|
10
|
+
|
11
|
+
# Found at: http://www.emmanueloga.com/2011/07/26/taming-a-capybara.html
|
12
|
+
# Big Fat Hack (TM) so the ActiveRecord connections are shared across threads.
|
13
|
+
# This is a variation of a hack you can find all over the web to make
|
14
|
+
# capybara usable without having to switch to non transactional
|
15
|
+
# fixtures.
|
16
|
+
# http://groups.google.com/group/ruby-capybara/browse_thread/thread/248e89ae2acbf603/e5da9e9bfac733e0
|
17
|
+
# https://groups.google.com/forum/#!msg/ruby-capybara/JI6JrirL9gM/R6YiXj4gi_UJ
|
18
|
+
Thread.main[:activerecord_connection] = ActiveRecord::Base.retrieve_connection
|
19
|
+
def (ActiveRecord::Base).connection
|
20
|
+
Thread.main[:activerecord_connection]
|
21
|
+
end
|