From ffe7a76c09e0150f79ebc4749f08e93d0d12ce11 Mon Sep 17 00:00:00 2001
From: "p.bjorklund@gmail.com"
Date: Mon, 11 Feb 2013 14:45:51 +0100
Subject: [PATCH] Specs for BlogController
---
spec/controllers/blog_controller_spec.rb | 99 ++++++++++++++++++++++++
1 file changed, 99 insertions(+)
diff --git a/spec/controllers/blog_controller_spec.rb b/spec/controllers/blog_controller_spec.rb
index 2dda864e..8da8d9df 100644
--- a/spec/controllers/blog_controller_spec.rb
+++ b/spec/controllers/blog_controller_spec.rb
@@ -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