effective_test_bot 0.5.9 → 0.5.10

Sign up to get free protection for your applications and to get access to all the features.
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