Skip to content

Commit

Permalink
Merge pull request #144 from pbjorklund/blogcontroller_spec
Browse files Browse the repository at this point in the history
Added tests for blog_controller and fixed a path
  • Loading branch information
steveklabnik committed Feb 11, 2013
2 parents a2eb88c + ffe7a76 commit a9d0c4d
Show file tree
Hide file tree
Showing 3 changed files with 106 additions and 2 deletions.
4 changes: 2 additions & 2 deletions app/controllers/blog_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -10,13 +10,13 @@ def show
end

def admin
redirect_to blog_index unless current_user.blog_poster
redirect_to blog_index_path unless current_user.blog_poster
@post = BlogPost.new
@posts = BlogPost.all.reverse
end

def create
redirect_to blog_index unless current_user.blog_poster
redirect_to blog_index_path and return unless current_user.blog_poster
@post = BlogPost.create(params[:blog_post])
redirect_to admin_blog_index_path, :notice => "Blog Post created!"
end
Expand Down
99 changes: 99 additions & 0 deletions spec/controllers/blog_controller_spec.rb
Original file line number Diff line number Diff line change
@@ -1,5 +1,104 @@
require 'spec_helper'

describe BlogController do
let(:blog_post) { Fabricate(:blog_post) }
let(:another_blog_post) { Fabricate(:another_blog_post) }

describe('#index') do
it "gets index successfully" do
get :index
response.should be_successful
end

describe("handles posts by") do
before(:each) do
blog_post
another_blog_post
get :index
@posts = assigns(:posts)
end
it "fetching posts" do
@posts.size.should == 2
end
it "sorting them in reverse order" do
@posts.first.content[0].should > @posts.last.content[0]
end
end
end

describe "#show" do
before(:each) do
blog_post
get :show, id: blog_post
end
it { response.should be_successful }
it { assigns(:post).should == blog_post }
end

describe "#admin" do
context "when user is not signed in" do
before(:each) do
get :create
end
#TODO Should it not use signin_path?
it { response.should redirect_to(new_user_session_path) }
end

context "when user is not an blog_poster" do
before(:each) do
blog_post
get :admin
end
it { response.should be_redirect }
it { assigns(:post).should be_nil }
it { assigns(:posts).should be_nil }
end
context "when user is a blog_poster" do
before(:each) do
sign_in Fabricate(:user, blog_poster: true)
blog_post
get :admin
end
it { response.should be_successful }
it { assigns(:post).should be_a_new(BlogPost) }
it { assigns(:posts).size.should == 1 }
end
end

describe "#create" do
context "when user is not signed in" do
before(:each) do
get :create
end
#TODO Should it not use signin_path?
it { response.should redirect_to(new_user_session_path) }
end

context "when user is not an blog_poster" do
before(:each) do
sign_in Fabricate(:user)
get :create
end

it { response.should redirect_to(blog_index_path) }

it { assigns(:post).should be_nil }
end

context "when user is a blog_poster" do
before(:each) do
sign_in Fabricate(:user, blog_poster: true)
end

it "redirects to admin_blog_index_path when user is blog_poster" do
post :create
response.should redirect_to(admin_blog_index_path)
end

it "creates a new blogpost" do
->{ post :create, blog_post: Fabricate.build(:blog_post).attributes }
.should change(BlogPost, :count).by(1)
end
end
end
end
5 changes: 5 additions & 0 deletions spec/fabricators/blog_post_fabricator.rb
Original file line number Diff line number Diff line change
Expand Up @@ -2,3 +2,8 @@
content "Hello, world"
title "Title"
end

Fabricator(:another_blog_post, from: :blog_post) do
content "World, Hello"
title "Eltit"
end

0 comments on commit a9d0c4d

Please sign in to comment.