aboutsummaryrefslogtreecommitdiffstats
path: root/actionpack/lib/system_testing
diff options
context:
space:
mode:
authoreileencodes <eileencodes@gmail.com>2016-08-05 10:17:22 -0400
committereileencodes <eileencodes@gmail.com>2017-02-20 15:07:31 -0500
commit0862cf1bbffe0a3c82e311804244a8cb715332a6 (patch)
tree5466f4a87898649384c9e398ed5ad29c41064402 /actionpack/lib/system_testing
parent97d8b7abfe75b6a7617966ad0b3d37ae9fc7adb8 (diff)
downloadrails-0862cf1bbffe0a3c82e311804244a8cb715332a6.tar.gz
rails-0862cf1bbffe0a3c82e311804244a8cb715332a6.tar.bz2
rails-0862cf1bbffe0a3c82e311804244a8cb715332a6.zip
Add ability to run system tests via Capybara
Capybara defaults to Rack Test for it's driver and works out of the box but this adds the headers and allows for future configurable adapters for system testing.
Diffstat (limited to 'actionpack/lib/system_testing')
-rw-r--r--actionpack/lib/system_testing/base.rb9
-rw-r--r--actionpack/lib/system_testing/driver_adapter.rb18
-rw-r--r--actionpack/lib/system_testing/driver_adapters.rb13
-rw-r--r--actionpack/lib/system_testing/driver_adapters/capybara_rack_test_driver.rb24
-rw-r--r--actionpack/lib/system_testing/test_helper.rb12
5 files changed, 76 insertions, 0 deletions
diff --git a/actionpack/lib/system_testing/base.rb b/actionpack/lib/system_testing/base.rb
new file mode 100644
index 0000000000..ae4236f97d
--- /dev/null
+++ b/actionpack/lib/system_testing/base.rb
@@ -0,0 +1,9 @@
+require 'system_testing/test_helper'
+require 'system_testing/driver_adapter'
+
+module SystemTesting
+ module Base
+ include TestHelper
+ include DriverAdapter
+ end
+end
diff --git a/actionpack/lib/system_testing/driver_adapter.rb b/actionpack/lib/system_testing/driver_adapter.rb
new file mode 100644
index 0000000000..70c4396323
--- /dev/null
+++ b/actionpack/lib/system_testing/driver_adapter.rb
@@ -0,0 +1,18 @@
+require 'system_testing/driver_adapters'
+
+module SystemTesting
+ module DriverAdapter
+ extend ActiveSupport::Concern
+
+ included do
+ self.driver_adapter = :capybara_rack_test_driver
+ end
+
+ module ClassMethods
+ def driver_adapter=(driver_name_or_class)
+ driver = DriverAdapters.lookup(driver_name_or_class).new
+ driver.call
+ end
+ end
+ end
+end
diff --git a/actionpack/lib/system_testing/driver_adapters.rb b/actionpack/lib/system_testing/driver_adapters.rb
new file mode 100644
index 0000000000..38e2bdddcc
--- /dev/null
+++ b/actionpack/lib/system_testing/driver_adapters.rb
@@ -0,0 +1,13 @@
+module SystemTesting
+ module DriverAdapters
+ extend ActiveSupport::Autoload
+
+ autoload :CapybaraRackTestDriver
+
+ class << self
+ def lookup(name)
+ const_get(name.to_s.camelize)
+ end
+ end
+ end
+end
diff --git a/actionpack/lib/system_testing/driver_adapters/capybara_rack_test_driver.rb b/actionpack/lib/system_testing/driver_adapters/capybara_rack_test_driver.rb
new file mode 100644
index 0000000000..2890686e29
--- /dev/null
+++ b/actionpack/lib/system_testing/driver_adapters/capybara_rack_test_driver.rb
@@ -0,0 +1,24 @@
+module SystemTesting
+ module DriverAdapters
+ class CapybaraRackTestDriver
+ attr_reader :useragent
+
+ def initialize(useragent: 'Capybara')
+ @useragent = useragent
+ end
+
+ def call
+ registration
+ end
+
+ private
+ def registration
+ Capybara.register_driver :rack_test do |app|
+ Capybara::RackTest::Driver.new(app, headers: {
+ 'HTTP_USER_AGENT' => @useragent
+ })
+ end
+ end
+ end
+ end
+end
diff --git a/actionpack/lib/system_testing/test_helper.rb b/actionpack/lib/system_testing/test_helper.rb
new file mode 100644
index 0000000000..68b187ed7a
--- /dev/null
+++ b/actionpack/lib/system_testing/test_helper.rb
@@ -0,0 +1,12 @@
+require 'capybara/rails'
+
+module SystemTesting
+ module TestHelper
+ include Capybara::DSL
+
+ def after_teardown
+ Capybara.reset_sessions!
+ super
+ end
+ end
+end