shoulda-matchers 2.8.0 → 3.0.0.rc1

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.
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