shoulda-matchers 2.8.0 → 3.0.0.rc1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (171) hide show
  1. checksums.yaml +4 -4
  2. data/.hound_config/ruby.yml +7 -0
  3. data/.travis.yml +11 -54
  4. data/Appraisals +45 -100
  5. data/CONTRIBUTING.md +51 -7
  6. data/Gemfile +7 -19
  7. data/Gemfile.lock +60 -134
  8. data/Guardfile +5 -0
  9. data/NEWS.md +203 -0
  10. data/README.md +95 -50
  11. data/Rakefile +1 -0
  12. data/doc_config/yard/templates/default/layout/html/setup.rb +1 -1
  13. data/gemfiles/4.0.0.gemfile +10 -7
  14. data/gemfiles/4.0.0.gemfile.lock +103 -79
  15. data/gemfiles/4.0.1.gemfile +10 -7
  16. data/gemfiles/4.0.1.gemfile.lock +109 -83
  17. data/gemfiles/4.1.gemfile +10 -7
  18. data/gemfiles/4.1.gemfile.lock +109 -85
  19. data/gemfiles/4.2.gemfile +10 -9
  20. data/gemfiles/4.2.gemfile.lock +86 -78
  21. data/lib/shoulda/matchers.rb +13 -18
  22. data/lib/shoulda/matchers/action_controller.rb +4 -1
  23. data/lib/shoulda/matchers/action_controller/flash_store.rb +95 -0
  24. data/lib/shoulda/matchers/action_controller/{strong_parameters_matcher.rb → permit_matcher.rb} +147 -30
  25. data/lib/shoulda/matchers/action_controller/redirect_to_matcher.rb +1 -1
  26. data/lib/shoulda/matchers/action_controller/render_template_matcher.rb +1 -1
  27. data/lib/shoulda/matchers/action_controller/render_with_layout_matcher.rb +1 -1
  28. data/lib/shoulda/matchers/action_controller/rescue_from_matcher.rb +1 -1
  29. data/lib/shoulda/matchers/action_controller/route_matcher.rb +5 -1
  30. data/lib/shoulda/matchers/action_controller/route_params.rb +15 -6
  31. data/lib/shoulda/matchers/action_controller/session_store.rb +34 -0
  32. data/lib/shoulda/matchers/action_controller/set_flash_matcher.rb +30 -136
  33. data/lib/shoulda/matchers/action_controller/set_session_matcher.rb +28 -109
  34. data/lib/shoulda/matchers/action_controller/set_session_or_flash_matcher.rb +103 -0
  35. data/lib/shoulda/matchers/active_model/allow_mass_assignment_of_matcher.rb +1 -12
  36. data/lib/shoulda/matchers/active_model/allow_value_matcher.rb +79 -10
  37. data/lib/shoulda/matchers/active_model/numericality_matchers/numeric_type_matcher.rb +10 -0
  38. data/lib/shoulda/matchers/active_model/validate_absence_of_matcher.rb +21 -0
  39. data/lib/shoulda/matchers/active_model/validate_acceptance_of_matcher.rb +24 -0
  40. data/lib/shoulda/matchers/active_model/validate_confirmation_of_matcher.rb +22 -5
  41. data/lib/shoulda/matchers/active_model/validate_exclusion_of_matcher.rb +29 -10
  42. data/lib/shoulda/matchers/active_model/validate_inclusion_of_matcher.rb +27 -10
  43. data/lib/shoulda/matchers/active_model/validate_length_of_matcher.rb +27 -12
  44. data/lib/shoulda/matchers/active_model/validate_numericality_of_matcher.rb +56 -20
  45. data/lib/shoulda/matchers/active_model/validate_presence_of_matcher.rb +3 -11
  46. data/lib/shoulda/matchers/active_model/validation_message_finder.rb +65 -0
  47. data/lib/shoulda/matchers/active_record/association_matcher.rb +40 -6
  48. data/lib/shoulda/matchers/active_record/association_matchers/join_table_matcher.rb +21 -7
  49. data/lib/shoulda/matchers/active_record/association_matchers/model_reflection.rb +11 -40
  50. data/lib/shoulda/matchers/active_record/association_matchers/model_reflector.rb +1 -1
  51. data/lib/shoulda/matchers/active_record/define_enum_for_matcher.rb +2 -6
  52. data/lib/shoulda/matchers/active_record/validate_uniqueness_of_matcher.rb +137 -22
  53. data/lib/shoulda/matchers/configuration.rb +20 -0
  54. data/lib/shoulda/matchers/doublespeak.rb +11 -1
  55. data/lib/shoulda/matchers/doublespeak/double.rb +29 -11
  56. data/lib/shoulda/matchers/doublespeak/double_collection.rb +4 -3
  57. data/lib/shoulda/matchers/doublespeak/method_call.rb +35 -0
  58. data/lib/shoulda/matchers/doublespeak/object_double.rb +7 -2
  59. data/lib/shoulda/matchers/doublespeak/proxy_implementation.rb +4 -3
  60. data/lib/shoulda/matchers/doublespeak/stub_implementation.rb +3 -3
  61. data/lib/shoulda/matchers/doublespeak/world.rb +21 -1
  62. data/lib/shoulda/matchers/integrations.rb +43 -0
  63. data/lib/shoulda/matchers/integrations/configuration.rb +68 -0
  64. data/lib/shoulda/matchers/integrations/configuration_error.rb +9 -0
  65. data/lib/shoulda/matchers/integrations/inclusion.rb +20 -0
  66. data/lib/shoulda/matchers/integrations/libraries.rb +15 -0
  67. data/lib/shoulda/matchers/integrations/libraries/action_controller.rb +31 -0
  68. data/lib/shoulda/matchers/integrations/libraries/active_model.rb +26 -0
  69. data/lib/shoulda/matchers/integrations/libraries/active_record.rb +26 -0
  70. data/lib/shoulda/matchers/integrations/libraries/missing_library.rb +19 -0
  71. data/lib/shoulda/matchers/integrations/libraries/rails.rb +30 -0
  72. data/lib/shoulda/matchers/integrations/rails.rb +12 -0
  73. data/lib/shoulda/matchers/integrations/registry.rb +28 -0
  74. data/lib/shoulda/matchers/integrations/test_frameworks.rb +16 -0
  75. data/lib/shoulda/matchers/integrations/test_frameworks/active_support_test_case.rb +37 -0
  76. data/lib/shoulda/matchers/integrations/test_frameworks/minitest_4.rb +36 -0
  77. data/lib/shoulda/matchers/integrations/test_frameworks/minitest_5.rb +37 -0
  78. data/lib/shoulda/matchers/integrations/test_frameworks/missing_test_framework.rb +40 -0
  79. data/lib/shoulda/matchers/integrations/test_frameworks/rspec.rb +29 -0
  80. data/lib/shoulda/matchers/integrations/test_frameworks/test_unit.rb +36 -0
  81. data/lib/shoulda/matchers/rails_shim.rb +0 -40
  82. data/lib/shoulda/matchers/version.rb +1 -1
  83. data/script/SUPPORTED_VERSIONS +1 -1
  84. data/script/update_gems_in_all_appraisals +14 -0
  85. data/shoulda-matchers.gemspec +2 -2
  86. data/spec/acceptance/active_model_integration_spec.rb +4 -1
  87. data/spec/acceptance/independent_matchers_spec.rb +6 -6
  88. data/spec/acceptance/multiple_libraries_integration_spec.rb +52 -0
  89. data/spec/acceptance/rails_integration_spec.rb +15 -5
  90. data/spec/acceptance_spec_helper.rb +8 -0
  91. data/spec/doublespeak_spec_helper.rb +14 -0
  92. data/spec/support/acceptance/adds_shoulda_matchers_to_project.rb +110 -0
  93. data/spec/support/acceptance/helpers.rb +2 -0
  94. data/spec/support/acceptance/helpers/base_helpers.rb +6 -1
  95. data/spec/support/acceptance/helpers/command_helpers.rb +6 -2
  96. data/spec/support/acceptance/helpers/minitest_helpers.rb +0 -8
  97. data/spec/support/acceptance/helpers/n_unit_helpers.rb +25 -0
  98. data/spec/support/acceptance/helpers/rspec_helpers.rb +2 -0
  99. data/spec/support/acceptance/helpers/step_helpers.rb +13 -19
  100. data/spec/support/acceptance/matchers/have_output.rb +1 -1
  101. data/spec/support/tests/bundle.rb +1 -1
  102. data/spec/support/tests/command_runner.rb +25 -13
  103. data/spec/support/tests/current_bundle.rb +47 -0
  104. data/spec/support/tests/database.rb +28 -0
  105. data/spec/support/tests/database_adapters/postgresql.rb +25 -0
  106. data/spec/support/tests/database_adapters/sqlite3.rb +26 -0
  107. data/spec/support/tests/database_configuration.rb +33 -0
  108. data/spec/support/tests/database_configuration_registry.rb +28 -0
  109. data/spec/support/tests/filesystem.rb +25 -2
  110. data/spec/support/unit/helpers/active_record_versions.rb +12 -0
  111. data/spec/support/unit/helpers/class_builder.rb +6 -2
  112. data/spec/support/unit/helpers/column_type_helpers.rb +26 -0
  113. data/spec/support/unit/helpers/controller_builder.rb +0 -28
  114. data/spec/support/unit/helpers/database_helpers.rb +18 -0
  115. data/spec/support/unit/helpers/model_builder.rb +38 -6
  116. data/spec/support/unit/helpers/rails_versions.rb +2 -2
  117. data/spec/support/unit/matchers/fail_with_message_including_matcher.rb +9 -8
  118. data/spec/support/unit/matchers/fail_with_message_matcher.rb +1 -1
  119. data/spec/support/unit/rails_application.rb +29 -13
  120. data/spec/support/unit/record_validating_confirmation_builder.rb +1 -2
  121. data/spec/support/unit/shared_examples/set_session_or_flash.rb +355 -0
  122. data/spec/unit/shoulda/matchers/action_controller/permit_matcher_spec.rb +433 -0
  123. data/spec/unit/shoulda/matchers/action_controller/render_with_layout_matcher_spec.rb +1 -5
  124. data/spec/unit/shoulda/matchers/action_controller/route_matcher_spec.rb +37 -0
  125. data/spec/unit/shoulda/matchers/action_controller/set_flash_matcher_spec.rb +23 -147
  126. data/spec/unit/shoulda/matchers/action_controller/set_session_matcher_spec.rb +8 -285
  127. data/spec/unit/shoulda/matchers/action_controller/set_session_or_flash_matcher_spec.rb +562 -0
  128. data/spec/unit/shoulda/matchers/active_model/allow_value_matcher_spec.rb +81 -14
  129. data/spec/unit/shoulda/matchers/active_model/disallow_value_matcher_spec.rb +16 -8
  130. data/spec/unit/shoulda/matchers/active_model/numericality_matchers/comparison_matcher_spec.rb +101 -9
  131. data/spec/unit/shoulda/matchers/active_model/numericality_matchers/even_number_matcher_spec.rb +39 -1
  132. data/spec/unit/shoulda/matchers/active_model/numericality_matchers/odd_number_matcher_spec.rb +39 -1
  133. data/spec/unit/shoulda/matchers/active_model/numericality_matchers/only_integer_matcher_spec.rb +39 -0
  134. data/spec/unit/shoulda/matchers/active_model/validate_exclusion_of_matcher_spec.rb +0 -17
  135. data/spec/unit/shoulda/matchers/active_model/validate_inclusion_of_matcher_spec.rb +0 -17
  136. data/spec/unit/shoulda/matchers/active_model/validate_length_of_matcher_spec.rb +0 -17
  137. data/spec/unit/shoulda/matchers/active_model/validate_numericality_of_matcher_spec.rb +838 -271
  138. data/spec/unit/shoulda/matchers/active_model/validate_presence_of_matcher_spec.rb +0 -19
  139. data/spec/unit/shoulda/matchers/active_record/association_matcher_spec.rb +93 -0
  140. data/spec/unit/shoulda/matchers/active_record/association_matchers/model_reflection_spec.rb +3 -3
  141. data/spec/unit/shoulda/matchers/active_record/define_enum_for_matcher_spec.rb +25 -0
  142. data/spec/unit/shoulda/matchers/active_record/validate_uniqueness_of_matcher_spec.rb +905 -0
  143. data/spec/unit/shoulda/matchers/doublespeak/double_collection_spec.rb +17 -11
  144. data/spec/unit/shoulda/matchers/doublespeak/double_implementation_registry_spec.rb +1 -1
  145. data/spec/unit/shoulda/matchers/doublespeak/double_spec.rb +144 -43
  146. data/spec/unit/shoulda/matchers/doublespeak/object_double_spec.rb +1 -1
  147. data/spec/unit/shoulda/matchers/doublespeak/proxy_implementation_spec.rb +36 -11
  148. data/spec/unit/shoulda/matchers/doublespeak/stub_implementation_spec.rb +29 -16
  149. data/spec/unit/shoulda/matchers/doublespeak/world_spec.rb +8 -5
  150. data/spec/unit/shoulda/matchers/doublespeak_spec.rb +1 -1
  151. data/spec/unit_spec_helper.rb +15 -14
  152. data/spec/warnings_spy.rb +1 -1
  153. metadata +68 -29
  154. data/docs.watchr +0 -5
  155. data/gemfiles/3.0.gemfile +0 -26
  156. data/gemfiles/3.0.gemfile.lock +0 -173
  157. data/gemfiles/3.1.gemfile +0 -32
  158. data/gemfiles/3.1.gemfile.lock +0 -212
  159. data/gemfiles/3.1_1.9.2.gemfile +0 -32
  160. data/gemfiles/3.1_1.9.2.gemfile.lock +0 -212
  161. data/gemfiles/3.2.gemfile +0 -33
  162. data/gemfiles/3.2.gemfile.lock +0 -212
  163. data/gemfiles/3.2_1.9.2.gemfile +0 -31
  164. data/gemfiles/3.2_1.9.2.gemfile.lock +0 -207
  165. data/lib/shoulda/matchers/assertion_error.rb +0 -27
  166. data/lib/shoulda/matchers/doublespeak/structs.rb +0 -10
  167. data/lib/shoulda/matchers/integrations/nunit_test_case_detection.rb +0 -39
  168. data/lib/shoulda/matchers/integrations/rspec.rb +0 -19
  169. data/lib/shoulda/matchers/integrations/test_unit.rb +0 -34
  170. data/spec/unit/shoulda/matchers/action_controller/strong_parameters_matcher_spec.rb +0 -331
  171. data/spec/unit/shoulda/matchers/active_model/validate_uniqueness_of_matcher_spec.rb +0 -564
