effective_test_bot 0.5.9 → 0.5.10

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 30419a4b996dc2b0178006e804e1a3ecec0857a2
4
- data.tar.gz: e17ad442c55d3986c0eddbfb626d3f7972ab6398
3
+ metadata.gz: d50c75e5319b53cbe8c1e2961a84e9869d33618f
4
+ data.tar.gz: 54f357016f40060d93dbda71279950c48949f1a4
5
5
  SHA512:
6
- metadata.gz: c5588d9ffb6a02b72ea17b719d8af563fd235f694120445e559b5b651a7912686ef3d7d28d8cd108140054e931c1389e8a783a2c55b5b4aaef7ffb7f19aefdde
7
- data.tar.gz: 40a99d2ff37fa7f84f2d01434968330d3a8ff915b76bb4402a229f6dfac44762aaa396b9a1a7d4fe50ac6336f0f79ab5442584d93e2ad1cae6cf4eb895f133b9
6
+ metadata.gz: 5dbbb1b750b858eeec2e2a44e28ba0b64865200e7d2712d65ba97fc656dc634f56c46166034580755b39bf7c556e7eb1ddc07c3367abd95046549f126d71c249
7
+ data.tar.gz: 41ae170c048e453be9192bf90a307ea5b55e972341d968800775a5db3bcbd604449efe14504ea44678c5e05096c41d3b31869f3d503802d1dac7f53c2aeb1ab6
@@ -14,6 +14,7 @@ module EffectiveTestBot
14
14
  mattr_accessor :animated_gif_delay
15
15
  mattr_accessor :animated_gif_background_color
16
16
  mattr_accessor :backtrace_lines
17
+ mattr_accessor :silence_skipped_routes
17
18
 
18
19
  mattr_accessor :passed_tests # This isn't a config variable.
19
20
 
@@ -56,8 +56,13 @@ module EffectiveTestBot
56
56
  if Rails.env.test?
57
57
  ActionController::Base.send :include, ::EffectiveTestBotControllerHelper
58
58
 
59
- ActionController::Base.send :before_filter, :expires_now # Prevent 304 Not Modified caching
60
- ActionController::Base.send :after_filter, :assign_test_bot_http_headers
59
+ if ActionController::Base.respond_to?(:before_action)
60
+ ActionController::Base.send :before_action, :expires_now # Prevent 304 Not Modified caching
61
+ ActionController::Base.send :after_action, :assign_test_bot_http_headers
62
+ else
63
+ ActionController::Base.send :before_filter, :expires_now # Prevent 304 Not Modified caching
64
+ ActionController::Base.send :after_filter, :assign_test_bot_http_headers
65
+ end
61
66
 
62
67
  ApplicationController.instance_exec do
63
68
  rescue_from ActionController::UnpermittedParameters do |exception|
@@ -1,3 +1,3 @@
1
1
  module EffectiveTestBot
2
- VERSION = '0.5.9'.freeze
2
+ VERSION = '0.5.10'.freeze
3
3
  end
@@ -17,6 +17,9 @@ if Rails.env.test?
17
17
  # 'posts', 'events#index'
18
18
  # ]
19
19
 
20
+ # Silence skipped routes
21
+ config.silence_skipped_routes = false
22
+
20
23
  # Exits immediately if there is a test failure
21
24
  config.fail_fast = false
22
25
 
@@ -1,5 +1,5 @@
1
1
  ENV['RAILS_ENV'] = 'test'
2
- require File.expand_path("../../config/environment", __FILE__)
2
+ require File.expand_path('../../config/environment', __FILE__)
3
3
  require 'rails/test_help'
4
4
  require 'minitest/rails'
5
5
  require 'minitest/rails/capybara'
@@ -13,6 +13,8 @@ require 'capybara/webkit'
13
13
  require 'capybara-screenshot/minitest'
14
14
  require 'capybara/slow_finder_errors'
15
15
 
