blob: d00e606653f186a8322b6e453e90700314c0efb1 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
|
require_relative 'rack_stack_test'
#
# BrowserIntegrationTest
#
# Use this class for capybara based integration tests for the ui.
#
class BrowserIntegrationTest < RackStackTest
# let's use dom_id inorder to identify sections
include ActionView::RecordIdentifier
CONFIG_RU = (Rails.root + 'config.ru').to_s
OUTER_APP = Rack::Builder.parse_file(CONFIG_RU).first
Capybara.javascript_driver = :poltergeist
Capybara.default_max_wait_time = 5
# Make the Capybara DSL available
include Capybara::DSL
setup do
Capybara.current_driver = Capybara.javascript_driver
page.driver.add_headers 'ACCEPT-LANGUAGE' => 'en-EN'
@testcode = InviteCode.new
@testcode.save!
end
teardown do
Capybara.reset_sessions! # Forget the (simulated) browser state
Capybara.use_default_driver # Revert Capybara.current_driver to Capybara.default_driver
end
def submit_signup(username = nil, password = nil)
username ||= "test_#{SecureRandom.urlsafe_base64}".downcase
password ||= SecureRandom.base64
visit '/signup'
fill_in 'Username', with: username
fill_in 'Password', with: password, match: :prefer_exact
if APP_CONFIG[:invite_required]
fill_in 'Invite code', with: @testcode.invite_code
end
fill_in 'Password confirmation', with: password
click_on 'Sign Up'
return username, password
end
# currently this only works for tests with poltergeist.
# ApiIntegrationTest has a working implementation for RackTest
def login(user = nil)
InviteCodeValidator.any_instance.stubs(:validate)
@user ||= user ||= FactoryGirl.create(:user)
token = Token.create user_id: user.id
page.driver.add_header "Authorization", %Q(Token token="#{token}")
visit '/'
end
teardown do
if @user && @user.reload
@user.destroy_identities
@user.destroy
end
end
teardown do
unless self.passed?
self.save_state
end
end
def save_state
File.open(logfile_path, 'w') do |test_log|
test_log.puts self.class.name
test_log.puts "========================="
test_log.puts name
test_log.puts Time.now
test_log.puts current_path
test_log.puts page.status_code
test_log.puts page.response_headers
test_log.puts "page.html"
test_log.puts "------------------------"
test_log.puts page.html
test_log.puts "server log"
test_log.puts "------------------------"
test_log.puts `tail log/test.log -n 200`
end
page.save_screenshot screenshot_path
# some drivers do not support screenshots
rescue Capybara::NotSupportedByDriverError
end
end
|