Skip to content
This repository

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Fetching contributors…

Cannot retrieve contributors at this time

file 87 lines (76 sloc) 3.148 kb
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87
require File.dirname(__FILE__) + '/../test_helper'
require 'posts_controller'

# Re-raise errors caught by the controller.
class PostsController; def rescue_action(e) raise e end; end

class PostsControllerTest < Test::Unit::TestCase
  fixtures :all

  def setup
    @controller = PostsController.new
    @request = ActionController::TestRequest.new
    @response = ActionController::TestResponse.new
    @post = Post.find(:first)
  end

  # autodetects the :controller
  should_route :get, '/posts', :action => :index
  # explicitly specify :controller
  should_route :post, '/posts', :controller => :posts, :action => :create
  # non-string parameter
  should_route :get, '/posts/1', :action => :show, :id => 1
  # string-parameter
  should_route :put, '/posts/1', :action => :update, :id => "1"
  should_route :delete, '/posts/1', :action => :destroy, :id => 1
  should_route :get, '/posts/new', :action => :new

  # Test the nested routes
  should_route :get, '/users/5/posts', :action => :index, :user_id => 5
  should_route :post, '/users/5/posts', :action => :create, :user_id => 5
  should_route :get, '/users/5/posts/1', :action => :show, :id => 1, :user_id => 5
  should_route :delete, '/users/5/posts/1', :action => :destroy, :id => 1, :user_id => 5
  should_route :get, '/users/5/posts/new', :action => :new, :user_id => 5
  should_route :put, '/users/5/posts/1', :action => :update, :id => 1, :user_id => 5

  context "Logged in" do
    setup do
      @request.session[:logged_in] = true
    end

    context "viewing posts for a user" do
      setup do
        get :index, :user_id => users(:first)
      end
      should_respond_with :success
      should_assign_to :user, :class => User, :equals => 'users(:first)'
      should_fail do
        should_assign_to :user, :class => Post
      end
      should_fail do
        should_assign_to :user, :equals => 'posts(:first)'
      end
      should_assign_to :posts
      should_not_assign_to :foo, :bar
      should_render_page_with_metadata :description => /Posts/, :title => /index/
      should_render_page_with_metadata :keywords => "posts"
    end

    context "viewing posts for a user with rss format" do
      setup do
        get :index, :user_id => users(:first), :format => 'rss'
        @user = users(:first)
      end
      should_respond_with :success
      should_respond_with_content_type 'application/rss+xml'
      should_respond_with_content_type :rss
      should_respond_with_content_type /rss/
      should_return_from_session :special, "'$2 off your next purchase'"
      should_return_from_session :special_user_id, '@user.id'
      should_assign_to :user, :posts
      should_not_assign_to :foo, :bar
    end

    context "viewing a post on GET to #show" do
      setup { get :show, :user_id => users(:first), :id => posts(:first) }
      should_render_with_layout 'wide'
      should_render_with_layout :wide
      should_assign_to :false_flag
    end

    context "on GET to #new" do
      setup { get :new, :user_id => users(:first) }
      should_render_without_layout
    end
  end

end
Something went wrong with that request. Please try again.