rspec-rails 1.3.2 → 6.1.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (269) hide show
  1. checksums.yaml +7 -0
  2. checksums.yaml.gz.sig +0 -0
  3. data/.document +4 -6
  4. data/.yardopts +11 -0
  5. data/Capybara.md +28 -0
  6. data/Changelog.md +1286 -0
  7. data/LICENSE.md +25 -0
  8. data/README.md +381 -0
  9. data/lib/generators/rspec/channel/channel_generator.rb +12 -0
  10. data/lib/generators/rspec/channel/templates/channel_spec.rb.erb +7 -0
  11. data/lib/generators/rspec/controller/controller_generator.rb +51 -0
  12. data/lib/generators/rspec/controller/templates/controller_spec.rb +16 -0
  13. data/lib/generators/rspec/controller/templates/request_spec.rb +19 -0
  14. data/lib/generators/rspec/controller/templates/routing_spec.rb +13 -0
  15. data/lib/generators/rspec/controller/templates/view_spec.rb +5 -0
  16. data/lib/generators/rspec/feature/feature_generator.rb +29 -0
  17. data/lib/generators/rspec/feature/templates/feature_singular_spec.rb +5 -0
  18. data/lib/generators/rspec/feature/templates/feature_spec.rb +5 -0
  19. data/lib/generators/rspec/generator/generator_generator.rb +24 -0
  20. data/lib/generators/rspec/generator/templates/generator_spec.rb +5 -0
  21. data/lib/generators/rspec/helper/helper_generator.rb +16 -0
  22. data/lib/generators/rspec/helper/templates/helper_spec.rb +17 -0
  23. data/lib/generators/rspec/install/install_generator.rb +80 -0
  24. data/lib/generators/rspec/install/templates/spec/rails_helper.rb +84 -0
  25. data/lib/generators/rspec/integration/integration_generator.rb +29 -0
  26. data/lib/generators/rspec/job/job_generator.rb +13 -0
  27. data/lib/generators/rspec/job/templates/job_spec.rb.erb +7 -0
  28. data/lib/generators/rspec/mailbox/mailbox_generator.rb +14 -0
  29. data/lib/generators/rspec/mailbox/templates/mailbox_spec.rb.erb +7 -0
  30. data/lib/generators/rspec/mailer/mailer_generator.rb +30 -0
  31. data/lib/generators/rspec/mailer/templates/fixture +3 -0
  32. data/lib/generators/rspec/mailer/templates/mailer_spec.rb +25 -0
  33. data/lib/generators/rspec/mailer/templates/preview.rb +13 -0
  34. data/lib/generators/rspec/model/model_generator.rb +37 -0
  35. data/lib/generators/rspec/model/templates/fixtures.yml +19 -0
  36. data/lib/generators/rspec/model/templates/model_spec.rb +7 -0
  37. data/lib/generators/rspec/request/request_generator.rb +17 -0
  38. data/lib/generators/rspec/request/templates/request_spec.rb +10 -0
  39. data/lib/generators/rspec/scaffold/scaffold_generator.rb +136 -0
  40. data/lib/generators/rspec/scaffold/templates/api_controller_spec.rb +129 -0
  41. data/lib/generators/rspec/scaffold/templates/api_request_spec.rb +131 -0
  42. data/lib/generators/rspec/scaffold/templates/controller_spec.rb +160 -0
  43. data/lib/generators/rspec/scaffold/templates/edit_spec.rb +27 -0
  44. data/lib/generators/rspec/scaffold/templates/index_spec.rb +26 -0
  45. data/lib/generators/rspec/scaffold/templates/new_spec.rb +22 -0
  46. data/lib/generators/rspec/scaffold/templates/request_spec.rb +153 -0
  47. data/lib/generators/rspec/scaffold/templates/routing_spec.rb +46 -0
  48. data/lib/generators/rspec/scaffold/templates/show_spec.rb +21 -0
  49. data/lib/generators/rspec/system/system_generator.rb +24 -0
  50. data/lib/generators/rspec/system/templates/system_spec.rb +9 -0
  51. data/lib/generators/rspec/view/templates/view_spec.rb +5 -0
  52. data/lib/generators/rspec/view/view_generator.rb +22 -0
  53. data/lib/generators/rspec.rb +56 -0
  54. data/lib/rspec/rails/active_record.rb +25 -0
  55. data/lib/rspec/rails/adapters.rb +196 -0
  56. data/lib/rspec/rails/configuration.rb +222 -0
  57. data/lib/rspec/rails/example/channel_example_group.rb +93 -0
  58. data/lib/rspec/rails/example/controller_example_group.rb +217 -0
  59. data/lib/rspec/rails/example/feature_example_group.rb +53 -0
  60. data/lib/rspec/rails/example/helper_example_group.rb +42 -0
  61. data/lib/rspec/rails/example/job_example_group.rb +23 -0
  62. data/lib/rspec/rails/example/mailbox_example_group.rb +80 -0
  63. data/lib/rspec/rails/example/mailer_example_group.rb +38 -0
  64. data/lib/rspec/rails/example/model_example_group.rb +11 -0
  65. data/lib/rspec/rails/example/rails_example_group.rb +25 -0
  66. data/lib/rspec/rails/example/request_example_group.rb +27 -0
  67. data/lib/rspec/rails/example/routing_example_group.rb +61 -0
  68. data/lib/rspec/rails/example/system_example_group.rb +172 -0
  69. data/lib/rspec/rails/example/view_example_group.rb +214 -0
  70. data/lib/rspec/rails/example.rb +13 -0
  71. data/lib/rspec/rails/extensions/active_record/proxy.rb +11 -0
  72. data/lib/rspec/rails/extensions.rb +1 -0
  73. data/lib/rspec/rails/feature_check.rb +51 -0
  74. data/lib/rspec/rails/file_fixture_support.rb +18 -0
  75. data/lib/rspec/rails/fixture_file_upload_support.rb +45 -0
  76. data/lib/rspec/rails/fixture_support.rb +89 -0
  77. data/lib/rspec/rails/matchers/action_cable/have_broadcasted_to.rb +173 -0
  78. data/lib/rspec/rails/matchers/action_cable/have_streams.rb +58 -0
  79. data/lib/rspec/rails/matchers/action_cable.rb +65 -0
  80. data/lib/rspec/rails/matchers/action_mailbox.rb +73 -0
  81. data/lib/rspec/rails/matchers/active_job.rb +465 -0
  82. data/lib/rspec/rails/matchers/base_matcher.rb +179 -0
  83. data/lib/rspec/rails/matchers/be_a_new.rb +83 -0
  84. data/lib/rspec/rails/matchers/be_new_record.rb +30 -0
  85. data/lib/rspec/rails/matchers/be_valid.rb +49 -0
  86. data/lib/rspec/rails/matchers/have_enqueued_mail.rb +227 -0
  87. data/lib/rspec/rails/matchers/have_http_status.rb +385 -0
  88. data/lib/rspec/rails/matchers/have_rendered.rb +64 -0
  89. data/lib/rspec/rails/matchers/redirect_to.rb +38 -0
  90. data/lib/rspec/rails/matchers/relation_match_array.rb +3 -0
  91. data/lib/rspec/rails/matchers/routing_matchers.rb +125 -0
  92. data/lib/rspec/rails/matchers/send_email.rb +122 -0
  93. data/lib/rspec/rails/matchers.rb +36 -0
  94. data/lib/rspec/rails/tasks/rspec.rake +47 -0
  95. data/lib/rspec/rails/vendor/capybara.rb +32 -0
  96. data/lib/rspec/rails/version.rb +9 -0
  97. data/lib/rspec/rails/view_assigns.rb +27 -0
  98. data/lib/rspec/rails/view_path_builder.rb +29 -0
  99. data/lib/rspec/rails/view_rendering.rb +166 -0
  100. data/lib/rspec/rails/view_spec_methods.rb +56 -0
  101. data/lib/rspec/rails.rb +18 -0
  102. data/lib/rspec-rails.rb +80 -0
  103. data.tar.gz.sig +2 -0
  104. metadata +308 -261
  105. metadata.gz.sig +0 -0
  106. data/Contribute.rdoc +0 -4
  107. data/History.rdoc +0 -302
  108. data/License.txt +0 -33
  109. data/Manifest.txt +0 -165
  110. data/README.rdoc +0 -45
  111. data/Rakefile +0 -72
  112. data/TODO.txt +0 -17
  113. data/Upgrade.rdoc +0 -148
  114. data/generators/integration_spec/integration_spec_generator.rb +0 -10
  115. data/generators/integration_spec/templates/integration_spec.rb +0 -4
  116. data/generators/rspec/CHANGES +0 -1
  117. data/generators/rspec/rspec_generator.rb +0 -72
  118. data/generators/rspec/templates/previous_failures.txt +0 -0
  119. data/generators/rspec/templates/rcov.opts +0 -2
  120. data/generators/rspec/templates/rspec.rake +0 -144
  121. data/generators/rspec/templates/script/autospec +0 -6
  122. data/generators/rspec/templates/script/spec +0 -10
  123. data/generators/rspec/templates/spec.opts +0 -4
  124. data/generators/rspec/templates/spec_helper.rb +0 -54
  125. data/generators/rspec_controller/USAGE +0 -33
  126. data/generators/rspec_controller/rspec_controller_generator.rb +0 -47
  127. data/generators/rspec_controller/templates/controller_spec.rb +0 -25
  128. data/generators/rspec_controller/templates/helper_spec.rb +0 -11
  129. data/generators/rspec_controller/templates/view_spec.rb +0 -12
  130. data/generators/rspec_default_values.rb +0 -28
  131. data/generators/rspec_model/USAGE +0 -18
  132. data/generators/rspec_model/rspec_model_generator.rb +0 -35
  133. data/generators/rspec_model/templates/model_spec.rb +0 -13
  134. data/generators/rspec_scaffold/rspec_scaffold_generator.rb +0 -154
  135. data/generators/rspec_scaffold/templates/controller_spec.rb +0 -131
  136. data/generators/rspec_scaffold/templates/edit_erb_spec.rb +0 -25
  137. data/generators/rspec_scaffold/templates/helper_spec.rb +0 -11
  138. data/generators/rspec_scaffold/templates/index_erb_spec.rb +0 -27
  139. data/generators/rspec_scaffold/templates/new_erb_spec.rb +0 -25
  140. data/generators/rspec_scaffold/templates/routing_spec.rb +0 -33
  141. data/generators/rspec_scaffold/templates/show_erb_spec.rb +0 -22
  142. data/init.rb +0 -9
  143. data/lib/autotest/discover.rb +0 -5
  144. data/lib/autotest/rails_rspec.rb +0 -76
  145. data/lib/spec/rails/example/assigns_hash_proxy.rb +0 -39
  146. data/lib/spec/rails/example/controller_example_group.rb +0 -285
  147. data/lib/spec/rails/example/cookies_proxy.rb +0 -29
  148. data/lib/spec/rails/example/functional_example_group.rb +0 -106
  149. data/lib/spec/rails/example/helper_example_group.rb +0 -153
  150. data/lib/spec/rails/example/integration_example_group.rb +0 -16
  151. data/lib/spec/rails/example/model_example_group.rb +0 -15
  152. data/lib/spec/rails/example/render_observer.rb +0 -80
  153. data/lib/spec/rails/example/routing_example_group.rb +0 -13
  154. data/lib/spec/rails/example/routing_helpers.rb +0 -66
  155. data/lib/spec/rails/example/view_example_group.rb +0 -199
  156. data/lib/spec/rails/example.rb +0 -48
  157. data/lib/spec/rails/extensions/action_controller/rescue.rb +0 -42
  158. data/lib/spec/rails/extensions/action_controller/test_case.rb +0 -16
  159. data/lib/spec/rails/extensions/action_controller/test_response.rb +0 -21
  160. data/lib/spec/rails/extensions/action_view/base.rb +0 -33
  161. data/lib/spec/rails/extensions/active_record/base.rb +0 -45
  162. data/lib/spec/rails/extensions/active_support/test_case.rb +0 -7
  163. data/lib/spec/rails/extensions/spec/matchers/have.rb +0 -23
  164. data/lib/spec/rails/extensions/spec/runner/configuration.rb +0 -44
  165. data/lib/spec/rails/extensions.rb +0 -11
  166. data/lib/spec/rails/interop/testcase.rb +0 -14
  167. data/lib/spec/rails/matchers/ar_be_valid.rb +0 -27
  168. data/lib/spec/rails/matchers/assert_select.rb +0 -180
  169. data/lib/spec/rails/matchers/change.rb +0 -13
  170. data/lib/spec/rails/matchers/have_text.rb +0 -57
  171. data/lib/spec/rails/matchers/include_text.rb +0 -54
  172. data/lib/spec/rails/matchers/redirect_to.rb +0 -126
  173. data/lib/spec/rails/matchers/render_template.rb +0 -129
  174. data/lib/spec/rails/matchers/route_to.rb +0 -149
  175. data/lib/spec/rails/matchers.rb +0 -32
  176. data/lib/spec/rails/mocks.rb +0 -136
  177. data/lib/spec/rails/version.rb +0 -16
  178. data/lib/spec/rails.rb +0 -26
  179. data/spec/autotest/mappings_spec.rb +0 -86
  180. data/spec/rails_suite.rb +0 -7
  181. data/spec/resources/controllers/action_view_base_spec_controller.rb +0 -2
  182. data/spec/resources/controllers/application.rb +0 -9
  183. data/spec/resources/controllers/controller_spec_controller.rb +0 -127
  184. data/spec/resources/controllers/example.txt +0 -1
  185. data/spec/resources/controllers/redirect_spec_controller.rb +0 -70
  186. data/spec/resources/controllers/render_spec_controller.rb +0 -34
  187. data/spec/resources/controllers/rjs_spec_controller.rb +0 -58
  188. data/spec/resources/helpers/addition_helper.rb +0 -5
  189. data/spec/resources/helpers/explicit_helper.rb +0 -46
  190. data/spec/resources/helpers/more_explicit_helper.rb +0 -5
  191. data/spec/resources/helpers/plugin_application_helper.rb +0 -6
  192. data/spec/resources/helpers/view_spec_helper.rb +0 -13
  193. data/spec/resources/models/animal.rb +0 -4
  194. data/spec/resources/models/person.rb +0 -18
  195. data/spec/resources/models/thing.rb +0 -3
  196. data/spec/resources/views/controller_spec/_partial.html.erb +0 -0
  197. data/spec/resources/views/controller_spec/action_setting_flash_after_session_reset.html.erb +0 -1
  198. data/spec/resources/views/controller_spec/action_setting_flash_before_session_reset.html.erb +0 -1
  199. data/spec/resources/views/controller_spec/action_setting_the_assigns_hash.html.erb +0 -0
  200. data/spec/resources/views/controller_spec/action_with_errors_in_template.html.erb +0 -1
  201. data/spec/resources/views/controller_spec/action_with_template.html.erb +0 -1
  202. data/spec/resources/views/layouts/application.html.erb +0 -0
  203. data/spec/resources/views/layouts/simple.html.erb +0 -0
  204. data/spec/resources/views/objects/_object.html.erb +0 -1
  205. data/spec/resources/views/render_spec/_a_partial.html.erb +0 -0
  206. data/spec/resources/views/render_spec/action_with_alternate_layout.html.erb +0 -0
  207. data/spec/resources/views/render_spec/some_action.html.erb +0 -0
  208. data/spec/resources/views/render_spec/some_action.js.rjs +0 -1
  209. data/spec/resources/views/rjs_spec/_replacement_partial.html.erb +0 -1
  210. data/spec/resources/views/rjs_spec/hide_div.js.rjs +0 -1
  211. data/spec/resources/views/rjs_spec/hide_page_element.js.rjs +0 -1
  212. data/spec/resources/views/rjs_spec/insert_html.js.rjs +0 -1
  213. data/spec/resources/views/rjs_spec/replace.js.rjs +0 -1
  214. data/spec/resources/views/rjs_spec/replace_html.js.rjs +0 -1
  215. data/spec/resources/views/rjs_spec/replace_html_with_partial.js.rjs +0 -1
  216. data/spec/resources/views/rjs_spec/visual_effect.js.rjs +0 -1
  217. data/spec/resources/views/rjs_spec/visual_toggle_effect.js.rjs +0 -1
  218. data/spec/resources/views/tag_spec/no_tags.html.erb +0 -1
  219. data/spec/resources/views/tag_spec/single_div_with_no_attributes.html.erb +0 -1
  220. data/spec/resources/views/tag_spec/single_div_with_one_attribute.html.erb +0 -1
  221. data/spec/resources/views/view_spec/_partial.html.erb +0 -2
  222. data/spec/resources/views/view_spec/_partial_used_twice.html.erb +0 -0
  223. data/spec/resources/views/view_spec/_partial_with_local_variable.html.erb +0 -1
  224. data/spec/resources/views/view_spec/_partial_with_sub_partial.html.erb +0 -1
  225. data/spec/resources/views/view_spec/_spacer.html.erb +0 -1
  226. data/spec/resources/views/view_spec/accessor.html.erb +0 -6
  227. data/spec/resources/views/view_spec/block_helper.html.erb +0 -3
  228. data/spec/resources/views/view_spec/entry_form.html.erb +0 -2
  229. data/spec/resources/views/view_spec/explicit_helper.html.erb +0 -2
  230. data/spec/resources/views/view_spec/foo/show.html.erb +0 -1
  231. data/spec/resources/views/view_spec/implicit_helper.html.erb +0 -2
  232. data/spec/resources/views/view_spec/multiple_helpers.html.erb +0 -3
  233. data/spec/resources/views/view_spec/path_params.html.erb +0 -1
  234. data/spec/resources/views/view_spec/should_not_receive.html.erb +0 -3
  235. data/spec/resources/views/view_spec/template_with_partial.html.erb +0 -5
  236. data/spec/resources/views/view_spec/template_with_partial_using_collection.html.erb +0 -3
  237. data/spec/resources/views/view_spec/template_with_partial_with_array.html.erb +0 -1
  238. data/spec/resources/views/view_spec/view_helpers.html.erb +0 -1
  239. data/spec/spec/rails/example/assigns_hash_proxy_spec.rb +0 -109
  240. data/spec/spec/rails/example/configuration_spec.rb +0 -65
  241. data/spec/spec/rails/example/controller_example_group_spec.rb +0 -307
  242. data/spec/spec/rails/example/controller_isolation_spec.rb +0 -75
  243. data/spec/spec/rails/example/cookies_proxy_spec.rb +0 -87
  244. data/spec/spec/rails/example/error_handling_spec.rb +0 -90
  245. data/spec/spec/rails/example/example_group_factory_spec.rb +0 -112
  246. data/spec/spec/rails/example/helper_example_group_spec.rb +0 -233
  247. data/spec/spec/rails/example/model_example_group_spec.rb +0 -32
  248. data/spec/spec/rails/example/routing_example_group_spec.rb +0 -10
  249. data/spec/spec/rails/example/shared_routing_example_group_examples.rb +0 -237
  250. data/spec/spec/rails/example/test_unit_assertion_accessibility_spec.rb +0 -33
  251. data/spec/spec/rails/example/view_example_group_spec.rb +0 -346
  252. data/spec/spec/rails/extensions/action_view_base_spec.rb +0 -74
  253. data/spec/spec/rails/extensions/active_record_spec.rb +0 -14
  254. data/spec/spec/rails/interop/testcase_spec.rb +0 -70
  255. data/spec/spec/rails/matchers/ar_be_valid_spec.rb +0 -19
  256. data/spec/spec/rails/matchers/assert_select_spec.rb +0 -835
  257. data/spec/spec/rails/matchers/errors_on_spec.rb +0 -37
  258. data/spec/spec/rails/matchers/have_text_spec.rb +0 -69
  259. data/spec/spec/rails/matchers/include_text_spec.rb +0 -62
  260. data/spec/spec/rails/matchers/redirect_to_spec.rb +0 -253
  261. data/spec/spec/rails/matchers/render_template_spec.rb +0 -208
  262. data/spec/spec/rails/matchers/should_change_spec.rb +0 -15
  263. data/spec/spec/rails/mocks/ar_classes.rb +0 -10
  264. data/spec/spec/rails/mocks/mock_model_spec.rb +0 -109
  265. data/spec/spec/rails/mocks/stub_model_spec.rb +0 -80
  266. data/spec/spec/rails/sample_modified_fixture.rb +0 -8
  267. data/spec/spec/rails/sample_spec.rb +0 -8
  268. data/spec/spec/rails/spec_spec.rb +0 -11
  269. data/spec/spec_helper.rb +0 -78