@@ -14,7 +14,7 @@ describe 'shoulda-matchers integrates with Rails' do
14
14
  end
15
15
  FILE
16
16
 
17
- run_rake_tasks!('db:migrate', 'db:test:prepare')
17
+ run_rake_tasks!(*%w(db:drop db:create db:migrate))
18
18
 
19
19
  write_file 'app/models/user.rb', <<-FILE
20
20
  class User < ActiveRecord::Base
@@ -34,10 +34,13 @@ describe 'shoulda-matchers integrates with Rails' do
34
34
  configure_routes_with_single_wildcard_route
35
35
  end
36
36
 
37
- specify 'in a project that uses Test::Unit' do
37
+ specify 'in a project that uses the default test framework' do
38
38
  updating_bundle do
39
39
  add_gems_for_n_unit
40
- add_shoulda_matchers_to_project
40
+ add_shoulda_matchers_to_project(
41
+ test_frameworks: [default_test_framework],
42
+ libraries: [:rails]
43
+ )
41
44
  end
42
45
 
43
46
  run_tests_for_n_unit
@@ -46,7 +49,10 @@ describe 'shoulda-matchers integrates with Rails' do
46
49
  specify 'in a project that uses RSpec' do
47
50
  updating_bundle do
48
51
  add_gems_for_rspec