16
+ require 'database_cleaner'
17
+
16
18
  class ActiveSupport::TestCase
17
19
  # Setup all fixtures in test/fixtures/*.yml for all tests in alphabetical order.
18
20
  fixtures :all
@@ -26,8 +28,15 @@ class ActionDispatch::IntegrationTest
26
28
  include Capybara::Screenshot::MiniTestPlugin
27
29
  include Warden::Test::Helpers if defined?(Devise)
28
30
 
29
- def after_teardown # Some apps seem to need this to correctly reset the test_06:_capybara_can_sign_in
30
- super(); Capybara.reset_sessions!
31
+ def after_setup
32
+ super()
33
+ DatabaseCleaner.start
34
+ end
35
+
36
+ def after_teardown
37
+ super()
38
+ DatabaseCleaner.clean
39
+ Capybara.reset_sessions! # Some apps seem to need this to correctly reset the test_06:_capybara_can_sign_in
31
40
  end
32
41
  end
33
42
 
@@ -44,16 +53,19 @@ Minitest::Reporters.use! Minitest::Reporters::SpecReporter.new
44
53
  Rails.backtrace_cleaner.remove_silencers!
45
54
  Rails.backtrace_cleaner.add_silencer { |line| line =~ /minitest/ }
46
55
 
56
+ ###############################################
47
57
  ### Effective Test Bot specific stuff below ###
58
+ ###############################################
48
59
 
49
- # So the very first thing I do is set up a consistent database
50
- silence_stream(STDOUT) do
51
- Rake::Task['db:schema:load'].invoke
52
- end
60
+ # So the very first thing we do is consistently reset the database.
61
+ # This can be done with Snippet 1 or Snippet 2.
62
+ # Snippet 1 is faster, and will usually work. Snippet 2 should always work.
53
63
 
64
+ # Snippet 1:
65
+ silence_stream(STDOUT) { Rake::Task['db:schema:load'].invoke }
54
66
  ActiveRecord::Migration.maintain_test_schema!
55
67
 
56
- # or the following 3:
68
+ # Snippet 2:
57
69
 
58
70
  # silence_stream(STDOUT) do
59
71
  # Rake::Task['db:drop'].invoke
@@ -61,6 +73,7 @@ ActiveRecord::Migration.maintain_test_schema!
61
73
  # Rake::Task['db:migrate'].invoke
62
74
  # end
63
75
 
76
+ # Now we populate our test data:
64
77
  Rake::Task['db:fixtures:load'].invoke # There's just no way to get the seeds first, as this has to delete everything
65
78
  Rake::Task['db:seed'].invoke
66
79
  Rake::Task['test:load_fixture_seeds'].invoke # This is included by effective_test_bot. It just runs the app's test/fixtures/seeds.rb if it exists
@@ -69,14 +82,23 @@ if EffectiveTestBot.fail_fast?
69
82
  require 'minitest/fail_fast'
70
83
  end
71
84
 
72
- # Make all database transactions use the same thread, otherwise signing up in capybara won't get rolled back
73
- # This must be run after the Rake::Tasks above
74
- class ActiveRecord::Base
75
- mattr_accessor :shared_connection
76
- @@shared_connection = nil
85
+ # "Connection not rolling back" snippets
86
+ # These are some snippets that the internet has collected to fix test threading issues.
87
+ # They are unneeded with effective_test_bot. On my machine. But I leave them here as a reference.
88
+ # Try one or both if you are having issues passing rake test:bot:environment
77
89
 