@@ -0,0 +1,80 @@
1
+ require "rspec/support"
2
+ require "rspec/core"
3
+ RSpec::Support.require_rspec_core "project_initializer"
4
+ require "rspec/rails/feature_check"
5
+
6
+ module Rspec
7
+ module Generators
8
+ # @private
9
+ class InstallGenerator < ::Rails::Generators::Base
10
+ desc <<DESC
11
+ Description:
12
+ Copy rspec files to your application.
13
+ DESC
14
+
15
+ class_option :default_path, type: :string, default: 'spec'
16
+
17
+ def self.source_root
18
+ @source_root ||= File.expand_path(File.join(File.dirname(__FILE__), 'templates'))
19
+ end
20
+
21
+ def copy_spec_files
22
+ Dir.mktmpdir do |dir|
23
+ generate_rspec_init dir
24
+ template File.join(dir, '.rspec'), '.rspec'
25
+ directory File.join(dir, 'spec'), default_path
26
+ end
27
+ end
28
+
29
+ def copy_rails_files
30
+ template 'spec/rails_helper.rb', "#{default_path}/rails_helper.rb"
31
+ end
32
+
33
+ private
34
+
35
+ def generate_rspec_init(tmpdir)
36
+ initializer = ::RSpec::Core::ProjectInitializer.new(
37
+ destination: tmpdir,
38
+ report_stream: StringIO.new
39
+ )
40
+ initializer.run
41
+
42
+ spec_helper_path = File.join(tmpdir, 'spec', 'spec_helper.rb')
43
+
44
+ replace_generator_command(spec_helper_path)
45
+ remove_warnings_configuration(spec_helper_path)
46
+
47
+ unless default_path == "spec"
48
+ dot_rspec_path = File.join(tmpdir, '.rspec')
49
+
50
+ append_default_path(dot_rspec_path)
51
+ end
52
+ end
53
+
54
+ def replace_generator_command(spec_helper_path)
55
+ gsub_file spec_helper_path,
56
+ 'rspec --init',
57
+ 'rails generate rspec:install',
58
+ verbose: false
59
+ end
60
+
61
+ def remove_warnings_configuration(spec_helper_path)
62
+ empty_line = '^\n'
63
+ comment_line = '^\s*#.+\n'
64
+ gsub_file spec_helper_path,
65
+ /#{empty_line}(#{comment_line})+\s+config\.warnings = true\n/,
66
+ '',
67
+ verbose: false
68
+ end
69
+
70
+ def append_default_path(dot_rspec_path)
71
+ append_to_file dot_rspec_path,
72
+ "--default-path #{default_path}"
73
+ end
74
+
75
+ def default_path
76
+ options[:default_path]
77
+ end
78
+ end
79
+ end
80
+ end
@@ -0,0 +1,84 @@
1
+ # This file is copied to spec/ when you run 'rails generate rspec:install'
2
+ require 'spec_helper'
3
+ ENV['RAILS_ENV'] ||= 'test'
4
+ require_relative '../config/environment'
5
+ # Prevent database truncation if the environment is production
6
+ abort("The Rails environment is running in production mode!") if Rails.env.production?
7
+ require 'rspec/rails'
8
+ # Add additional requires below this line. Rails is not loaded until this point!
9
+
10
+ # Requires supporting ruby files with custom matchers and macros, etc, in
11
+ # spec/support/ and its subdirectories. Files matching `spec/**/*_spec.rb` are
12
+ # run as spec files by default. This means that files in spec/support that end
13
+ # in _spec.rb will both be required and run as specs, causing the specs to be
14
+ # run twice. It is recommended that you do not name files matching this glob to
15
+ # end with _spec.rb. You can configure this pattern with the --pattern
16
+ # option on the command line or in ~/.rspec, .rspec or `.rspec-local`.
17
+ #
18
+ # The following line is provided for convenience purposes. It has the downside
19
+ # of increasing the boot-up time by auto-requiring all files in the support
20
+ # directory. Alternatively, in the individual `*_spec.rb` files, manually
21
+ # require only the support files necessary.
22
+ #
23
+ # Rails.root.glob('spec/support/**/*.rb').sort.each { |f| require f }
24
+
25
+ <% if RSpec::Rails::FeatureCheck.has_active_record_migration? -%>
26
+ # Checks for pending migrations and applies them before tests are run.
27
+ # If you are not using ActiveRecord, you can remove these lines.
28
+ begin
29
+ ActiveRecord::Migration.maintain_test_schema!
30
+ rescue ActiveRecord::PendingMigrationError => e
31
+ abort e.to_s.strip
32
+ end
33
+ <% end -%>
34
+ RSpec.configure do |config|
35
+ <% if RSpec::Rails::FeatureCheck.has_active_record? -%>
36
+ # Remove this line if you're not using ActiveRecord or ActiveRecord fixtures
37
+ <% if ::Rails::VERSION::STRING < "7.1.0" -%>
38
+ config.fixture_path = Rails.root.join('spec/fixtures')
39
+ <% else -%>
40
+ config.fixture_paths = [
41
+ Rails.root.join('spec/fixtures')
42
+ ]
43
+ <% end -%>
44
+
45
+ # If you're not using ActiveRecord, or you'd prefer not to run each of your
46
+ # examples within a transaction, remove the following line or assign false
47
+ # instead of true.
48
+ config.use_transactional_fixtures = true
49
+
50
+ # You can uncomment this line to turn off ActiveRecord support entirely.
51
+ # config.use_active_record = false
52
+
53
+ <% else -%>
54
+ # Remove this line to enable support for ActiveRecord
55
+ config.use_active_record = false
56
+
57
+ # If you enable ActiveRecord support you should uncomment these lines,
58
+ # note if you'd prefer not to run each example within a transaction, you
59
+ # should set use_transactional_fixtures to false.
60
+ #
61
+ # config.fixture_path = Rails.root.join('spec/fixtures')
62
+ # config.use_transactional_fixtures = true
63
+
64
+ <% end -%>
65
+ # RSpec Rails can automatically mix in different behaviours to your tests
66
+ # based on their file location, for example enabling you to call `get` and
67
+ # `post` in specs under `spec/controllers`.
68
+ #
69
+ # You can disable this behaviour by removing the line below, and instead
70
+ # explicitly tag your specs with their type, e.g.:
71
+ #
72
+ # RSpec.describe UsersController, type: :controller do
73
+ # # ...
74
+ # end
75
+ #
76
+ # The different available types are documented in the features, such as in
77
+ # https://rspec.info/features/6-0/rspec-rails
78
+ config.infer_spec_type_from_file_location!
79
+
80
+ # Filter lines from Rails gems in backtraces.
81
+ config.filter_rails_from_backtrace!
82
+ # arbitrary gems may also be filtered via:
83
+ # config.filter_gems_from_backtrace("gem name")
84
+ end
@@ -0,0 +1,29 @@
1
+ require 'generators/rspec'
2
+ require 'rspec/core/warnings'
3
+
4
+ module Rspec
5
+ module Generators
6
+ # @private
7
+ class IntegrationGenerator < Base
8
+ class_option :request_specs,
9
+ type: :boolean,
10
+ default: true,
11
+ desc: "Generate request specs"
12
+
13
+ source_paths << File.expand_path('../request/templates', __dir__)
14
+
15
+ def generate_request_spec
16
+ return unless options[:request_specs]
17
+
18
+ RSpec.warn_deprecation <<-WARNING.gsub(/\s*\|/, ' ')
19
+ |The integration generator is deprecated
20
+ |and will be deleted in RSpec-Rails 7.
21
+ |Please use the request generator instead.
22
+ WARNING
23
+
24
+ template 'request_spec.rb',
25
+ target_path('requests', "#{name.underscore.pluralize}_spec.rb")
26
+ end
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,13 @@
1
+ require 'generators/rspec'
2
+
3
+ module Rspec
4
+ module Generators
5
+ # @private
6
+ class JobGenerator < Base
7
+ def create_job_spec
8
+ file_suffix = file_name.end_with?('job') ? 'spec.rb' : 'job_spec.rb'
9
+ template 'job_spec.rb.erb', target_path('jobs', class_path, [file_name, file_suffix].join('_'))
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,7 @@
1
+ require 'rails_helper'
2
+
3
+ <% module_namespacing do -%>
4
+ RSpec.describe <%= class_name %><%= "Job" unless class_name.end_with?("Job")%>, <%= type_metatag(:job) %> do
5
+ pending "add some examples to (or delete) #{__FILE__}"
6
+ end
7
+ <% end -%>
@@ -0,0 +1,14 @@
1
+ require 'generators/rspec'
2
+
3
+ module Rspec
4
+ module Generators
5
+ # @private
6
+ class MailboxGenerator < Base
7
+ def create_mailbox_spec
8
+ template('mailbox_spec.rb.erb',
9
+ target_path('mailboxes', class_path, "#{file_name}_mailbox_spec.rb")
10
+ )
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,7 @@
1
+ require 'rails_helper'
2
+
3
+ <% module_namespacing do -%>
4
+ RSpec.describe <%= class_name %>Mailbox, <%= type_metatag(:mailbox) %> do
5
+ pending "add some examples to (or delete) #{__FILE__}"
6
+ end
7
+ <% end -%>
@@ -0,0 +1,30 @@
1
+ require 'generators/rspec'
2
+ require "rspec/rails/feature_check"
3
+
4
+ module Rspec
5
+ module Generators
6
+ # @private
7
+ class MailerGenerator < Base
8
+ argument :actions, type: :array, default: [], banner: "method method"
9
+
10
+ def generate_mailer_spec
11
+ file_suffix = file_name.end_with?('mailer') ? 'spec.rb' : 'mailer_spec.rb'
12
+ template "mailer_spec.rb", target_path('mailers', class_path, [file_name, file_suffix].join('_'))
13
+ end
14
+
15
+ def generate_fixtures_files
16
+ actions.each do |action|
17
+ @action, @path = action, File.join(file_path, action)
18
+ template "fixture", target_path("fixtures", @path)
19
+ end
20
+ end
21
+
22
+ def generate_preview_files
23
+ return unless RSpec::Rails::FeatureCheck.has_action_mailer_preview?
24
+
25
+ file_suffix = file_name.end_with?('mailer') ? 'preview.rb' : 'mailer_preview.rb'
26
+ template "preview.rb", target_path("mailers/previews", class_path, [file_name, file_suffix].join('_'))
27
+ end
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,3 @@
1
+ <%= class_name %>#<%= @action %>
2
+
3
+ Hi, find me in app/views/<%= @path %>
@@ -0,0 +1,25 @@
1
+ require "rails_helper"
2
+
3
+ <% module_namespacing do -%>
4
+ RSpec.describe <%= class_name.sub(/(Mailer)?$/, 'Mailer') %>, <%= type_metatag(:mailer) %> do
5
+ <% for action in actions -%>
6
+ describe "<%= action %>" do
7
+ let(:mail) { <%= class_name.sub(/(Mailer)?$/, 'Mailer') %>.<%= action %> }
8
+
9
+ it "renders the headers" do
10
+ expect(mail.subject).to eq(<%= action.to_s.humanize.inspect %>)
11
+ expect(mail.to).to eq(["to@example.org"])
12
+ expect(mail.from).to eq(["from@example.com"])
13
+ end
14
+
15
+ it "renders the body" do
16
+ expect(mail.body.encoded).to match("Hi")
17
+ end
18
+ end
19
+
20
+ <% end -%>
21
+ <% if actions.blank? -%>
22
+ pending "add some examples to (or delete) #{__FILE__}"
23
+ <% end -%>
24
+ end
25
+ <% end -%>
@@ -0,0 +1,13 @@
1
+ <% module_namespacing do -%>
2
+ # Preview all emails at http://localhost:3000/rails/mailers/<%= file_path %>
3
+ class <%= class_name %><%= 'Mailer' unless class_name.end_with?('Mailer') %>Preview < ActionMailer::Preview
4
+ <% actions.each do |action| -%>
5
+
6
+ # Preview this email at http://localhost:3000/rails/mailers/<%= file_path %>/<%= action %>
7
+ def <%= action %>
8
+ <%= class_name.sub(/(Mailer)?$/, 'Mailer') %>.<%= action %>
9
+ end
10
+ <% end -%>
11
+
12
+ end
13
+ <% end -%>
@@ -0,0 +1,37 @@
1
+ require 'generators/rspec'
2
+
3
+ module Rspec
4
+ module Generators
5
+ # @private
6
+ class ModelGenerator < Base
7
+ argument :attributes,
8
+ type: :array,
9
+ default: [],
10
+ banner: "field:type field:type"
11
+ class_option :fixture, type: :boolean
12
+
13
+ def create_model_spec
14
+ template_file = target_path(
15
+ 'models',
16
+ class_path,
17
+ "#{file_name}_spec.rb"
18
+ )
19
+ template 'model_spec.rb', template_file
20
+ end
21
+
22
+ hook_for :fixture_replacement
23
+
24
+ def create_fixture_file
25
+ return unless missing_fixture_replacement?
26
+
27
+ template 'fixtures.yml', target_path('fixtures', class_path, "#{(pluralize_table_names? ? plural_file_name : file_name)}.yml")
28
+ end
29
+
30
+ private
31
+
32
+ def missing_fixture_replacement?
33
+ options[:fixture] && options[:fixture_replacement].nil?
34
+ end
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,19 @@
1
+ # Read about fixtures at https://api.rubyonrails.org/classes/ActiveRecord/FixtureSet.html
2
+
3
+ <% unless attributes.empty? -%>
4
+ one:
5
+ <% for attribute in attributes -%>
6
+ <%= attribute.name %>: <%= attribute.default %>
7
+ <% end -%>
8
+
9
+ two:
10
+ <% for attribute in attributes -%>
11
+ <%= attribute.name %>: <%= attribute.default %>
12
+ <% end -%>
13
+ <% else -%>
14
+ # one:
15
+ # column: value
16
+ #
17
+ # two:
18
+ # column: value
19
+ <% end -%>
@@ -0,0 +1,7 @@
1
+ require 'rails_helper'
2
+
3
+ <% module_namespacing do -%>
4
+ RSpec.describe <%= class_name %>, <%= type_metatag(:model) %> do
5
+ pending "add some examples to (or delete) #{__FILE__}"
6
+ end
7
+ <% end -%>
@@ -0,0 +1,17 @@
1
+ require 'generators/rspec'
2
+
3
+ module Rspec
4
+ module Generators
5
+ # @private
6
+ class RequestGenerator < Base
7
+ class_option :request_specs, type: :boolean, default: true, desc: 'Generate request specs'
8
+
9
+ def generate_request_spec
10
+ return unless options[:request_specs]
11
+
12
+ template 'request_spec.rb',
13
+ target_path('requests', "#{name.underscore.pluralize}_spec.rb")
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,10 @@
1
+ require 'rails_helper'
2
+
3
+ RSpec.describe "<%= class_name.pluralize %>", <%= type_metatag(:request) %> do
4
+ describe "GET /<%= name.underscore.pluralize %>" do
5
+ it "works! (now write some real specs)" do
6
+ get <%= index_helper %>_path
7
+ expect(response).to have_http_status(200)
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,136 @@
1
+ require 'generators/rspec'
2
+ require 'rails/generators/resource_helpers'
3
+
4
+ module Rspec
5
+ module Generators
6
+ # @private
7
+ class ScaffoldGenerator < Base
8
+ include ::Rails::Generators::ResourceHelpers
9
+ source_paths << File.expand_path('../helper/templates', __dir__)
10
+ argument :attributes, type: :array, default: [], banner: "field:type field:type"
11
+
12
+ class_option :orm, desc: "ORM used to generate the controller"
13
+ class_option :template_engine, desc: "Template engine to generate view files"
14
+ class_option :singleton, type: :boolean, desc: "Supply to create a singleton controller"
15
+ class_option :api, type: :boolean, desc: "Skip specs unnecessary for API-only apps"
16
+
17
+ class_option :controller_specs, type: :boolean, default: false, desc: "Generate controller specs"
18
+ class_option :request_specs, type: :boolean, default: true, desc: "Generate request specs"
19
+ class_option :view_specs, type: :boolean, default: true, desc: "Generate view specs"
20
+ class_option :helper_specs, type: :boolean, default: true, desc: "Generate helper specs"
21
+ class_option :routing_specs, type: :boolean, default: true, desc: "Generate routing specs"
22
+
23
+ def initialize(*args, &blk)
24
+ @generator_args = args.first
25
+ super(*args, &blk)
26
+ end
27
+
28
+ def generate_controller_spec
29
+ return unless options[:controller_specs]
30
+
31
+ if options[:api]
32
+ template 'api_controller_spec.rb', template_file(folder: 'controllers', suffix: '_controller')
33
+ else
34
+ template 'controller_spec.rb', template_file(folder: 'controllers', suffix: '_controller')
35
+ end
36
+ end
37
+
38
+ def generate_request_spec
39
+ return unless options[:request_specs]
40
+
41
+ if options[:api]
42
+ template 'api_request_spec.rb', template_file(folder: 'requests')
43
+ else
44
+ template 'request_spec.rb', template_file(folder: 'requests')
45
+ end
46
+ end
47
+
48
+ def generate_view_specs
49
+ return if options[:api]
50
+ return unless options[:view_specs] && options[:template_engine]
51
+
52
+ copy_view :edit
53
+ copy_view :index unless options[:singleton]
54
+ copy_view :new
55
+ copy_view :show
56
+ end
57
+
58
+ def generate_routing_spec
59
+ return unless options[:routing_specs]
60
+
61
+ template_file = target_path(
62
+ 'routing',
63
+ controller_class_path,
64
+ "#{controller_file_name}_routing_spec.rb"
65
+ )
66
+ template 'routing_spec.rb', template_file
67
+ end
68
+
69
+ protected
70
+
71
+ attr_reader :generator_args
72
+
73
+ def copy_view(view)
74
+ template "#{view}_spec.rb",
75
+ target_path("views", controller_file_path, "#{view}.html.#{options[:template_engine]}_spec.rb")
76
+ end
77
+
78
+ # support for namespaced-resources
79
+ def ns_file_name
80
+ return file_name if ns_parts.empty?
81
+
82
+ "#{ns_prefix.map(&:underscore).join('/')}_#{ns_suffix.singularize.underscore}"
83
+ end
84
+
85
+ # support for namespaced-resources
86
+ def ns_table_name
87
+ return table_name if ns_parts.empty?
88
+
89
+ "#{ns_prefix.map(&:underscore).join('/')}/#{ns_suffix.tableize}"
90
+ end
91
+
92
+ def ns_parts
93
+ @ns_parts ||= begin
94
+ parts = generator_args[0].split(/\/|::/)
95
+ parts.size > 1 ? parts : []
96
+ end
97
+ end
98
+
99
+ def ns_prefix
100
+ @ns_prefix ||= ns_parts[0..-2]
101
+ end
102
+
103
+ def ns_suffix
104
+ @ns_suffix ||= ns_parts[-1]
105
+ end
106
+
107
+ def value_for(attribute)
108
+ raw_value_for(attribute).inspect
109
+ end
110
+
111
+ def raw_value_for(attribute)
112
+ case attribute.type
113
+ when :string
114
+ attribute.name.titleize
115
+ when :integer, :float
116
+ @attribute_id_map ||= {}
117
+ @attribute_id_map[attribute] ||= @attribute_id_map.keys.size.next + attribute.default
118
+ else
119
+ attribute.default
120
+ end
121
+ end
122
+
123
+ def template_file(folder:, suffix: '')
124
+ target_path(folder, controller_class_path, "#{controller_file_name}#{suffix}_spec.rb")
125
+ end
126
+
127
+ def banner
128
+ self.class.banner
129
+ end
130
+
131
+ def show_helper(resource_name = file_name)
132
+ "#{singular_route_name}_url(#{resource_name})"
133
+ end
134
+ end
135
+ end
136
+ end
@@ -0,0 +1,129 @@
1
+ require 'rails_helper'
2
+
3
+ # This spec was generated by rspec-rails when you ran the scaffold generator.
4
+ # It demonstrates how one might use RSpec to specify the controller code that
5
+ # was generated by Rails when you ran the scaffold generator.
6
+ #
7
+ # It assumes that the implementation code is generated by the rails scaffold
8
+ # generator. If you are using any extension libraries to generate different
9
+ # controller code, this generated spec may or may not pass.
10
+ #
11
+ # It only uses APIs available in rails and/or rspec-rails. There are a number
12
+ # of tools you can use to make these specs even more expressive, but we're
13
+ # sticking to rails and rspec-rails APIs to keep things simple and stable.
14
+ #
15
+ # Compared to earlier versions of this generator, there is very limited use of
16
+ # stubs and message expectations in this spec. Stubs are only used when there
17
+ # is no simpler way to get a handle on the object needed for the example.
18
+ # Message expectations are only used when there is no simpler way to specify
19
+ # that an instance is receiving a specific message.
20
+ #
21
+ # Also compared to earlier versions of this generator, there are no longer any
22
+ # expectations of assigns and templates rendered. These features have been
23
+ # removed from Rails core in Rails 5, but can be added back in via the
24
+ # `rails-controller-testing` gem.
25
+
26
+ <% module_namespacing do -%>
27
+ RSpec.describe <%= controller_class_name %>Controller, <%= type_metatag(:controller) %> do
28
+
29
+ # This should return the minimal set of attributes required to create a valid
30
+ # <%= class_name %>. As you add validations to <%= class_name %>, be sure to
31
+ # adjust the attributes here as well.
32
+ let(:valid_attributes) {
33
+ skip("Add a hash of attributes valid for your model")
34
+ }
35
+
36
+ let(:invalid_attributes) {
37
+ skip("Add a hash of attributes invalid for your model")
38
+ }
39
+
40
+ # This should return the minimal set of values that should be in the session
41
+ # in order to pass any filters (e.g. authentication) defined in
42
+ # <%= controller_class_name %>Controller. Be sure to keep this updated too.
43
+ let(:valid_session) { {} }
44
+
45
+ <% unless options[:singleton] -%>
46
+ describe "GET #index" do
47
+ it "returns a success response" do
48
+ <%= file_name %> = <%= class_name %>.create! valid_attributes
49
+ get :index, params: {}, session: valid_session
50
+ expect(response).to be_successful
51
+ end
52
+ end
53
+
54
+ <% end -%>
55
+ describe "GET #show" do
56
+ it "returns a success response" do
57
+ <%= file_name %> = <%= class_name %>.create! valid_attributes
58
+ get :show, params: {id: <%= file_name %>.to_param}, session: valid_session
59
+ expect(response).to be_successful
60
+ end
61
+ end
62
+
63
+ describe "POST #create" do
64
+ context "with valid params" do
65
+ it "creates a new <%= class_name %>" do
66
+ expect {
67
+ post :create, params: {<%= singular_table_name %>: valid_attributes}, session: valid_session
68
+ }.to change(<%= class_name %>, :count).by(1)
69
+ end
70
+
71
+ it "renders a JSON response with the new <%= singular_table_name %>" do
72
+ post :create, params: {<%= singular_table_name %>: valid_attributes}, session: valid_session
73
+ expect(response).to have_http_status(:created)
74
+ expect(response.content_type).to eq('application/json')
75
+ expect(response.location).to eq(<%= singular_table_name %>_url(<%= class_name %>.last))
76
+ end
77
+ end
78
+
79
+ context "with invalid params" do
80
+ it "renders a JSON response with errors for the new <%= singular_table_name %>" do
81
+ post :create, params: {<%= singular_table_name %>: invalid_attributes}, session: valid_session
82
+ expect(response).to have_http_status(:unprocessable_entity)
83
+ expect(response.content_type).to eq('application/json')
84
+ end
85
+ end
86
+ end
87
+
88
+ describe "PUT #update" do
89
+ context "with valid params" do
90
+ let(:new_attributes) {
91
+ skip("Add a hash of attributes valid for your model")
92
+ }
93
+
94
+ it "updates the requested <%= singular_table_name %>" do
95
+ <%= file_name %> = <%= class_name %>.create! valid_attributes
96
+ put :update, params: {id: <%= file_name %>.to_param, <%= singular_table_name %>: new_attributes}, session: valid_session
97
+ <%= file_name %>.reload
98
+ skip("Add assertions for updated state")
99
+ end
100
+
101
+ it "renders a JSON response with the <%= singular_table_name %>" do
102
+ <%= file_name %> = <%= class_name %>.create! valid_attributes
103
+ put :update, params: {id: <%= file_name %>.to_param, <%= singular_table_name %>: new_attributes}, session: valid_session
104
+ expect(response).to have_http_status(:ok)
105
+ expect(response.content_type).to eq('application/json')
106
+ end
107
+ end
108
+
109
+ context "with invalid params" do
110
+ it "renders a JSON response with errors for the <%= singular_table_name %>" do
111
+ <%= file_name %> = <%= class_name %>.create! valid_attributes
112
+ put :update, params: {id: <%= file_name %>.to_param, <%= singular_table_name %>: invalid_attributes}, session: valid_session
113
+ expect(response).to have_http_status(:unprocessable_entity)
114
+ expect(response.content_type).to eq('application/json')
115
+ end
116
+ end
117
+ end
118
+
119
+ describe "DELETE #destroy" do
120
+ it "destroys the requested <%= singular_table_name %>" do
121
+ <%= file_name %> = <%= class_name %>.create! valid_attributes
122
+ expect {
123
+ delete :destroy, params: {id: <%= file_name %>.to_param}, session: valid_session
124
+ }.to change(<%= class_name %>, :count).by(-1)
125
+ end
126
+ end
127
+
128
+ end
129
+ <% end -%>