49
- add_shoulda_matchers_to_project(test_frameworks: [:rspec])
52
+ add_shoulda_matchers_to_project(
53
+ test_frameworks: [:rspec],
54
+ libraries: [:rails]
55
+ )
50
56
  end
51
57
 
52
58
  run_tests_for_rspec
@@ -62,6 +68,7 @@ describe 'shoulda-matchers integrates with Rails' do
62
68
  add_gems_for_rspec
63
69
  add_shoulda_matchers_to_project(
64
70
  test_frameworks: [:rspec],
71
+ libraries: [:rails],
65
72
  manually: true
66
73
  )
67
74
  end
@@ -75,7 +82,10 @@ describe 'shoulda-matchers integrates with Rails' do
75
82
  updating_bundle do
76
83
  add_gems_for_n_unit
77
84
  add_gems_for_rspec
78
- add_shoulda_matchers_to_project
85
+ add_shoulda_matchers_to_project(
86
+ test_frameworks: [:rspec, nil],
87
+ libraries: [:rails]
88
+ )
79
89
  end
80
90
 
81
91
  run_tests_for_n_unit
@@ -1,4 +1,12 @@
1
+ require_relative 'support/tests/current_bundle'
2
+
3
+ Tests::CurrentBundle.instance.assert_appraisal!
4
+
5
+ #---
6
+
1
7
  require 'rspec/core'
