Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Added tests for blog_controller and fixed a path #144

Merged
merged 3 commits into from
Feb 11, 2013
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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