didnt mean to confuse, i''m asking about the code in the body of the
email. The pastie was just for background reference.
--J
On Dec 4, 2007, at 12:41 AM, Jonathan Linowes wrote:
> I want to isolate and spec methods that are shared by controllers,
> and live in application.rb.
>
> Whereas I usually also provide examples in individual controllers
> that use these methods, not necessarily all the edge cases and I''d
> like to isolate the examples.
>
> This is the approach I''m taking (thanks to bryanl for suggestions
and
> http://pastie.caboo.se/123626). WDYT?
>
> This example is a before_filter that finds the Account specified in
> params[:account_id], which may be used by any number of other
> controllers in my app. As you can see, the filter is still getting
> spec''d and has pending examples.
>
> ## application.rb
>
> class ApplicationController < ActionController::Base
> ...
> def find_account
> @account = Account.find_by_id( params[:account_id])
> # TODO: check account status is suspended, closed, different
> flash message?
> return( error_redirect_gracefully( "Account not found"))
unless
> @account
> end
>
> ...
> end
>
> ## application_controller_spec.rb
>
> require File.dirname(__FILE__) + ''/../spec_helper''
>
> ActionController::Routing::Routes.draw do |map|
> map.connect ''foos/:action'', :controller =>
''foos''
> end
>
> class FoosController < ApplicationController
> end
>
> describe FoosController, "account authorization" do
>
> before do
> FoosController.class_eval do
> define_method(:foo) {
> find_account # this is the method being tested
> }
> end
> end
>
> it "should find_account from params" do
> acnt = mock_model(Account)
>
Account.should_receive(:find_by_id).with(''99'').and_return(acnt)
> get :foo, :account_id => "99"
> assigns[:account].should == acnt
> end
>
> it "should redirect gracefully if no account specified" do
> controller.stub!(:error_redirect_gracefully)
> controller.should_receive(:error_redirect_gracefully).with
> ( "Account not found")
> acnt = mock_model(Account)
> Account.should_receive(:find_by_id).with(nil).and_return(nil)
> get :foo
> end
>
> it "should not find accounts that are suspended"
> it "should flash different message for accounts that are
suspended"
> it "should not find accounts that are closed"
>
> end
>
>
>
>
> _______________________________________________
> rspec-users mailing list
> rspec-users at rubyforge.org
> http://rubyforge.org/mailman/listinfo/rspec-users