rspec-rails 5.0.0 → 5.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 22120c08322db7d9470240c96bba31832d330976d195338eb507fad8fe2dc354
4
- data.tar.gz: e48c5b5a155a865cf7b5fd2df8697ac3a2ae8378373921a6dea505add670e2a0
3
+ metadata.gz: 9911ecc326fa2e641d1d5236121f9b93c9ee47d06c85824eb65c619e4ca81c1e
4
+ data.tar.gz: 0515b3c5ace9cd0b61ccf7824c2d026c1695e7e5ebe4f2c1c50bea64af1dc1b2
5
5
  SHA512:
6
- metadata.gz: c15dd2809fa641a6eb1c67ec9928e6ca49f8c413328f3b4e1040a82b3cb32efb68a0606a77f3bd9be8b453fe37bd77ca6878bed166c87d549e7c8c6e4d4c3519
7
- data.tar.gz: 7edcae51bcb43cbebef28d02aee76aeaf543d4df339ece8d962011e7138430ac950f55a367e71bb456e05425d86dddc30eef2d406d393d072b5317b4bc4905fa
6
+ metadata.gz: e4d76e8a54ff22a9284826050b6a1bbb09d1fb46f395d980e729051ea60ce0cd2441cc926db3d6818e7fb314d57ede64e2d42373ebd887b77a522306e4733688
7
+ data.tar.gz: decce0771196535865fb7facd775edf339f79b7463cd5c53c18ad30aca4d61db6f00c2123307709c6a89bce5aec4338f7a16ab3db1a95677997fb6e8eaae3d42
checksums.yaml.gz.sig CHANGED
Binary file
data/Changelog.md CHANGED
@@ -1,5 +1,49 @@
1
+ ### Development
2
+ [Full Changelog](https://github.com/rspec/rspec-rails/compare/v5.1.0...5-1-maintenance)
3
+
4
+ ### 5.1.0 / 2022-01-26
5
+ [Full Changelog](https://github.com/rspec/rspec-rails/compare/v5.0.3...v5.1.0)
6
+
7
+ Enhancements:
8
+
9
+ * Make the API request scaffold template more consistent and compatible with
10
+ Rails 6.1. (Naoto Hamada, #2484)
11
+ * Change the scaffold `rails_helper.rb` template to use `require_relative`.
12
+ (Jon Dufresne, #2528)
13
+
14
+ ### 5.0.3 / 2022-01-26
15
+ [Full Changelog](https://github.com/rspec/rspec-rails/compare/v5.0.2...v5.0.3)
16
+
17
+ Bug Fixes:
18
+
19
+ * Properly name params in controller and request spec templates when
20
+ using the `--model-name` parameter. (@kenzo-tanaka, #2534)
21
+ * Fix support for `have_enqueued_mail` on Ruby 3.1 with Rails 6.1.
22
+ (Fabio Napoleoni, Mikael Henriksson, Phil Pirozhkov, Jon Rowe, #2566)
23
+
24
+ ### 5.0.2 / 2021-08-14
25
+ [Full Changelog](https://github.com/rspec/rspec-rails/compare/v5.0.1...v5.0.2)
26
+
27
+ Bug Fixes:
28
+
29
+ * Prevent generated job specs from duplicating `_job` in filenames.
30
+ (Nick Flückiger, #2496)
31
+ * Fix `ActiveRecord::TestFixture#uses_transaction` by using example description
32
+ to replace example name rather than example in our monkey patched
33
+ `run_in_transaction?` method. (Stan Lo, #2495)
34
+ * Prevent keyword arguments being lost when methods are invoked dynamically
35
+ in controller specs. (Josh Cheek, #2509, #2514)
36
+
37
+ ### 5.0.1 / 2021-03-18
38
+ [Full Changelog](https://github.com/rspec/rspec-rails/compare/v5.0.0...v5.0.1)
39
+
40
+ Bug Fixes:
41
+
42
+ * Limit multibyte example descriptions when used in system tests for #method_name
43
+ which ends up as screenshot names etc. (@y-yagi, #2405, #2487)
44
+
1
45
  ### 5.0.0 / 2021-03-09
2
- [Full Changelog](https://github.com/rspec/rspec-rails/compare/v4.1.1...main)
46
+ [Full Changelog](https://github.com/rspec/rspec-rails/compare/v4.1.1...v5.0.0)
3
47
 
4
48
  Enhancements:
5
49
 
@@ -82,7 +126,7 @@ Enhancements:
82
126
  generating a controller (Luka Lüdicke, #2222)
83
127
  * Allow `ActiveJob` matchers `#on_queue` modifier to take symbolic queue names. (Nils Sommer, #2283)
84
128
  * The scaffold generator now generates request specs in preference to controller specs.
85
- (Luka Lüdicke, #2288)
129
+ (Luka Lüdicke, #2288)
86
130
  * Add configuration option to disable ActiveRecord. (Jon Rowe, Phil Pirozhkov, Hermann Mayer, #2266)
87
131
  * Set `ActionDispatch::SystemTesting::Server.silence_puma = true` when running system specs.
88
132
  (ta1kt0me, Benoit Tigeot, #2289)
data/README.md CHANGED
@@ -8,8 +8,11 @@ They’re also specifications (or _specs,_ for short):
8
8
  detailed explanations of how the application is supposed to behave,
9
9
  expressed in plain English.
10
10
 
11
- Use **[`rspec-rails` 3.x][]** for Rails earlier than 5.0.
12
- Use **[`rspec-rails` 1.x][]** for Rails 2.x.
11
+ According to [RSpec Rails new versioning strategy][] use:
12
+ * **[`rspec-rails` 5.x][]** for Rails 6.x.
13
+ * **[`rspec-rails` 4.x][]** for Rails from 5.x or 6.x.
14
+ * **[`rspec-rails` 3.x][]** for Rails earlier than 5.0.
15
+ * **[`rspec-rails` 1.x][]** for Rails 2.x.
13
16
 
14
17
  [Build Status]: https://secure.travis-ci.org/rspec/rspec-rails.svg?branch=main
15
18
  [travis-ci]: https://travis-ci.org/rspec/rspec-rails
@@ -21,19 +24,22 @@ Use **[`rspec-rails` 1.x][]** for Rails 2.x.
21
24
  [Ruby on Rails]: https://rubyonrails.org/
22
25
  [`rspec-rails` 1.x]: https://github.com/dchelimsky/rspec-rails
23
26
  [`rspec-rails` 3.x]: https://github.com/rspec/rspec-rails/tree/3-9-maintenance
27
+ [`rspec-rails` 4.x]: https://github.com/rspec/rspec-rails/tree/4-1-maintenance
28
+ [`rspec-rails` 5.x]: https://github.com/rspec/rspec-rails/tree/5-0-maintenance
29
+ [RSpec Rails new versioning strategy]: https://github.com/rspec/rspec-rails/blob/main/rfcs/versioning-strategy.md
24
30
 
25
31
  ## Installation
26
32
 
27
33
  **IMPORTANT** This README / branch refers to the current development build.
28
- See the [`4-1-maintenance` branch on Github](https://github.com/rspec/rspec-rails/tree/4-0-maintenance) if you want or require the latest stable release.
34
+ See the [`5-0-maintenance` branch on Github](https://github.com/rspec/rspec-rails/tree/5-0-maintenance) if you want or require the latest stable release.
29
35
 
30
36
  1. Add `rspec-rails` to **both** the `:development` and `:test` groups
31
37
  of your app’s `Gemfile`:
32
38
 
33
39
  ```ruby
34
- # Run against the latest stable release
40
+ # Run against this stable release
35
41
  group :development, :test do
36
- gem 'rspec-rails', '~> 4.1.0'
42
+ gem 'rspec-rails', '~> 5.0.0'
37
43
  end
38
44
 
39
45
  # Or, run against the main branch
@@ -227,18 +233,18 @@ Each one inherits from one of Rails’ built-in `TestCase` classes,
227
233
  meaning the helper methods provided by default in Rails tests
228
234
  are available in RSpec, as well.
229
235
 
230
- | Spec type | Corresponding Rails test class |
231
- | -------------- | -------------------------------- |
232
- | [model][] | |
233
- | [controller][] | [`ActionController::TestCase`][] |
234
- | [mailer][] | `ActionMailer::TestCase` |
235
- | [job][] | |
236
- | [view][] | `ActionView::TestCase` |
237
- | [routing][] | |
238
- | [helper][] | `ActionView::TestCase` |
239
- | [request][] | [`ActionDispatch::IntegrationTest`][] |
240
- | [feature][] | |
241
- | [system][] | [`ActionDispatch::SystemTestCase`][] |
236
+ | Spec type | Corresponding Rails test class |
237
+ | -------------- | -------------------------------- |
238
+ | [model][] | |
239
+ | [controller][] | [`ActionController::TestCase`][] |
240
+ | [mailer][] | `ActionMailer::TestCase` |
241
+ | [job][] | |
242
+ | [view][] | `ActionView::TestCase` |
243
+ | [routing][] | |
244
+ | [helper][] | `ActionView::TestCase` |
245
+ | [request][] | [`ActionDispatch::IntegrationTest`][] |
246
+ | [feature][] | |
247
+ | [system][] | [`ActionDispatch::SystemTestCase`][] |
242
248
 
243
249
  Follow the links above to see examples of each spec type,
244
250
  or for official Rails API documentation on the given `TestCase` class.
@@ -1,7 +1,7 @@
1
1
  # This file is copied to spec/ when you run 'rails generate rspec:install'
2
2
  require 'spec_helper'
3
3
  ENV['RAILS_ENV'] ||= 'test'
4
- require File.expand_path('../config/environment', __dir__)
4
+ require_relative '../config/environment'
5
5
  # Prevent database truncation if the environment is production
6
6
  abort("The Rails environment is running in production mode!") if Rails.env.production?
7
7
  require 'rspec/rails'
@@ -5,7 +5,8 @@ module Rspec
5
5
  # @private
6
6
  class JobGenerator < Base
7
7
  def create_job_spec
8
- template 'job_spec.rb.erb', File.join('spec/jobs', class_path, "#{file_name}_job_spec.rb")
8
+ file_suffix = file_name.end_with?('job') ? 'spec.rb' : 'job_spec.rb'
9
+ template 'job_spec.rb.erb', File.join('spec/jobs', class_path, [file_name, file_suffix].join('_'))
9
10
  end
10
11
  end
11
12
  end
@@ -1,7 +1,7 @@
1
1
  require 'rails_helper'
2
2
 
3
3
  <% module_namespacing do -%>
4
- RSpec.describe <%= class_name %>Job, <%= type_metatag(:job) %> do
4
+ RSpec.describe <%= class_name %><%= "Job" unless class_name.end_with?("Job")%>, <%= type_metatag(:job) %> do
5
5
  pending "add some examples to (or delete) #{__FILE__}"
6
6
  end
7
7
  <% end -%>
@@ -127,6 +127,10 @@ module Rspec
127
127
  def banner
128
128
  self.class.banner
129
129
  end
130
+
131
+ def show_helper(resource_name = file_name)
132
+ "#{singular_route_name}_url(#{resource_name})"
133
+ end
130
134
  end
131
135
  end
132
136
  end
@@ -64,21 +64,21 @@ RSpec.describe <%= controller_class_name %>Controller, <%= type_metatag(:control
64
64
  context "with valid params" do
65
65
  it "creates a new <%= class_name %>" do
66
66
  expect {
67
- post :create, params: {<%= ns_file_name %>: valid_attributes}, session: valid_session
67
+ post :create, params: {<%= singular_table_name %>: valid_attributes}, session: valid_session
68
68
  }.to change(<%= class_name %>, :count).by(1)
69
69
  end
70
70
 
71
- it "renders a JSON response with the new <%= ns_file_name %>" do
72
- post :create, params: {<%= ns_file_name %>: valid_attributes}, session: valid_session
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
73
  expect(response).to have_http_status(:created)
74
74
  expect(response.content_type).to eq('application/json')
75
- expect(response.location).to eq(<%= ns_file_name %>_url(<%= class_name %>.last))
75
+ expect(response.location).to eq(<%= singular_table_name %>_url(<%= class_name %>.last))
76
76
  end
77
77
  end
78
78
 
79
79
  context "with invalid params" do
80
- it "renders a JSON response with errors for the new <%= ns_file_name %>" do
81
- post :create, params: {<%= ns_file_name %>: invalid_attributes}, session: valid_session
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
82
  expect(response).to have_http_status(:unprocessable_entity)
83
83
  expect(response.content_type).to eq('application/json')
84
84
  end
@@ -91,25 +91,25 @@ RSpec.describe <%= controller_class_name %>Controller, <%= type_metatag(:control
91
91
  skip("Add a hash of attributes valid for your model")
92
92
  }
93
93
 
94
- it "updates the requested <%= ns_file_name %>" do
94
+ it "updates the requested <%= singular_table_name %>" do
95
95
  <%= file_name %> = <%= class_name %>.create! valid_attributes
96
- put :update, params: {id: <%= file_name %>.to_param, <%= ns_file_name %>: new_attributes}, session: valid_session
96
+ put :update, params: {id: <%= file_name %>.to_param, <%= singular_table_name %>: new_attributes}, session: valid_session
97
97
  <%= file_name %>.reload
98
98
  skip("Add assertions for updated state")
99
99
  end
100
100
 
101
- it "renders a JSON response with the <%= ns_file_name %>" do
101
+ it "renders a JSON response with the <%= singular_table_name %>" do
102
102
  <%= file_name %> = <%= class_name %>.create! valid_attributes
103
- put :update, params: {id: <%= file_name %>.to_param, <%= ns_file_name %>: valid_attributes}, session: valid_session
103
+ put :update, params: {id: <%= file_name %>.to_param, <%= singular_table_name %>: valid_attributes}, session: valid_session
104
104
  expect(response).to have_http_status(:ok)
105
105
  expect(response.content_type).to eq('application/json')
106
106
  end
107
107
  end
108
108
 
109
109
  context "with invalid params" do
110
- it "renders a JSON response with errors for the <%= ns_file_name %>" do
110
+ it "renders a JSON response with errors for the <%= singular_table_name %>" do
111
111
  <%= file_name %> = <%= class_name %>.create! valid_attributes
112
- put :update, params: {id: <%= file_name %>.to_param, <%= ns_file_name %>: invalid_attributes}, session: valid_session
112
+ put :update, params: {id: <%= file_name %>.to_param, <%= singular_table_name %>: invalid_attributes}, session: valid_session
113
113
  expect(response).to have_http_status(:unprocessable_entity)
114
114
  expect(response.content_type).to eq('application/json')
115
115
  end
@@ -117,7 +117,7 @@ RSpec.describe <%= controller_class_name %>Controller, <%= type_metatag(:control
117
117
  end
118
118
 
119
119
  describe "DELETE #destroy" do
120
- it "destroys the requested <%= ns_file_name %>" do
120
+ it "destroys the requested <%= singular_table_name %>" do
121
121
  <%= file_name %> = <%= class_name %>.create! valid_attributes
122
122
  expect {
123
123
  delete :destroy, params: {id: <%= file_name %>.to_param}, session: valid_session
@@ -46,7 +46,7 @@ RSpec.describe "/<%= name.underscore.pluralize %>", <%= type_metatag(:request) %
46
46
  describe "GET /show" do
47
47
  it "renders a successful response" do
48
48
  <%= file_name %> = <%= class_name %>.create! valid_attributes
49
- get <%= show_helper.tr('@', '') %>, as: :json
49
+ get <%= show_helper %>, as: :json
50
50
  expect(response).to be_successful
51
51
  end
52
52
  end
@@ -56,13 +56,13 @@ RSpec.describe "/<%= name.underscore.pluralize %>", <%= type_metatag(:request) %
56
56
  it "creates a new <%= class_name %>" do
57
57
  expect {
58
58
  post <%= index_helper %>_url,
59
- params: { <%= ns_file_name %>: valid_attributes }, headers: valid_headers, as: :json
59
+ params: { <%= singular_table_name %>: valid_attributes }, headers: valid_headers, as: :json
60
60
  }.to change(<%= class_name %>, :count).by(1)
61
61
  end
62
62
 
63
- it "renders a JSON response with the new <%= ns_file_name %>" do
63
+ it "renders a JSON response with the new <%= singular_table_name %>" do
64
64
  post <%= index_helper %>_url,
65
- params: { <%= ns_file_name %>: valid_attributes }, headers: valid_headers, as: :json
65
+ params: { <%= singular_table_name %>: valid_attributes }, headers: valid_headers, as: :json
66
66
  expect(response).to have_http_status(:created)
67
67
  expect(response.content_type).to match(a_string_including("application/json"))
68
68
  end
@@ -72,15 +72,15 @@ RSpec.describe "/<%= name.underscore.pluralize %>", <%= type_metatag(:request) %
72
72
  it "does not create a new <%= class_name %>" do
73
73
  expect {
74
74
  post <%= index_helper %>_url,
75
- params: { <%= ns_file_name %>: invalid_attributes }, as: :json
75
+ params: { <%= singular_table_name %>: invalid_attributes }, as: :json
76
76
  }.to change(<%= class_name %>, :count).by(0)
77
77
  end
78
78
 
79
- it "renders a JSON response with errors for the new <%= ns_file_name %>" do
79
+ it "renders a JSON response with errors for the new <%= singular_table_name %>" do
80
80
  post <%= index_helper %>_url,
81
- params: { <%= ns_file_name %>: invalid_attributes }, headers: valid_headers, as: :json
81
+ params: { <%= singular_table_name %>: invalid_attributes }, headers: valid_headers, as: :json
82
82
  expect(response).to have_http_status(:unprocessable_entity)
83
- expect(response.content_type).to eq("application/json")
83
+ expect(response.content_type).to match(a_string_including("application/json"))
84
84
  end
85
85
  end
86
86
  end
@@ -91,17 +91,17 @@ RSpec.describe "/<%= name.underscore.pluralize %>", <%= type_metatag(:request) %
91
91
  skip("Add a hash of attributes valid for your model")
92
92
  }
93
93
 
94
- it "updates the requested <%= ns_file_name %>" do
94
+ it "updates the requested <%= singular_table_name %>" do
95
95
  <%= file_name %> = <%= class_name %>.create! valid_attributes
96
- patch <%= show_helper.tr('@', '') %>,
96
+ patch <%= show_helper %>,
97
97
  params: { <%= singular_table_name %>: new_attributes }, headers: valid_headers, as: :json
98
98
  <%= file_name %>.reload
99
99
  skip("Add assertions for updated state")
100
100
  end
101
101
 
102
- it "renders a JSON response with the <%= ns_file_name %>" do
102
+ it "renders a JSON response with the <%= singular_table_name %>" do
103
103
  <%= file_name %> = <%= class_name %>.create! valid_attributes
104
- patch <%= show_helper.tr('@', '') %>,
104
+ patch <%= show_helper %>,
105
105
  params: { <%= singular_table_name %>: new_attributes }, headers: valid_headers, as: :json
106
106
  expect(response).to have_http_status(:ok)
107
107
  expect(response.content_type).to match(a_string_including("application/json"))
@@ -109,21 +109,21 @@ RSpec.describe "/<%= name.underscore.pluralize %>", <%= type_metatag(:request) %
109
109
  end
110
110
 
111
111
  context "with invalid parameters" do
112
- it "renders a JSON response with errors for the <%= ns_file_name %>" do
112
+ it "renders a JSON response with errors for the <%= singular_table_name %>" do
113
113
  <%= file_name %> = <%= class_name %>.create! valid_attributes
114
- patch <%= show_helper.tr('@', '') %>,
114
+ patch <%= show_helper %>,
115
115
  params: { <%= singular_table_name %>: invalid_attributes }, headers: valid_headers, as: :json
116
116
  expect(response).to have_http_status(:unprocessable_entity)
117
- expect(response.content_type).to eq("application/json")
117
+ expect(response.content_type).to match(a_string_including("application/json"))
118
118
  end
119
119
  end
120
120
  end
121
121
 
122
122
  describe "DELETE /destroy" do
123
- it "destroys the requested <%= ns_file_name %>" do
123
+ it "destroys the requested <%= singular_table_name %>" do
124
124
  <%= file_name %> = <%= class_name %>.create! valid_attributes
125
125
  expect {
126
- delete <%= show_helper.tr('@', '') %>, headers: valid_headers, as: :json
126
+ delete <%= show_helper %>, headers: valid_headers, as: :json
127
127
  }.to change(<%= class_name %>, :count).by(-1)
128
128
  end
129
129
  end
@@ -79,19 +79,19 @@ RSpec.describe <%= controller_class_name %>Controller, <%= type_metatag(:control
79
79
  context "with valid params" do
80
80
  it "creates a new <%= class_name %>" do
81
81
  expect {
82
- post :create, params: {<%= ns_file_name %>: valid_attributes}, session: valid_session
82
+ post :create, params: {<%= singular_table_name %>: valid_attributes}, session: valid_session
83
83
  }.to change(<%= class_name %>, :count).by(1)
84
84
  end
85
85
 
86
- it "redirects to the created <%= ns_file_name %>" do
87
- post :create, params: {<%= ns_file_name %>: valid_attributes}, session: valid_session
86
+ it "redirects to the created <%= singular_table_name %>" do
87
+ post :create, params: {<%= singular_table_name %>: valid_attributes}, session: valid_session
88
88
  expect(response).to redirect_to(<%= class_name %>.last)
89
89
  end
90
90
  end
91
91
 
92
92
  context "with invalid params" do
93
93
  it "returns a success response (i.e. to display the 'new' template)" do
94
- post :create, params: {<%= ns_file_name %>: invalid_attributes}, session: valid_session
94
+ post :create, params: {<%= singular_table_name %>: invalid_attributes}, session: valid_session
95
95
  expect(response).to be_successful
96
96
  end
97
97
  end
@@ -103,16 +103,16 @@ RSpec.describe <%= controller_class_name %>Controller, <%= type_metatag(:control
103
103
  skip("Add a hash of attributes valid for your model")
104
104
  }
105
105
 
106
- it "updates the requested <%= ns_file_name %>" do
106
+ it "updates the requested <%= singular_table_name %>" do
107
107
  <%= file_name %> = <%= class_name %>.create! valid_attributes
108
- put :update, params: {id: <%= file_name %>.to_param, <%= ns_file_name %>: new_attributes}, session: valid_session
108
+ put :update, params: {id: <%= file_name %>.to_param, <%= singular_table_name %>: new_attributes}, session: valid_session
109
109
  <%= file_name %>.reload
110
110
  skip("Add assertions for updated state")
111
111
  end
112
112
 
113
- it "redirects to the <%= ns_file_name %>" do
113
+ it "redirects to the <%= singular_table_name %>" do
114
114
  <%= file_name %> = <%= class_name %>.create! valid_attributes
115
- put :update, params: {id: <%= file_name %>.to_param, <%= ns_file_name %>: valid_attributes}, session: valid_session
115
+ put :update, params: {id: <%= file_name %>.to_param, <%= singular_table_name %>: valid_attributes}, session: valid_session
116
116
  expect(response).to redirect_to(<%= file_name %>)
117
117
  end
118
118
  end
@@ -120,14 +120,14 @@ RSpec.describe <%= controller_class_name %>Controller, <%= type_metatag(:control
120
120
  context "with invalid params" do
121
121
  it "returns a success response (i.e. to display the 'edit' template)" do
122
122
  <%= file_name %> = <%= class_name %>.create! valid_attributes
123
- put :update, params: {id: <%= file_name %>.to_param, <%= ns_file_name %>: invalid_attributes}, session: valid_session
123
+ put :update, params: {id: <%= file_name %>.to_param, <%= singular_table_name %>: invalid_attributes}, session: valid_session
124
124
  expect(response).to be_successful
125
125
  end
126
126
  end
127
127
  end
128
128
 
129
129
  describe "DELETE #destroy" do
130
- it "destroys the requested <%= ns_file_name %>" do
130
+ it "destroys the requested <%= singular_table_name %>" do
131
131
  <%= file_name %> = <%= class_name %>.create! valid_attributes
132
132
  expect {
133
133
  delete :destroy, params: {id: <%= file_name %>.to_param}, session: valid_session
@@ -1,4 +1,4 @@
1
- require 'rails_helper'
1
+ require 'rails_helper'
2
2
 
3
3
  # This spec was generated by rspec-rails when you ran the scaffold generator.
4
4
  # It demonstrates how one might use RSpec to test the controller code that
@@ -18,6 +18,7 @@ RSpec.describe "/<%= name.underscore.pluralize %>", <%= type_metatag(:request) %
18
18
  include Engine.routes.url_helpers
19
19
  <% end -%>
20
20
 
21
+ # This should return the minimal set of attributes required to create a valid
21
22
  # <%= class_name %>. As you add validations to <%= class_name %>, be sure to
22
23
  # adjust the attributes here as well.
23
24
  let(:valid_attributes) {
@@ -41,7 +42,7 @@ RSpec.describe "/<%= name.underscore.pluralize %>", <%= type_metatag(:request) %
41
42
  describe "GET /show" do
42
43
  it "renders a successful response" do
43
44
  <%= file_name %> = <%= class_name %>.create! valid_attributes
44
- get <%= show_helper.tr('@', '') %>
45
+ get <%= show_helper %>
45
46
  expect(response).to be_successful
46
47
  end
47
48
  end
@@ -54,9 +55,9 @@ RSpec.describe "/<%= name.underscore.pluralize %>", <%= type_metatag(:request) %
54
55
  end
55
56
 
56
57
  describe "GET /edit" do
57
- it "render a successful response" do
58
+ it "renders a successful response" do
58
59
  <%= file_name %> = <%= class_name %>.create! valid_attributes
59
- get <%= edit_helper.tr('@','') %>
60
+ get <%= edit_helper %>
60
61
  expect(response).to be_successful
61
62
  end
62
63
  end
@@ -65,25 +66,25 @@ RSpec.describe "/<%= name.underscore.pluralize %>", <%= type_metatag(:request) %
65
66
  context "with valid parameters" do
66
67
  it "creates a new <%= class_name %>" do
67
68
  expect {
68
- post <%= index_helper %>_url, params: { <%= ns_file_name %>: valid_attributes }
69
+ post <%= index_helper %>_url, params: { <%= singular_table_name %>: valid_attributes }
69
70
  }.to change(<%= class_name %>, :count).by(1)
70
71
  end
71
72
 
72
- it "redirects to the created <%= ns_file_name %>" do
73
- post <%= index_helper %>_url, params: { <%= ns_file_name %>: valid_attributes }
74
- expect(response).to redirect_to(<%= show_helper.gsub("\@#{file_name}", class_name+".last") %>)
73
+ it "redirects to the created <%= singular_table_name %>" do
74
+ post <%= index_helper %>_url, params: { <%= singular_table_name %>: valid_attributes }
75
+ expect(response).to redirect_to(<%= show_helper(class_name+".last") %>)
75
76
  end
76
77
  end
77
78
 
78
79
  context "with invalid parameters" do
79
80
  it "does not create a new <%= class_name %>" do
80
81
  expect {
81
- post <%= index_helper %>_url, params: { <%= ns_file_name %>: invalid_attributes }
82
+ post <%= index_helper %>_url, params: { <%= singular_table_name %>: invalid_attributes }
82
83
  }.to change(<%= class_name %>, :count).by(0)
83
84
  end
84
85
 
85
86
  it "renders a successful response (i.e. to display the 'new' template)" do
86
- post <%= index_helper %>_url, params: { <%= ns_file_name %>: invalid_attributes }
87
+ post <%= index_helper %>_url, params: { <%= singular_table_name %>: invalid_attributes }
87
88
  expect(response).to be_successful
88
89
  end
89
90
  end
@@ -95,16 +96,16 @@ RSpec.describe "/<%= name.underscore.pluralize %>", <%= type_metatag(:request) %
95
96
  skip("Add a hash of attributes valid for your model")
96
97
  }
97
98
 
98
- it "updates the requested <%= ns_file_name %>" do
99
+ it "updates the requested <%= singular_table_name %>" do
99
100
  <%= file_name %> = <%= class_name %>.create! valid_attributes
100
- patch <%= show_helper.tr('@', '') %>, params: { <%= singular_table_name %>: new_attributes }
101
+ patch <%= show_helper %>, params: { <%= singular_table_name %>: new_attributes }
101
102
  <%= file_name %>.reload
102
103
  skip("Add assertions for updated state")
103
104
  end
104
105
 
105
- it "redirects to the <%= ns_file_name %>" do
106
+ it "redirects to the <%= singular_table_name %>" do
106
107
  <%= file_name %> = <%= class_name %>.create! valid_attributes
107
- patch <%= show_helper.tr('@', '') %>, params: { <%= singular_table_name %>: new_attributes }
108
+ patch <%= show_helper %>, params: { <%= singular_table_name %>: new_attributes }
108
109
  <%= file_name %>.reload
109
110
  expect(response).to redirect_to(<%= singular_table_name %>_url(<%= file_name %>))
110
111
  end
@@ -113,23 +114,23 @@ RSpec.describe "/<%= name.underscore.pluralize %>", <%= type_metatag(:request) %
113
114
  context "with invalid parameters" do
114
115
  it "renders a successful response (i.e. to display the 'edit' template)" do
115
116
  <%= file_name %> = <%= class_name %>.create! valid_attributes
116
- patch <%= show_helper.tr('@', '') %>, params: { <%= singular_table_name %>: invalid_attributes }
117
+ patch <%= show_helper %>, params: { <%= singular_table_name %>: invalid_attributes }
117
118
  expect(response).to be_successful
118
119
  end
119
120
  end
120
121
  end
121
122
 
122
123
  describe "DELETE /destroy" do
123
- it "destroys the requested <%= ns_file_name %>" do
124
+ it "destroys the requested <%= singular_table_name %>" do
124
125
  <%= file_name %> = <%= class_name %>.create! valid_attributes
125
126
  expect {
126
- delete <%= show_helper.tr('@', '') %>
127
+ delete <%= show_helper %>
127
128
  }.to change(<%= class_name %>, :count).by(-1)
128
129
  end
129
130
 
130
131
  it "redirects to the <%= table_name %> list" do
131
132
  <%= file_name %> = <%= class_name %>.create! valid_attributes
132
- delete <%= show_helper.tr('@', '') %>
133
+ delete <%= show_helper %>
133
134
  expect(response).to redirect_to(<%= index_helper %>_url)
134
135
  end
135
136
  end
@@ -176,6 +176,7 @@ module RSpec
176
176
  super
177
177
  end
178
178
  end
179
+ ruby2_keywords :method_missing if respond_to?(:ruby2_keywords, true)
179
180
 
180
181
  included do
181
182
  subject { controller }
@@ -41,7 +41,7 @@ module RSpec
41
41
  @method_name ||= [
42
42
  self.class.name.underscore,
43
43
  RSpec.current_example.description.underscore
44
- ].join("_").tr(CHARS_TO_TRANSLATE.join, "_")[0...200] + "_#{rand(1000)}"
44
+ ].join("_").tr(CHARS_TO_TRANSLATE.join, "_").byteslice(0...200).scrub("") + "_#{rand(1000)}"
45
45
  end
46
46
 
47
47
  # Delegates to `Rails.application`.
@@ -13,7 +13,8 @@ module RSpec
13
13
  # Monkey patched to avoid collisions with 'let(:name)' in Rails 6.1 and after
14
14
  # and let(:method_name) before Rails 6.1.
15
15
  def run_in_transaction?
16
- use_transactional_tests && !self.class.uses_transaction?(self)
16
+ current_example_name = (RSpec.current_example && RSpec.current_example.metadata[:description])
17
+ use_transactional_tests && !self.class.uses_transaction?(current_example_name)
17
18
  end
18
19
 
19
20
  included do
@@ -4,6 +4,7 @@
4
4
  require "rspec/mocks/argument_matchers"
5
5
  require "rspec/rails/matchers/active_job"
6
6
 
7
+ # rubocop: disable Metrics/ClassLength
7
8
  module RSpec
8
9
  module Rails
9
10
  module Matchers
@@ -119,9 +120,11 @@ module RSpec
119
120
  end
120
121
 
121
122
  def mail_job_message(job)
122
- mailer_method = job[:args][0..1].join('.')
123
+ job_args = deserialize_arguments(job)
124
+
125
+ mailer_method = job_args[0..1].join('.')
126
+ mailer_args = job_args[3..-1]
123
127
 
124
- mailer_args = job[:args][3..-1]
125
128
  msg_parts = []
126
129
  msg_parts << "with #{mailer_args}" if mailer_args.any?
127
130
  msg_parts << "on queue #{job[:queue]}" if job[:queue] && job[:queue] != 'mailers'
@@ -130,6 +133,30 @@ module RSpec
130
133
  "#{mailer_method} #{msg_parts.join(', ')}".strip
131
134
  end
132
135
 
136
+ # Ruby 3.1 changed how params were serialized on Rails 6.1
137
+ # so we override the active job implementation and customise it here.
138
+ def deserialize_arguments(job)
139
+ args = super
140
+
141
+ return args unless Hash === args.last
142
+
143
+ hash = args.pop
144
+
145
+ if hash.key?("_aj_ruby2_keywords")
146
+ keywords = hash["_aj_ruby2_keywords"]
147
+
148
+ original_hash = keywords.each_with_object({}) { |new_hash, keyword| new_hash[keyword.to_sym] = hash[keyword] }
149
+
150
+ args + [original_hash]
151
+ elsif hash.key?(:args) && hash.key?(:params)
152
+ args + [hash]
153
+ elsif hash.key?(:args)
154
+ args + hash[:args]
155
+ else
156
+ args + [hash]
157
+ end
158
+ end
159
+
133
160
  def legacy_mail?(job)
134
161
  job[:job] <= ActionMailer::DeliveryJob
135
162
  end
@@ -196,3 +223,4 @@ module RSpec
196
223
  end
197
224
  end
198
225
  end
226
+ # rubocop: enable Metrics/ClassLength
@@ -1,6 +1,6 @@
1
1
  # The following code inspired and modified from Rails' `assert_response`:
2
2
  #
3
- # https://github.com/rails/rails/blob/master/actionpack/lib/action_dispatch/testing/assertions/response.rb#L22-L38
3
+ # https://github.com/rails/rails/blob/main/actionpack/lib/action_dispatch/testing/assertions/response.rb#L22-L38
4
4
  #
5
5
  # Thank you to all the Rails devs who did the heavy lifting on this!
6
6
 
@@ -243,7 +243,7 @@ module RSpec
243
243
 
244
244
  # @return [Array<Symbol>] of status codes which represent a HTTP status
245
245
  # code "group"
246
- # @see https://github.com/rails/rails/blob/master/actionpack/lib/action_dispatch/testing/test_response.rb `ActionDispatch::TestResponse`
246
+ # @see https://github.com/rails/rails/blob/main/actionpack/lib/action_dispatch/testing/test_response.rb `ActionDispatch::TestResponse`
247
247
  def self.valid_statuses
248
248
  [
249
249
  :error, :success, :missing,
@@ -313,7 +313,7 @@ module RSpec
313
313
 
314
314
  # @return [String] formatting the associated code(s) for the various
315
315
  # status code "groups"
316
- # @see https://github.com/rails/rails/blob/master/actionpack/lib/action_dispatch/testing/test_response.rb `ActionDispatch::TestResponse`
316
+ # @see https://github.com/rails/rails/blob/main/actionpack/lib/action_dispatch/testing/test_response.rb `ActionDispatch::TestResponse`
317
317
  # @see https://github.com/rack/rack/blob/master/lib/rack/response.rb `Rack::Response`
318
318
  def type_codes
319
319
  # At the time of this commit the most recent version of
@@ -373,7 +373,7 @@ module RSpec
373
373
  # expect(response).to have_http_status(404)
374
374
  # expect(page).to have_http_status(:created)
375
375
  #
376
- # @see https://github.com/rails/rails/blob/master/actionpack/lib/action_dispatch/testing/test_response.rb `ActionDispatch::TestResponse`
376
+ # @see https://github.com/rails/rails/blob/main/actionpack/lib/action_dispatch/testing/test_response.rb `ActionDispatch::TestResponse`
377
377
  # @see https://github.com/rack/rack/blob/master/lib/rack/utils.rb `Rack::Utils::SYMBOL_TO_STATUS_CODE`
378
378
  def have_http_status(target)
379
379
  raise ArgumentError, "Invalid HTTP status: nil" unless target
@@ -3,7 +3,7 @@ module RSpec
3
3
  # Version information for RSpec Rails.
4
4
  module Version
5
5
  # Current version of RSpec Rails, in semantic versioning format.
6
- STRING = '5.0.0'
6
+ STRING = '5.1.0'
7
7
  end
8
8
  end
9
9
  end
data.tar.gz.sig CHANGED
Binary file
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rspec-rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 5.0.0
4
+ version: 5.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - David Chelimsky
@@ -44,7 +44,7 @@ cert_chain:
44
44
  ZsVDj6a7lH3cNqtWXZxrb2wO38qV5AkYj8SQK7Hj3/Yui9myUX3crr+PdetazSqQ
45
45
  F3MdtaDehhjC
46
46
  -----END CERTIFICATE-----
47
- date: 2021-03-09 00:00:00.000000000 Z
47
+ date: 2022-01-26 00:00:00.000000000 Z
48
48
  dependencies:
49
49
  - !ruby/object:Gem::Dependency
50
50
  name: actionpack
@@ -176,16 +176,28 @@ dependencies:
176
176
  name: cucumber
177
177
  requirement: !ruby/object:Gem::Requirement
178
178
  requirements:
179
- - - "~>"
179
+ - - ">="
180
+ - !ruby/object:Gem::Version
181
+ version: '3.2'
182
+ - - "!="
183
+ - !ruby/object:Gem::Version
184
+ version: 4.0.0
185
+ - - "<"
180
186
  - !ruby/object:Gem::Version
181
- version: 1.3.5
187
+ version: 8.0.0
182
188
  type: :development
183
189
  prerelease: false
184
190
  version_requirements: !ruby/object:Gem::Requirement
185
191
  requirements:
186
- - - "~>"
192
+ - - ">="
193
+ - !ruby/object:Gem::Version
194
+ version: '3.2'
195
+ - - "!="
196
+ - !ruby/object:Gem::Version
197
+ version: 4.0.0
198
+ - - "<"
187
199
  - !ruby/object:Gem::Version
188
- version: 1.3.5
200
+ version: 8.0.0
189
201
  description: rspec-rails is a testing framework for Rails 5+.
190
202
  email: rspec@googlegroups.com
191
203
  executables: []
@@ -296,7 +308,7 @@ licenses:
296
308
  - MIT
297
309
  metadata:
298
310
  bug_tracker_uri: https://github.com/rspec/rspec-rails/issues
299
- changelog_uri: https://github.com/rspec/rspec-rails/blob/v5.0.0/Changelog.md
311
+ changelog_uri: https://github.com/rspec/rspec-rails/blob/v5.1.0/Changelog.md
300
312
  documentation_uri: https://rspec.info/documentation/
301
313
  mailing_list_uri: https://groups.google.com/forum/#!forum/rspec
302
314
  source_code_uri: https://github.com/rspec/rspec-rails
@@ -316,7 +328,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
316
328
  - !ruby/object:Gem::Version
317
329
  version: '0'
318
330
  requirements: []
319
- rubygems_version: 3.2.4
331
+ rubygems_version: 3.3.3
320
332
  signing_key:
321
333
  specification_version: 4
322
334
  summary: RSpec for Rails
metadata.gz.sig CHANGED
Binary file