appengine/flexible/ruby31-and-earlier/rails-cloudsql-mysql/spec/controllers/cats_controller_spec.rb (114 lines of code) (raw):

# Copyright 2017 Google, Inc # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. require "rails_helper" RSpec.describe CatsController, type: :controller do let :valid_attributes do { name: "Ms. Tiger", age: 3 } end let :invalid_attributes do { name: nil, age: nil } end let(:valid_session) { {} } describe "GET #index" do it "assigns all cats as @cats" do cat = Cat.create! valid_attributes get :index, params: {}, session: valid_session expect(assigns(:cats)).to include(cat) end end describe "GET #show" do it "assigns the requested cat as @cat" do cat = Cat.create! valid_attributes get :show, params: { id: cat.to_param }, session: valid_session expect(assigns(:cat)).to eq(cat) end end describe "GET #new" do it "assigns a new cat as @cat" do get :new, params: {}, session: valid_session expect(assigns(:cat)).to be_a_new(Cat) end end describe "GET #edit" do it "assigns the requested cat as @cat" do cat = Cat.create! valid_attributes get :edit, params: { id: cat.to_param }, session: valid_session expect(assigns(:cat)).to eq(cat) end end describe "POST #create" do context "with valid params" do it "creates a new Cat" do expect { post :create, params: { cat: valid_attributes }, session: valid_session }.to change(Cat, :count).by(1) end it "assigns a newly created cat as @cat" do post :create, params: { cat: valid_attributes }, session: valid_session expect(assigns(:cat)).to be_a(Cat) expect(assigns(:cat)).to be_persisted end it "redirects to the created cat" do post :create, params: { cat: valid_attributes }, session: valid_session expect(response).to redirect_to(Cat.last) end end context "with invalid params" do it "assigns a newly created but unsaved cat as @cat" do post :create, params: { cat: invalid_attributes }, session: valid_session expect(assigns(:cat)).to be_a_new(Cat) end it "re-renders the 'new' template" do post :create, params: { cat: invalid_attributes }, session: valid_session expect(response).to render_template("new") end end end describe "PUT #update" do context "with valid params" do let :new_attributes do { name: "Mr. Whiskers", age: 4 } end it "updates the requested cat" do cat = Cat.create! valid_attributes put :update, params: { id: cat.to_param, cat: new_attributes }, session: valid_session cat.reload expect(cat.name).to eq("Mr. Whiskers") expect(cat.age).to eq(4) end it "assigns the requested cat as @cat" do cat = Cat.create! valid_attributes put :update, params: { id: cat.to_param, cat: valid_attributes }, session: valid_session expect(assigns(:cat)).to eq(cat) end it "redirects to the cat" do cat = Cat.create! valid_attributes put :update, params: { id: cat.to_param, cat: valid_attributes }, session: valid_session expect(response).to redirect_to(cat) end end context "with invalid params" do it "assigns the cat as @cat" do cat = Cat.create! valid_attributes put :update, params: { id: cat.to_param, cat: invalid_attributes }, session: valid_session expect(assigns(:cat)).to eq(cat) end it "re-renders the 'edit' template" do cat = Cat.create! valid_attributes put :update, params: { id: cat.to_param, cat: invalid_attributes }, session: valid_session expect(response).to render_template("edit") end end end describe "DELETE #destroy" do it "destroys the requested cat" do cat = Cat.create! valid_attributes expect { delete :destroy, params: { id: cat.to_param }, session: valid_session }.to change(Cat, :count).by(-1) end it "redirects to the cats list" do cat = Cat.create! valid_attributes delete :destroy, params: { id: cat.to_param }, session: valid_session expect(response).to redirect_to(cats_url) end end end