8
+ require 'pry'
9
+ require 'pry-byebug'
2
10
 
3
11
  Dir[ File.join(File.expand_path('../support/acceptance/**/*.rb', __FILE__)) ].sort.each do |file|
4
12
  require file
@@ -0,0 +1,14 @@
1
+ require 'shoulda-matchers'
2
+
3
+ PROJECT_ROOT = File.expand_path('../..', __FILE__)
4
+ $LOAD_PATH << File.join(PROJECT_ROOT, 'lib')
5
+
6
+ RSpec.configure do |config|
7
+ config.order = :random
8
+
9
+ config.expect_with :rspec do |c|
10
+ c.syntax = :expect
11
+ end
12
+
13
+ config.mock_with :rspec
14
+ end
@@ -0,0 +1,110 @@
1
+ require_relative 'helpers/base_helpers'
2
+ require_relative 'helpers/rspec_helpers'
3
+
4
+ module AcceptanceTests
5
+ class AddsShouldaMatchersToProject
6
+ def self.call(options)
7
+ new(options).call
8
+ end
9
+
10
+ include BaseHelpers
11
+ include RspecHelpers
12
+
13
+ def initialize(options)
14
+ @options = options
15
+ end
16
+
17
+ def call
18
+ add_gem 'shoulda-matchers', gem_options
19
+ configure_test_helper_files
20
+ end
21
+
22
+ protected
23
+
24
+ attr_reader :options
25
+
26
+ private
27
+
28
+ def gem_options
29
+ gem_options = { path: fs.root_directory }
30
+
31
+ if options[:manually]
32
+ gem_options[:require] = false
33
+ end
34
+
35
+ gem_options
36
+ end
37
+
38
+ def configure_test_helper_files
39
+ each_test_helper_file do |test_helper_file, test_framework, library|
40
+ add_configuration_block_to(
41
+ test_helper_file,
42
+ test_framework,
43
+ library
44
+ )
45
+ end
46
+ end
47
+
48
+ def each_test_helper_file
49
+ options[:test_frameworks].each do |test_framework|
50
+ libraries = options.fetch(:libraries, [])
51
+ test_helper_file = test_helper_file_for(test_framework, libraries)
52
+ yield test_helper_file, test_framework, libraries
53
+ end
54
+ end
55
+
56
+ def add_configuration_block_to(test_helper_file, test_framework, libraries)
57
+ test_framework_config = test_framework_config_for(test_framework)
58
+ library_config = library_config_for(libraries)
59
+
60
+ content = <<-EOT
61
+ Shoulda::Matchers.configure do |config|
62
+ config.integrate do |with|
63
+ #{test_framework_config}
64
+ #{library_config}
65
+ end
66
+ end
67
+ EOT
68
+
69
+ if options[:manually]
70
+ content = "require 'shoulda-matchers'\n#{content}"
71
+ end
72
+
73
+ fs.append_to_file(test_helper_file, content)
74
+ end
75
+
76
+ def test_framework_config_for(test_framework)
77
+ if test_framework
78
+ "with.test_framework :#{test_framework}\n"
79
+ else
80
+ ''
81
+ end
82
+ end
83
+
84
+ def library_config_for(libraries)
85
+ libraries.map { |library| "with.library :#{library}" }.join("\n")
86
+ end
87
+
88
+ def test_helper_file_for(test_framework, libraries)
89
+ if integrates_with_rails?(test_framework, libraries) ||
90
+ integrates_with_nunit?(test_framework)
91
+ 'test/test_helper.rb'
92
+ elsif integrates_with_rspec?(test_framework)
93
+ spec_helper_file_path
94
+ end
95
+ end
96
+
97
+ def integrates_with_nunit?(test_framework)
98
+ nunit_frameworks = [:test_unit, :minitest, :minitest_4, :minitest_5]
99
+ nunit_frameworks.include?(test_framework)
100
+ end
101
+
102
+ def integrates_with_rspec?(test_framework)
103
+ test_framework == :rspec
104
+ end
105
+
106
+ def integrates_with_rails?(test_framework, libraries)
107
+ test_framework.nil? && libraries.include?(:rails)
108
+ end
109
+ end
110
+ end
@@ -2,6 +2,7 @@ require_relative 'helpers/active_model_helpers'
2
2
  require_relative 'helpers/base_helpers'
