Last active
October 28, 2015 11:26
-
-
Save puneetpandey/3f9fc0802e127d3ab1d3 to your computer and use it in GitHub Desktop.
This file contains hidden or 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
# Controller /app/controllers/posts_controller.rb | |
def index | |
@posts = Post.all | |
end | |
# Spec /spec/controllers/posts_controller_spec.rb | |
describe "GET #index" do | |
it "responds successfully with a HTTP 200 status code" do | |
get :index | |
expect(response).to be_success | |
expect(response).to have_http_status(200) | |
end | |
it "should render index template" do | |
get :index | |
expect(response).to render_template('index') | |
end | |
end | |
# Controller /app/controllers/posts_controller.rb | |
def create | |
@post = Post.new post_params | |
respond_to do |format| | |
if @post.save | |
format.html { redirect_to @post } | |
else | |
format.html { render action: :new } | |
end | |
end | |
end | |
# Spec /spec/controllers/posts_controller_spec.rb | |
describe "POST #create" do | |
it "should create new post with valid params" do | |
post :create, post: { title: 'My First Post', description: 'My first post description' } | |
expect(Post.count).to eq(1) | |
end | |
it "redirects to show page once the post is created successfully" do | |
post :create, post: { title: 'My First Post', description: 'My first post description' } | |
expect(response).to redirect_to(Post.first) | |
end | |
it "does not allow to create post without title" do | |
post :create, post: { description: 'My first post description' } | |
expect(Post.count).to eq(0) # This make sure validates :title, presence: true in post.rb | |
end | |
it "renders new template if failed to create post" do | |
post :create, post: { description: 'My first post description' } | |
expect(response).to render_template('new') | |
end | |
end | |
# Controller /app/controllers/posts_controller.rb | |
def update | |
@post = Post.find params[:id] | |
respond_to do |format| | |
if @post.update_attributes(post_params) | |
format.html { redirect_to @post } | |
else | |
format.html { render action: :edit } | |
end | |
end | |
end | |
# Spec /spec/controllers/posts_controller_spec.rb | |
describe "PUT update/:id" do | |
before(:each) do | |
@post = FactoryGirl.create(:post) | |
end | |
it "should render edit template if unable to create post" do | |
@attr = { title: nil, description: 'My first post description' } | |
put :update, id: @post.id, post: @attr | |
expect(response).to render_template('edit') | |
end | |
it "redirects user on show post page" do | |
@attr = { title: 'My First Post', description: 'My first post description' } | |
put :update, id: @post.id, post: @attr | |
expect(response).to have_http_status(302) | |
expect(response).to redirect_to(@post) | |
end | |
it "validates the title and description of post after updation" do | |
@attr = { title: 'My 1st Post', description: 'My 1st post description updated' } | |
put :update, id: @post.id, post: @attr | |
@post.reload | |
expect(@post.title).to eql(@attr[:title]) | |
expect(@post.description).to eql(@attr[:description]) | |
end | |
end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment