Skip to content

Commit 964caff

Browse files
authored
Merge pull request #1710 from rspec/fix-http-method-arg-error-on-older-rails
Use keyword args for HTTP methods in controller specs only on Rails 5
2 parents 1b37ac6 + bb12f85 commit 964caff

File tree

4 files changed

+70
-17
lines changed

4 files changed

+70
-17
lines changed

Changelog.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,11 @@ Enhancements:
55

66
* Add compatibility for Rails 5.1. (Sam Phippen, Yuichiro Kaneko, #1790)
77

8+
Bug Fixes:
9+
10+
* Fix scaffold generator so that it does not generate broken controller specs
11+
on Rails 3.x and 4.x. (Yuji Nakayama, #1710)
12+
813
### 3.6.0.beta2 / 2016-12-12
914
[Full Changelog](http://github.com/rspec/rspec-rails/compare/v3.6.0.beta1...v3.6.0.beta2)
1015

example_app_generator/generate_stuff.rb

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -134,4 +134,9 @@ def using_source_path(path)
134134
'config.warnings = false'
135135
gsub_file '.rspec', '--warnings', ''
136136

137+
# Remove skips so we can test controller specs work
138+
gsub_file 'spec/controllers/gadgets_controller_spec.rb',
139+
'skip("Add a hash of attributes valid for your model")',
140+
'{}'
141+
137142
final_tasks

example_app_generator/no_active_record/app/models/in_memory/model.rb

Lines changed: 48 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,18 @@ def count
1515
alias_method :size, :count
1616
alias_method :length, :count
1717

18+
def last
19+
all.last
20+
end
21+
22+
def find(id)
23+
id = id.to_i
24+
all.find { |record| record.id == id } || raise
25+
end
26+
1827
def create!(attributes = {})
19-
with_id = { :id => next_id, :persisted => true }
20-
all << record = new(with_id.merge(attributes))
28+
record = new(attributes)
29+
record.save
2130
record
2231
end
2332

@@ -38,16 +47,50 @@ class Model
3847
include ::ActiveModel::Validations
3948

4049
def initialize(attributes = {})
41-
attributes.each do |name, value|
42-
send("#{name}=", value)
43-
end
50+
assign_attributes(attributes)
4451
end
4552
end
4653

4754
attr_accessor :id, :persisted
4855

4956
alias_method :persisted?, :persisted
5057

58+
def update(attributes)
59+
assign_attributes(attributes)
60+
save
61+
end
62+
63+
alias_method :update_attributes, :update
64+
65+
def assign_attributes(attributes)
66+
attributes.each do |name, value|
67+
__send__("#{name}=", value)
68+
end
69+
end
70+
71+
def save(*)
72+
self.id = self.class.next_id
73+
self.class.all << self
74+
true
75+
end
76+
77+
def destroy
78+
self.class.all.delete(self)
79+
true
80+
end
81+
82+
def reload(*)
83+
self
84+
end
85+
86+
def ==(other)
87+
other.is_a?(self.class) && id == other.id
88+
end
89+
90+
def persisted?
91+
!id.nil?
92+
end
93+
5194
def new_record?
5295
!persisted?
5396
end

lib/generators/rspec/scaffold/templates/controller_spec.rb

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@
4646
describe "GET #index" do
4747
it "returns a success response" do
4848
<%= file_name %> = <%= class_name %>.create! valid_attributes
49-
<% if RUBY_VERSION < '1.9.3' -%>
49+
<% if Rails::VERSION::STRING < '5.0' -%>
5050
get :index, {}, valid_session
5151
<% else -%>
5252
get :index, params: {}, session: valid_session
@@ -59,7 +59,7 @@
5959
describe "GET #show" do
6060
it "returns a success response" do
6161
<%= file_name %> = <%= class_name %>.create! valid_attributes
62-
<% if RUBY_VERSION < '1.9.3' -%>
62+
<% if Rails::VERSION::STRING < '5.0' -%>
6363
get :show, {:id => <%= file_name %>.to_param}, valid_session
6464
<% else -%>
6565
get :show, params: {id: <%= file_name %>.to_param}, session: valid_session
@@ -70,7 +70,7 @@
7070
7171
describe "GET #new" do
7272
it "returns a success response" do
73-
<% if RUBY_VERSION < '1.9.3' -%>
73+
<% if Rails::VERSION::STRING < '5.0' -%>
7474
get :new, {}, valid_session
7575
<% else -%>
7676
get :new, params: {}, session: valid_session
@@ -82,7 +82,7 @@
8282
describe "GET #edit" do
8383
it "returns a success response" do
8484
<%= file_name %> = <%= class_name %>.create! valid_attributes
85-
<% if RUBY_VERSION < '1.9.3' -%>
85+
<% if Rails::VERSION::STRING < '5.0' -%>
8686
get :edit, {:id => <%= file_name %>.to_param}, valid_session
8787
<% else -%>
8888
get :edit, params: {id: <%= file_name %>.to_param}, session: valid_session
@@ -95,7 +95,7 @@
9595
context "with valid params" do
9696
it "creates a new <%= class_name %>" do
9797
expect {
98-
<% if RUBY_VERSION < '1.9.3' -%>
98+
<% if Rails::VERSION::STRING < '5.0' -%>
9999
post :create, {:<%= ns_file_name %> => valid_attributes}, valid_session
100100
<% else -%>
101101
post :create, params: {<%= ns_file_name %>: valid_attributes}, session: valid_session
@@ -104,7 +104,7 @@
104104
end
105105
106106
it "redirects to the created <%= ns_file_name %>" do
107-
<% if RUBY_VERSION < '1.9.3' -%>
107+
<% if Rails::VERSION::STRING < '5.0' -%>
108108
post :create, {:<%= ns_file_name %> => valid_attributes}, valid_session
109109
<% else -%>
110110
post :create, params: {<%= ns_file_name %>: valid_attributes}, session: valid_session
@@ -115,7 +115,7 @@
115115
116116
context "with invalid params" do
117117
it "returns a success response (i.e. to display the 'new' template)" do
118-
<% if RUBY_VERSION < '1.9.3' -%>
118+
<% if Rails::VERSION::STRING < '5.0' -%>
119119
post :create, {:<%= ns_file_name %> => invalid_attributes}, valid_session
120120
<% else -%>
121121
post :create, params: {<%= ns_file_name %>: invalid_attributes}, session: valid_session
@@ -133,7 +133,7 @@
133133
134134
it "updates the requested <%= ns_file_name %>" do
135135
<%= file_name %> = <%= class_name %>.create! valid_attributes
136-
<% if RUBY_VERSION < '1.9.3' -%>
136+
<% if Rails::VERSION::STRING < '5.0' -%>
137137
put :update, {:id => <%= file_name %>.to_param, :<%= ns_file_name %> => new_attributes}, valid_session
138138
<% else -%>
139139
put :update, params: {id: <%= file_name %>.to_param, <%= ns_file_name %>: new_attributes}, session: valid_session
@@ -144,7 +144,7 @@
144144
145145
it "redirects to the <%= ns_file_name %>" do
146146
<%= file_name %> = <%= class_name %>.create! valid_attributes
147-
<% if RUBY_VERSION < '1.9.3' -%>
147+
<% if Rails::VERSION::STRING < '5.0' -%>
148148
put :update, {:id => <%= file_name %>.to_param, :<%= ns_file_name %> => valid_attributes}, valid_session
149149
<% else -%>
150150
put :update, params: {id: <%= file_name %>.to_param, <%= ns_file_name %>: valid_attributes}, session: valid_session
@@ -156,7 +156,7 @@
156156
context "with invalid params" do
157157
it "returns a success response (i.e. to display the 'edit' template)" do
158158
<%= file_name %> = <%= class_name %>.create! valid_attributes
159-
<% if RUBY_VERSION < '1.9.3' -%>
159+
<% if Rails::VERSION::STRING < '5.0' -%>
160160
put :update, {:id => <%= file_name %>.to_param, :<%= ns_file_name %> => invalid_attributes}, valid_session
161161
<% else -%>
162162
put :update, params: {id: <%= file_name %>.to_param, <%= ns_file_name %>: invalid_attributes}, session: valid_session
@@ -170,7 +170,7 @@
170170
it "destroys the requested <%= ns_file_name %>" do
171171
<%= file_name %> = <%= class_name %>.create! valid_attributes
172172
expect {
173-
<% if RUBY_VERSION < '1.9.3' -%>
173+
<% if Rails::VERSION::STRING < '5.0' -%>
174174
delete :destroy, {:id => <%= file_name %>.to_param}, valid_session
175175
<% else -%>
176176
delete :destroy, params: {id: <%= file_name %>.to_param}, session: valid_session
@@ -180,7 +180,7 @@
180180
181181
it "redirects to the <%= table_name %> list" do
182182
<%= file_name %> = <%= class_name %>.create! valid_attributes
183-
<% if RUBY_VERSION < '1.9.3' -%>
183+
<% if Rails::VERSION::STRING < '5.0' -%>
184184
delete :destroy, {:id => <%= file_name %>.to_param}, valid_session
185185
<% else -%>
186186
delete :destroy, params: {id: <%= file_name %>.to_param}, session: valid_session

0 commit comments

Comments
 (0)