3
3
  require_relative 'helpers/command_helpers'
4
4
  require_relative 'helpers/gem_helpers'
5
+ require_relative 'helpers/n_unit_helpers'
5
6
  require_relative 'helpers/rails_version_helpers'
6
7
  require_relative 'helpers/rspec_helpers'
7
8
  require_relative 'helpers/ruby_version_helpers'
@@ -21,6 +22,7 @@ module AcceptanceTests
21
22
  include BaseHelpers
22
23
  include CommandHelpers
23
24
  include GemHelpers
25
+ include NUnitHelpers
24
26
  include RailsVersionHelpers
25
27
  include RspecHelpers
26
28
  include RubyVersionHelpers
@@ -1,5 +1,6 @@
1
- require_relative '../../tests/filesystem'
2
1
  require_relative '../../tests/bundle'
2
+ require_relative '../../tests/database'
3
+ require_relative '../../tests/filesystem'
3
4
 
4
5
  module AcceptanceTests
5
6
  module BaseHelpers
@@ -10,5 +11,9 @@ module AcceptanceTests
10
11
  def bundle
11
12
  @_bundle ||= Tests::Bundle.new
12
13
  end
14
+
15
+ def database
16
+ @_database ||= Tests::Database.instance
17
+ end
13
18
  end
14
19
  end
