-
-
Notifications
You must be signed in to change notification settings - Fork 1k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #2288 from rspec/scaffold-request-specs
Generate request specs when scaffold generator is used
- Loading branch information
Showing
5 changed files
with
349 additions
and
18 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
131 changes: 131 additions & 0 deletions
131
lib/generators/rspec/scaffold/templates/api_request_spec.rb
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,131 @@ | ||
require 'rails_helper' | ||
|
||
# This spec was generated by rspec-rails when you ran the scaffold generator. | ||
# It demonstrates how one might use RSpec to test the controller code that | ||
# was generated by Rails when you ran the scaffold generator. | ||
# | ||
# It assumes that the implementation code is generated by the rails scaffold | ||
# generator. If you are using any extension libraries to generate different | ||
# controller code, this generated spec may or may not pass. | ||
# | ||
# It only uses APIs available in rails and/or rspec-rails. There are a number | ||
# of tools you can use to make these specs even more expressive, but we're | ||
# sticking to rails and rspec-rails APIs to keep things simple and stable. | ||
|
||
<% module_namespacing do -%> | ||
RSpec.describe "/<%= name.underscore.pluralize %>", <%= type_metatag(:request) %> do | ||
# This should return the minimal set of attributes required to create a valid | ||
# <%= class_name %>. As you add validations to <%= class_name %>, be sure to | ||
# adjust the attributes here as well. | ||
let(:valid_attributes) { | ||
skip("Add a hash of attributes valid for your model") | ||
} | ||
let(:invalid_attributes) { | ||
skip("Add a hash of attributes invalid for your model") | ||
} | ||
# This should return the minimal set of values that should be in the headers | ||
# in order to pass any filters (e.g. authentication) defined in | ||
# <%= controller_class_name %>Controller, or in your router and rack | ||
# middleware. Be sure to keep this updated too. | ||
let(:valid_headers) { | ||
{} | ||
} | ||
<% unless options[:singleton] -%> | ||
describe "GET /index" do | ||
it "renders a successful response" do | ||
<%= class_name %>.create! valid_attributes | ||
get <%= index_helper %>_url, headers: valid_headers, as: :json | ||
expect(response).to be_successful | ||
end | ||
end | ||
<% end -%> | ||
describe "GET /show" do | ||
it "renders a successful response" do | ||
<%= file_name %> = <%= class_name %>.create! valid_attributes | ||
get <%= show_helper.tr('@', '') %>, as: :json | ||
expect(response).to be_successful | ||
end | ||
end | ||
describe "POST /create" do | ||
context "with valid parameters" do | ||
it "creates a new <%= class_name %>" do | ||
expect { | ||
post <%= index_helper %>_url, | ||
params: { <%= ns_file_name %>: valid_attributes }, headers: valid_headers, as: :json | ||
}.to change(<%= class_name %>, :count).by(1) | ||
end | ||
it "renders a JSON response with the new <%= ns_file_name %>" do | ||
post <%= index_helper %>_url, | ||
params: { <%= ns_file_name %>: valid_attributes }, headers: valid_headers, as: :json | ||
expect(response).to have_http_status(:created) | ||
expect(response.content_type).to match(a_string_including("application/json")) | ||
end | ||
end | ||
context "with invalid parameters" do | ||
it "does not create a new <%= class_name %>" do | ||
expect { | ||
post <%= index_helper %>_url, | ||
params: { <%= ns_file_name %>: invalid_attributes }, as: :json | ||
}.to change(<%= class_name %>, :count).by(0) | ||
end | ||
it "renders a JSON response with errors for the new <%= ns_file_name %>" do | ||
post <%= index_helper %>_url, | ||
params: { <%= ns_file_name %>: invalid_attributes }, headers: valid_headers, as: :json | ||
expect(response).to have_http_status(:unprocessable_entity) | ||
expect(response.content_type).to eq("application/json") | ||
end | ||
end | ||
end | ||
describe "PATCH /update" do | ||
context "with valid parameters" do | ||
let(:new_attributes) { | ||
skip("Add a hash of attributes valid for your model") | ||
} | ||
it "updates the requested <%= ns_file_name %>" do | ||
<%= file_name %> = <%= class_name %>.create! valid_attributes | ||
patch <%= show_helper.tr('@', '') %>, | ||
params: { <%= singular_table_name %>: invalid_attributes }, headers: valid_headers, as: :json | ||
<%= file_name %>.reload | ||
skip("Add assertions for updated state") | ||
end | ||
it "renders a JSON response with the <%= ns_file_name %>" do | ||
<%= file_name %> = <%= class_name %>.create! valid_attributes | ||
patch <%= show_helper.tr('@', '') %>, | ||
params: { <%= singular_table_name %>: invalid_attributes }, headers: valid_headers, as: :json | ||
expect(response).to have_http_status(:ok) | ||
expect(response.content_type).to eq("application/json") | ||
end | ||
end | ||
context "with invalid parameters" do | ||
it "renders a JSON response with errors for the <%= ns_file_name %>" do | ||
<%= file_name %> = <%= class_name %>.create! valid_attributes | ||
patch <%= show_helper.tr('@', '') %>, | ||
params: { <%= singular_table_name %>: invalid_attributes }, headers: valid_headers, as: :json | ||
expect(response).to have_http_status(:unprocessable_entity) | ||
expect(response.content_type).to eq("application/json") | ||
end | ||
end | ||
end | ||
describe "DELETE /destroy" do | ||
it "destroys the requested <%= ns_file_name %>" do | ||
<%= file_name %> = <%= class_name %>.create! valid_attributes | ||
expect { | ||
delete <%= show_helper.tr('@', '') %>, headers: valid_headers, as: :json | ||
}.to change(<%= class_name %>, :count).by(-1) | ||
end | ||
end | ||
end | ||
<% end -%> |
133 changes: 133 additions & 0 deletions
133
lib/generators/rspec/scaffold/templates/request_spec.rb
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,133 @@ | ||
require 'rails_helper' | ||
|
||
# This spec was generated by rspec-rails when you ran the scaffold generator. | ||
# It demonstrates how one might use RSpec to test the controller code that | ||
# was generated by Rails when you ran the scaffold generator. | ||
# | ||
# It assumes that the implementation code is generated by the rails scaffold | ||
# generator. If you are using any extension libraries to generate different | ||
# controller code, this generated spec may or may not pass. | ||
# | ||
# It only uses APIs available in rails and/or rspec-rails. There are a number | ||
# of tools you can use to make these specs even more expressive, but we're | ||
# sticking to rails and rspec-rails APIs to keep things simple and stable. | ||
|
||
<% module_namespacing do -%> | ||
RSpec.describe "/<%= name.underscore.pluralize %>", <%= type_metatag(:request) %> do | ||
# <%= class_name %>. As you add validations to <%= class_name %>, be sure to | ||
# adjust the attributes here as well. | ||
let(:valid_attributes) { | ||
skip("Add a hash of attributes valid for your model") | ||
} | ||
let(:invalid_attributes) { | ||
skip("Add a hash of attributes invalid for your model") | ||
} | ||
<% unless options[:singleton] -%> | ||
describe "GET /index" do | ||
it "renders a successful response" do | ||
<%= class_name %>.create! valid_attributes | ||
get <%= index_helper %>_url | ||
expect(response).to be_successful | ||
end | ||
end | ||
<% end -%> | ||
describe "GET /show" do | ||
it "renders a successful response" do | ||
<%= file_name %> = <%= class_name %>.create! valid_attributes | ||
get <%= show_helper.tr('@', '') %> | ||
expect(response).to be_successful | ||
end | ||
end | ||
describe "GET /new" do | ||
it "renders a successful response" do | ||
get <%= new_helper %> | ||
expect(response).to be_successful | ||
end | ||
end | ||
describe "GET /edit" do | ||
it "render a successful response" do | ||
<%= file_name %> = <%= class_name %>.create! valid_attributes | ||
get <%= edit_helper.tr('@','') %> | ||
expect(response).to be_successful | ||
end | ||
end | ||
describe "POST /create" do | ||
context "with valid parameters" do | ||
it "creates a new <%= class_name %>" do | ||
expect { | ||
post <%= index_helper %>_url, params: { <%= ns_file_name %>: valid_attributes } | ||
}.to change(<%= class_name %>, :count).by(1) | ||
end | ||
it "redirects to the created <%= ns_file_name %>" do | ||
post <%= index_helper %>_url, params: { <%= ns_file_name %>: valid_attributes } | ||
expect(response).to redirect_to(<%= show_helper.gsub("\@#{file_name}", class_name+".last") %>) | ||
end | ||
end | ||
context "with invalid parameters" do | ||
it "does not create a new <%= class_name %>" do | ||
expect { | ||
post <%= index_helper %>_url, params: { <%= ns_file_name %>: invalid_attributes } | ||
}.to change(<%= class_name %>, :count).by(0) | ||
end | ||
it "renders a successful response (i.e. to display the 'new' template)" do | ||
post <%= index_helper %>_url, params: { <%= ns_file_name %>: invalid_attributes } | ||
expect(response).to be_successful | ||
end | ||
end | ||
end | ||
describe "PATCH /update" do | ||
context "with valid parameters" do | ||
let(:new_attributes) { | ||
skip("Add a hash of attributes valid for your model") | ||
} | ||
it "updates the requested <%= ns_file_name %>" do | ||
<%= file_name %> = <%= class_name %>.create! valid_attributes | ||
patch <%= show_helper.tr('@', '') %>, params: { <%= singular_table_name %>: new_attributes } | ||
<%= file_name %>.reload | ||
skip("Add assertions for updated state") | ||
end | ||
|
||
it "redirects to the <%= ns_file_name %>" do | ||
<%= file_name %> = <%= class_name %>.create! valid_attributes | ||
patch <%= show_helper.tr('@', '') %>, params: { <%= singular_table_name %>: new_attributes } | ||
<%= file_name %>.reload | ||
expect(response).to redirect_to(<%= singular_table_name %>_url(<%= file_name %>)) | ||
end | ||
end | ||
|
||
context "with invalid parameters" do | ||
it "renders a successful response (i.e. to display the 'edit' template)" do | ||
<%= file_name %> = <%= class_name %>.create! valid_attributes | ||
patch <%= show_helper.tr('@', '') %>, params: { <%= singular_table_name %>: invalid_attributes } | ||
expect(response).to be_successful | ||
end | ||
end | ||
end | ||
|
||
describe "DELETE /destroy" do | ||
it "destroys the requested <%= ns_file_name %>" do | ||
<%= file_name %> = <%= class_name %>.create! valid_attributes | ||
expect { | ||
delete <%= show_helper.tr('@', '') %> | ||
}.to change(<%= class_name %>, :count).by(-1) | ||
end | ||
|
||
it "redirects to the <%= table_name %> list" do | ||
<%= file_name %> = <%= class_name %>.create! valid_attributes | ||
delete <%= show_helper.tr('@', '') %> | ||
expect(response).to redirect_to(<%= index_helper %>_url) | ||
end | ||
end | ||
end | ||
<% end -%> |
Oops, something went wrong.