78
- def self.connection
79
- @@shared_connection || retrieve_connection
80
- end
81
- end
82
- ActiveRecord::Base.shared_connection = ActiveRecord::Base.connection
90
+ # class ActiveRecord::Base
91
+ # mattr_accessor :shared_connection
92
+ # @@shared_connection = nil
93
+
94
+ # def self.connection
95
+ # @@shared_connection || retrieve_connection
96
+ # end
97
+ # end
98
+ # ActiveRecord::Base.shared_connection = ActiveRecord::Base.connection
99
+
100
+ # ActiveRecord::ConnectionAdapters::ConnectionPool.class_eval do
101
+ # def current_connection_id
102
+ # Thread.main.object_id
103
+ # end
104
+ # end
@@ -21,14 +21,14 @@ module TestBot
21
21
  action = route.defaults[:action]
22
22
 
23
23
  # Devise Test
24
- if (controller || '').include?('devise')
24
+ if is_devise_controller?(route)
25
25
  next if seen_actions['devise'].present?
26
26
  seen_actions['devise'] = true # So we don't repeat it
27
27
 
28
28
  devise_test()
29
29
 
30
30
  # Redirect Test
31
- elsif route.app.kind_of?(ActionDispatch::Routing::PathRedirect) && route.path.required_names.blank?
31
+ elsif is_redirect?(route)
32
32
  path = route.path.spec.to_s
33
33
  route.path.optional_names.each { |name| path.sub!("(.:#{name})", '') } # Removes (.:format) from path
34
34
  redirect_test(from: path, to: route.app.path([], nil))
@@ -54,19 +54,23 @@ module TestBot
54
54
 
55
55
  # Wizard Test
56
56
  elsif is_wicked_controller?(route)
57
- first_step_path = "/#{controller}/#{controller_instance(route).wizard_steps.first}"
58
- wizard_test(from: first_step_path)
57
+ next if seen_actions[controller].present?
58
+ seen_actions[controller] = true # So we don't repeat it
59
+
60
+ wizard_test(from: "#{route.name}_path".to_sym, step: controller_instance(route).wizard_steps.first)
59
61
 
60
62
  # Member Test
61
- elsif route.verb.to_s.include?('GET') && route.path.required_names == ['id']
63
+ elsif is_member?(route)
62
64
  member_test(controller: controller, action: action)
63
65
 
64
66
  # Page Test
65
- elsif route.verb.to_s.include?('GET') && route.name.present? && Array(route.path.required_names).blank? # This could eventually be removed to supported nested routes
67
+ elsif is_page?(route)
66
68
  page_test(path: "#{route.name}_path".to_sym, route: route, label: "#{route.name}_path")
67
69
 
68
70
  else
69
- #puts "skipping #{route.name}_path | #{route.path.spec} | #{route.verb} | #{route.defaults[:controller]} | #{route.defaults[:action]}"
71
+ unless EffectiveTestBot.silence_skipped_routes
72
+ puts "skipping #{route.name}_path | #{route.path.spec} | #{route.verb} | #{route.defaults[:controller]} | #{route.defaults[:action]}"
73
+ end
70
74
 
71
75
  end # / Routes
72
76
  end
@@ -74,6 +78,17 @@ module TestBot
74
78
 
75
79
  protected
76
80
 
81
+ def is_devise_controller?(route)
82
+ return true if (route.defaults[:controller] || '').include?('devise')
83
+
84
+ controller = controller_instance(route)
85
+ controller.respond_to?(:devise_controller?) && controller.devise_controller?
86
+ end
87
+
88
+ def is_redirect?(route)
89
+ route.app.kind_of?(ActionDispatch::Routing::PathRedirect) && route.path.required_names.blank?
90
+ end
91
+
77
92
  def is_crud_controller?(route)
78
93
  return false unless CRUD_ACTIONS.include?(route.defaults[:action])
79
94
 
@@ -85,6 +100,9 @@ module TestBot
85
100
  def is_wicked_controller?(route)
86
101
  return false unless defined?(Wicked::Wizard)
87
102
 
103
+ # This might be a wickeds controller, but it's a nested one, so we can't handle it anyway
104
+ return false unless route.path.required_names == ['id']
105
+
88
106
  controller = controller_instance(route)