@@ -41,11 +41,15 @@ module AcceptanceTests
41
41
  end
42
42
 
43
43
  def run_rake_tasks(*tasks)
44
- run_command_within_bundle('rake', *tasks)
44
+ options = tasks.last.is_a?(Hash) ? tasks.pop : {}
45
+ args = ['rake', *tasks, '--trace'] + [options]
46
+ run_command_within_bundle(*args)
45
47
  end
46
48
 
47
49
  def run_rake_tasks!(*tasks)
48
- run_command_within_bundle!('rake', *tasks)
50
+ options = tasks.last.is_a?(Hash) ? tasks.pop : {}
51
+ args = ['rake', *tasks, '--trace'] + [options]
52
+ run_command_within_bundle!(*args)
49
53
  end
50
54
  end
51
55
  end
@@ -4,14 +4,6 @@ module AcceptanceTests
4
4
  module MinitestHelpers
5
5
  include GemHelpers
6
6
 
7
- def minitest_test_case_superclass
8
- if minitest_version >= 5
9
- 'Minitest::Test'
10
- else
11
- 'MiniTest::Unit::TestCase'
12
- end
13
- end
14
-
15
7
  def minitest_version
16
8
  bundle_version_of('minitest')
17
9
  end
@@ -0,0 +1,25 @@
1
+ require_relative 'rails_version_helpers'
2
+
3
+ module AcceptanceTests
4
+ module NUnitHelpers
5
+ include RailsVersionHelpers
6
+
7
+ def n_unit_test_case_superclass
8
+ case default_test_framework
9
+ when :test_unit then 'Test::Unit::TestCase'
10
+ when :minitest_4 then 'MiniTest::Unit::TestCase'
11
+ else 'Minitest::Test'
12
+ end
13
+ end
14
+
15
+ def default_test_framework
16
+ if rails_version =~ '< 4'
17
+ :test_unit
18
+ elsif rails_version =~ '~> 4.0.0'
19
+ :minitest_4
20
+ else
21
+ :minitest
22
+ end
23
+ end
24
+ end
25
+ end
@@ -1,3 +1,5 @@
1
+ require_relative 'gem_helpers'
2
+
1
3
  module AcceptanceTests
2
4
  module RspecHelpers
3
5
  include GemHelpers
@@ -2,6 +2,8 @@ require_relative 'file_helpers'
2
2
  require_relative 'gem_helpers'
3
3
  require_relative 'minitest_helpers'
4
4
 
5
+ require 'yaml'
6
+
5
7
  module AcceptanceTests
6
8
  module StepHelpers
7
9
  include FileHelpers
@@ -21,23 +23,7 @@ module AcceptanceTests
21
23
  end
22
24
 
23
25
  def add_shoulda_matchers_to_project(options = {})
24
- gem_options = { path: fs.root_directory }
25
-
26
- if options[:manually]
27
- gem_options[:require] = false
28
- end
29
-
30
- add_gem 'shoulda-matchers', gem_options
31
-
32
- if options[:manually]
33
- if options[:test_frameworks].include?(:rspec)
34
- append_to_file spec_helper_file_path, "require 'shoulda/matchers'"
35
- end
36
-
37
- if options[:test_frameworks].include?(:n_unit)
38
- append_to_file 'test/test_helper.rb', "require 'shoulda/matchers'"
39
- end
40
- end
26
+ AddsShouldaMatchersToProject.call(options)
41
27
  end
42
28
 
43
29
  def add_minitest_to_project
@@ -61,8 +47,8 @@ module AcceptanceTests
61
47
  end
62
48
  end
63
49
 
64
- def write_minitest_test(path)
65
- contents = yield minitest_test_case_superclass
50
+ def write_n_unit_test(path)
51
+ contents = yield n_unit_test_case_superclass
66
52
  write_file(path, contents)
67
53
  end
68
54
 
@@ -85,6 +71,14 @@ module AcceptanceTests
85
71
  bundle.remove_gem 'turn'
86
72
  bundle.remove_gem 'coffee-rails'
87
73
  bundle.remove_gem 'uglifier'
74
+ bundle.remove_gem 'debugger'
75
+ bundle.remove_gem 'byebug'
76
+ bundle.remove_gem 'web-console'
77
+ bundle.add_gem 'pg'
78
+ end
79
+
80
+ fs.open('config/database.yml', 'w') do |file|
81
+ YAML.dump(database.config.to_hash, file)
88
82
  end