89
107
  return false unless controller.kind_of?(Wicked::Wizard)
90
108
 
@@ -95,6 +113,14 @@ module TestBot
95
113
  controller.wizard_steps.present?
96
114
  end
97
115
 
116
+ def is_member?(route)
117
+ route.verb.to_s.include?('GET') && route.path.required_names == ['id']
118
+ end
119
+
120
+ def is_page?(route)
121
+ route.verb.to_s.include?('GET') && route.name.present? && Array(route.path.required_names).blank? # This could eventually be removed to supported nested routes
122
+ end
123
+
98
124
  private
99
125
 
100
126
  def controller_instance(route)
@@ -93,18 +93,22 @@ module BaseTest
93
93
  end
94
94
 
95
95
  def resources_path # index, create
96
- polymorphic_path([*controller_namespace, resource_class])
96
+ path = polymorphic_path([*controller_namespace, resource_class]) rescue nil
97
+ path || polymorphic_path([*controller_namespace.try(:singularize), resource_class])
97
98
  end
98
99
 
99
100
  def resource_path(resource) # show, update, destroy
100
- polymorphic_path([*controller_namespace, resource])
101
+ path = polymorphic_path([*controller_namespace, resource]) rescue nil
102
+ path || polymorphic_path([*controller_namespace.try(:singularize), resource])
101
103
  end
102
104
 
103
105
  def new_resource_path # new
104
- new_polymorphic_path([*controller_namespace, resource_class])
106
+ path = new_polymorphic_path([*controller_namespace, resource_class]) rescue nil
107
+ path || new_polymorphic_path([*controller_namespace.try(:singularize), resource_class])
105
108
  end
106
109
 
107
110
  def edit_resource_path(resource) # edit
108
- edit_polymorphic_path([*controller_namespace, resource])
111
+ path = edit_polymorphic_path([*controller_namespace, resource]) rescue nil
112
+ path || edit_polymorphic_path([*controller_namespace.try(:singularize), resource])
109
113
  end
110
114
  end
@@ -5,7 +5,13 @@ module WizardTest
5
5
  protected
6
6
 
7
7
  def test_bot_wizard_test(&block)
8
- sign_in(user) and visit(from)
8
+ sign_in(user)
9
+
10
+ if from.kind_of?(Symbol) && defined?(step)
11
+ visit(public_send(from, id: step))
12
+ else
13
+ visit(from)
14
+ end
9
15
 
10
16
  0.upto(50) do |index| # Can only test wizards 51 steps long
11
17
  assert_page_normal
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: effective_test_bot
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.9
4
+ version: 0.5.10
5
5
  platform: ruby
6
6
  authors:
7
7
  - Code and Effect
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-08-18 00:00:00.000000000 Z
11
+ date: 2016-09-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -164,6 +164,20 @@ dependencies:
164
164
  - - ">="
165
165
  - !ruby/object:Gem::Version
166
166
  version: '0'
167
+ - !ruby/object:Gem::Dependency
168
+ name: database_cleaner
169
+ requirement: !ruby/object:Gem::Requirement
170
+ requirements:
171
+ - - ">="
172
+ - !ruby/object:Gem::Version
173
+ version: '0'
174
+ type: :runtime
175
+ prerelease: false
176
+ version_requirements: !ruby/object:Gem::Requirement
177
+ requirements:
178
+ - - ">="
179
+ - !ruby/object:Gem::Version
180
+ version: '0'
167
181
  - !ruby/object:Gem::Dependency
168
182
  name: shoulda
169
183
  requirement: !ruby/object:Gem::Requirement
@@ -285,7 +299,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
285
299
  version: '0'
286
300
  requirements: []
287
301
  rubyforge_project:
288
- rubygems_version: 2.4.5.1
302
+ rubygems_version: 2.5.1
289
303
  signing_key:
290
304
  specification_version: 4
291
305
  summary: A shared library of rails model & capybara-based feature tests that should