89
83
  end
90
84
 
@@ -20,7 +20,7 @@ module AcceptanceTests
20
20
  "Expected output:\n" +
21
21
  output + "\n\n" +
22
22
  "Actual output:\n" +
23
- runner.elided_output
23
+ runner.output
24
24
  end
25
25
 
26
26
  protected
@@ -35,7 +35,7 @@ module Tests
35
35
 
36
36
  def remove_gem(gem)
37
37
  updating do
38
- fs.remove_from_file('Gemfile', /^gem ("|')gem\1/)
38
+ fs.comment_lines_matching('Gemfile', /^[ ]*gem ("|')#{gem}\1/)
39
39
  end
40
40
  end
41
41
 
@@ -19,7 +19,7 @@ module Tests
19
19
  end
20
20
  end
21
21
 
22
- attr_reader :status, :options, :env, :directory
22
+ attr_reader :status, :options, :env
23
23
  attr_accessor :command_prefix, :run_quickly, :run_successfully, :retries,
24
24
  :timeout
25
25
 
@@ -35,7 +35,7 @@ module Tests
35
35
 
36
36
  @wrapper = ->(block) { block.call }
37
37
  @command_prefix = ''
38
- @directory = Dir.pwd
38
+ self.directory = Dir.pwd
39
39
  @run_quickly = false
40
40
  @run_successfully = false
41
41
  @retries = 1
@@ -47,8 +47,12 @@ module Tests
47
47
  @wrapper = block
48
48
  end
49
49
 
50
+ def directory
51
+ @options[:chdir]
52
+ end
53
+
50
54
  def directory=(directory)
51
- @directory = directory || Dir.pwd
55
+ @options[:chdir] = directory || Dir.pwd
52
56
  end
53
57
 
54
58
  def formatted_command
@@ -60,9 +64,7 @@ module Tests
60
64
  def call
61
65
  possibly_retrying do
62
66
  possibly_running_quickly do
63
- debug { "\n\e[32mRunning command:\e[0m #{formatted_command}" }
64
- wrapper.call(-> { run })
65
- debug { "\n" + divider('START') + output + divider('END') }
67
+ run_with_debugging
66
68
 
67
69
  if run_successfully && !success?
68
70
  fail!
@@ -108,7 +110,7 @@ module Tests
108
110
 
109
111
  def fail!
110
112
  raise <<-MESSAGE
111
- Command #{command.inspect} exited with status #{exit_status}.
113
+ Command #{formatted_command.inspect} exited with status #{exit_status}.
112
114
  Output:
113
115
  #{divider('START') + output + divider('END')}
114
116
  MESSAGE
@@ -142,14 +144,24 @@ Output:
142
144
  end
143
145
 
144
146
  def run
145
- Dir.chdir(directory) do
146
- pid = spawn(env, *command, options)
147
- Process.waitpid(pid)
148
- end
149
-
147
+ pid = spawn(env, *command, options)
148
+ Process.waitpid(pid)
150
149
  @status = $?
151
150
  end
152
151
 
152
+ def run_with_wrapper
153
+ wrapper.call(method(:run))
154
+ end
155
+
156
+ def run_with_debugging
157
+ debug { "\n\e[33mChanging to directory:\e[0m #{directory}" }
158
+ debug { "\e[32mRunning command:\e[0m #{formatted_command}" }
159
+
160
+ run_with_wrapper
161
+
162
+ debug { "\n" + divider('START') + output + divider('END') }
163
+ end
164
+
153
165
  def possibly_running_quickly(&block)
154
166
  if run_quickly
155
167
  begin
@@ -160,7 +172,7 @@ Output:
160
172
  message =
161
173
  "Command timed out after #{timeout} seconds: #{formatted_command}\n" +
162
174
  "Output:\n" +
163
- elided_output
175
+ output
164
176
 
165
177
  raise TimeoutError, message
166
178
  end