require File.expand_path(File.join(File.dirname(__FILE__), '../spec_helper')) require File.expand_path(File.join(File.dirname(__FILE__), '../app')) describe "Routing shortcuts for Forums should map" do controller_name :forums before(:each) do @forum = mock('Forum') @forum.stub!(:to_param).and_return('2') Forum.stub!(:find).and_return(@forum) get :show, :id => "2" end it "resources_path to /forums" do controller.resources_path.should == '/forums' end it "resources_path(:foo => 'bar') to /forums?foo=bar" do controller.resources_path(:foo => 'bar').should == '/forums?foo=bar' end it "resource_path to /forums/2" do controller.resource_path.should == '/forums/2' end it "resource_path(:foo => 'bar') to /forums/2?foo=bar" do controller.resource_path(:foo => 'bar').should == '/forums/2?foo=bar' end it "resource_path(9) to /forums/9" do controller.resource_path(9).should == '/forums/9' end it "resource_path(9, :foo => 'bar') to /forums/2?foo=bar" do controller.resource_path(9, :foo => 'bar').should == '/forums/9?foo=bar' end it "edit_resource_path to /forums/2/edit" do controller.edit_resource_path.should == '/forums/2/edit' end it "edit_resource_path(9) to /forums/9/edit" do controller.edit_resource_path(9).should == '/forums/9/edit' end it "new_resource_path to /forums/new" do controller.new_resource_path.should == '/forums/new' end it "resources_url to http://test.host/forums" do controller.resources_url.should == 'http://test.host/forums' end it "resource_url to http://test.host/forums/2" do controller.resource_url.should == 'http://test.host/forums/2' end it "resource_url(9) to http://test.host/forums/9" do controller.resource_url(9).should == 'http://test.host/forums/9' end it "edit_resource_url to http://test.host/forums/2/edit" do controller.edit_resource_url.should == 'http://test.host/forums/2/edit' end it "edit_resource_url(9) to http://test.host/forums/9/edit" do controller.edit_resource_url(9).should == 'http://test.host/forums/9/edit' end it "new_resource_url to http://test.host/forums/new" do controller.new_resource_url.should == 'http://test.host/forums/new' end it "resource_interests_path to /forums/2/interests" do controller.resource_interests_path.should == "/forums/2/interests" end it "resource_interests_path(:foo => 'bar') to /forums/2/interests?foo=bar" do controller.resource_interests_path(:foo => 'bar').should == '/forums/2/interests?foo=bar' end it "resource_interests_path(9) to /forums/9/interests" do controller.resource_interests_path(9).should == "/forums/9/interests" end it "resource_interests_path(9, :foo => 'bar') to /forums/9/interests?foo=bar" do controller.resource_interests_path(9, :foo => 'bar').should == "/forums/9/interests?foo=bar" end it "resource_interest_path(5) to /forums/2/interests/5" do controller.resource_interest_path(5).should == "/forums/2/interests/5" end it "resource_interest_path(9,5) to /forums/9/interests/5" do controller.resource_interest_path(9,5).should == "/forums/9/interests/5" end it "resource_interest_path(9,5, :foo => 'bar') to /forums/9/interests/5?foo=bar" do controller.resource_interest_path(9, 5, :foo => 'bar').should == "/forums/9/interests/5?foo=bar" end it 'new_resource_interest_path(9) to /forums/9/interests/new' do controller.new_resource_interest_path(9).should == "/forums/9/interests/new" end it 'edit_resource_interest_path(5) to /forums/2/interests/5/edit' do controller.edit_resource_interest_path(5).should == "/forums/2/interests/5/edit" end it 'edit_resource_interest_path(9,5) to /forums/9/interests/5/edit' do controller.edit_resource_interest_path(9,5).should == "/forums/9/interests/5/edit" end it "respond_to?(:edit_resource_interest_path) should == true" do controller.should respond_to(:edit_resource_interest_path) end it "resource_users_path should raise informative NoMethodError" do lambda{ controller.resource_users_path }.should raise_error(Ardes::ResourcesController::CantMapRoute, <<-end_str Tried to map :resource_users_path to :forum_users_path, which doesn't exist. You may not have defined the route in config/routes.rb. Or, if you have unconventianal route names or name prefixes, you may need to explicictly set the :route option in resources_controller_for, and set the :name_prefix option on your enclosing resources. Currently: :route is 'forum' generated name_prefix is '' end_str ) end it "enclosing_resource_path should raise informative NoMethodError" do lambda{ controller.enclosing_resource_path }.should raise_error(NoMethodError, "Tried to map :enclosing_resource_path but there is no enclosing_resource for this controller") end it "any_old_missing_method should raise NoMethodError" do lambda{ controller.any_old_missing_method }.should raise_error(NoMethodError) end it "respond_to?(:resource_users_path) should == false" do controller.should_not respond_to(:resource_users_path) end end describe ForumsController, " (checking that non actions are hidden)" do it "should only have CRUD actions as action_methods" do pending "waiting for #469 on rspec to be accepted" do @controller.class.send(:action_methods).should == Set.new([ 'index', 'show', 'edit', 'new', 'update', 'create', 'destroy' ]) end end end describe "resource_service in ForumsController" do controller_name :forums before(:each) do @forum = Forum.create get :index @resource_service = controller.send :resource_service end it "should build new forum with new" do resource = @resource_service.new resource.should be_kind_of(Forum) end it "should find @forum with find(@forum.id)" do resource = @resource_service.find(@forum.id) resource.should == @forum end it "should find all forums with find(:all)" do resources = @resource_service.find(:all) resources.should == Forum.find(:all) end end describe ForumsController, " requesting / (testing resource_path)" do it "should generate params { :controller => 'forums', :action => 'index', :resource_path => '/forums' } from GET /" do params_from(:get, "/").should == { :controller => 'forums', :action => 'index', :resource_path => '/forums' } end before(:each) do @mock_forums = mock('forums') Forum.stub!(:find).and_return(@mock_forums) end def do_get get :index, :resource_path => '/forums' end it "should be successful" do do_get response.should be_success end it "should render index.rhtml" do do_get response.should render_template(:index) end it "should find all forums" do Forum.should_receive(:find).with(:all).and_return(@mock_forums) do_get end it "should assign the found forums for the view" do do_get assigns[:forums].should == @mock_forums end end describe ForumsController, " requesting /create_forum (testing resource_method)" do it "should generate params { :controller => 'forums', :action => 'create', :resource_path => '/forums', :resource_method => :post } from GET /create_forum" do params_from(:get, "/create_forum").should == { :controller => 'forums', :action => 'create', :resource_path => '/forums', :resource_method => :post } end before(:each) do @mock_forum = mock('Forum') @mock_forum.stub!(:save).and_return(true) @mock_forum.stub!(:to_param).and_return("1") Forum.stub!(:new).and_return(@mock_forum) end def do_post post :create, :forum => {:name => 'Forum'}, :resource_path => '/forums', :resource_method => :post end it "should create a new forum" do Forum.should_receive(:new).with({'name' => 'Forum'}).and_return(@mock_forum) do_post end it "should set the flash notice" do do_post flash[:notice].should == "Forum was successfully created." end it "should redirect to the new forum" do do_post response.should be_redirect response.redirect_url.should == "http://test.host/forums/1" end end describe "Requesting /forums using GET" do controller_name :forums before(:each) do @mock_forums = mock('forums') Forum.stub!(:find).and_return(@mock_forums) end def do_get get :index end it "should be successful" do do_get response.should be_success end it "should render index.rhtml" do do_get response.should render_template(:index) end it "should find all forums" do Forum.should_receive(:find).with(:all).and_return(@mock_forums) do_get end it "should assign the found forums for the view" do do_get assigns[:forums].should == @mock_forums end end describe "Requesting /forums.xml using GET" do controller_name :forums before(:each) do @mock_forums = mock('forums') @mock_forums.stub!(:to_xml).and_return("XML") Forum.stub!(:find).and_return(@mock_forums) end def do_get @request.env["HTTP_ACCEPT"] = "application/xml" get :index end it "should be successful" do do_get response.should be_success end it "should find all forums" do Forum.should_receive(:find).with(:all).and_return(@mock_forums) do_get end it "should render the found forums as xml" do @mock_forums.should_receive(:to_xml).and_return("XML") do_get response.body.should eql("XML") end end describe "Requesting /forums using XHR GET" do controller_name :forums before(:each) do @mock_forums = mock('forums') Forum.stub!(:find).and_return(@mock_forums) end def do_get @request.env["HTTP_ACCEPT"] = "text/javascript" xhr :get, :index end it "should be successful" do do_get response.should be_success end it "should find all forums" do Forum.should_receive(:find).with(:all).and_return(@mock_forums) do_get end it "should render index.rjs" do do_get response.should render_template('index') end end describe "Requesting /forums/1 using GET" do controller_name :forums before(:each) do @mock_forum = mock('Forum') Forum.stub!(:find).and_return(@mock_forum) end def do_get get :show, :id => "1" end it "should be successful" do do_get response.should be_success end it "should render show.rhtml" do do_get response.should render_template(:show) end it "should find the forum requested" do Forum.should_receive(:find).with("1").and_return(@mock_forum) do_get end it "should assign the found forum for the view" do do_get assigns[:forum].should == @mock_forum end end describe "Requesting /forums/1.xml using GET" do controller_name :forums before(:each) do @mock_forum = mock('Forum') @mock_forum.stub!(:to_xml).and_return("XML") Forum.stub!(:find).and_return(@mock_forum) end def do_get @request.env["HTTP_ACCEPT"] = "application/xml" get :show, :id => "1" end it "should be successful" do do_get response.should be_success end it "should find the forum requested" do Forum.should_receive(:find).with("1").and_return(@mock_forum) do_get end it "should render the found forum as xml" do @mock_forum.should_receive(:to_xml).and_return("XML") do_get response.body.should eql("XML") end end describe "Requesting /forums/1 using XHR GET" do controller_name :forums before(:each) do @mock_forum = mock('Forum') Forum.stub!(:find).and_return(@mock_forum) end def do_get xhr :get, :show, :id => "1" end it "should be successful" do do_get response.should be_success end it "should render show.rjs" do do_get response.should render_template('show') end it "should find the forum requested" do Forum.should_receive(:find).with("1").and_return(@mock_forum) do_get end it "should assign the found forum for the view" do do_get assigns[:forum].should == @mock_forum end end describe "Requesting /forums/new using GET" do controller_name :forums before(:each) do @mock_forum = mock('Forum') Forum.stub!(:new).and_return(@mock_forum) end def do_get get :new end it "should be successful" do do_get response.should be_success end it "should render new.rhtml" do do_get response.should render_template(:new) end it "should create an new forum" do Forum.should_receive(:new).and_return(@mock_forum) do_get end it "should not save the new forum" do @mock_forum.should_not_receive(:save) do_get end it "should assign the new forum for the view" do do_get assigns[:forum].should == @mock_forum end end describe "Requesting /forums/1/edit using GET" do controller_name :forums before(:each) do @mock_forum = mock('Forum') Forum.stub!(:find).and_return(@mock_forum) end def do_get get :edit, :id => "1" end it "should be successful" do do_get response.should be_success end it "should render edit.rhtml" do do_get response.should render_template(:edit) end it "should find the forum requested" do Forum.should_receive(:find).and_return(@mock_forum) do_get end it "should assign the found Forum for the view" do do_get assigns(:forum).should equal(@mock_forum) end end describe "Requesting /forums using POST" do controller_name :forums before(:each) do @mock_forum = mock('Forum') @mock_forum.stub!(:save).and_return(true) @mock_forum.stub!(:to_param).and_return("1") Forum.stub!(:new).and_return(@mock_forum) end def do_post post :create, :forum => {:name => 'Forum'} end it "should create a new forum" do Forum.should_receive(:new).with({'name' => 'Forum'}).and_return(@mock_forum) do_post end it "should set the flash notice" do do_post flash[:notice].should == "Forum was successfully created." end it "should redirect to the new forum" do do_post response.should be_redirect response.redirect_url.should == "http://test.host/forums/1" end end describe "Requesting /forums using XHR POST" do controller_name :forums before(:each) do @mock_forum = mock('Forum') @mock_forum.stub!(:save).and_return(true) @mock_forum.stub!(:to_param).and_return("1") Forum.stub!(:new).and_return(@mock_forum) end def do_post xhr :post, :create, :forum => {:name => 'Forum'} end it "should create a new forum" do Forum.should_receive(:new).with({'name' => 'Forum'}).and_return(@mock_forum) do_post end it "should not set the flash notice" do do_post flash[:notice].should == nil end it "should render create.rjs" do do_post response.should render_template('create') end it "should render new.rjs if unsuccesful" do @mock_forum.stub!(:save).and_return(false) do_post response.should render_template('new') end end describe "Requesting /forums/1 using PUT" do controller_name :forums before(:each) do @mock_forum = mock('Forum', :null_object => true) @mock_forum.stub!(:to_param).and_return("1") Forum.stub!(:find).and_return(@mock_forum) end def do_update put :update, :id => "1" end it "should find the forum requested" do Forum.should_receive(:find).with("1").and_return(@mock_forum) do_update end it "should set the flash notice" do do_update flash[:notice].should == "Forum was successfully updated." end it "should update the found forum" do @mock_forum.should_receive(:attributes=) do_update assigns(:forum).should == @mock_forum end it "should assign the found forum for the view" do do_update assigns(:forum).should == @mock_forum end it "should redirect to the forum" do do_update response.should be_redirect response.redirect_url.should == "http://test.host/forums/1" end end describe "Requesting /forums/1 using XHR PUT" do controller_name :forums before(:each) do @mock_forum = mock('Forum', :null_object => true) @mock_forum.stub!(:to_param).and_return("1") Forum.stub!(:find).and_return(@mock_forum) end def do_update xhr :put, :update, :id => "1" end it "should find the forum requested" do Forum.should_receive(:find).with("1").and_return(@mock_forum) do_update end it "should update the found forum" do @mock_forum.should_receive(:attributes=) do_update assigns(:forum).should == @mock_forum end it "should not set the flash notice" do do_update flash[:notice].should == nil end it "should assign the found forum for the view" do do_update assigns(:forum).should == @mock_forum end it "should render update.rjs" do do_update response.should render_template('update') end it "should render edit.rjs, on unsuccessful save" do @mock_forum.stub!(:save).and_return(false) do_update response.should render_template('edit') end end describe "Requesting /forums/1 using DELETE" do controller_name :forums before(:each) do @mock_forum = mock('Forum', :null_object => true) Forum.stub!(:find).and_return(@mock_forum) end def do_delete delete :destroy, :id => "1" end it "should find the forum requested" do Forum.should_receive(:find).with("1").and_return(@mock_forum) do_delete end it "should call destroy on the found forum" do @mock_forum.should_receive(:destroy) do_delete end it "should set the flash notice" do do_delete flash[:notice].should == 'Forum was successfully destroyed.' end it "should redirect to the forums list" do do_delete response.should be_redirect response.redirect_url.should == "http://test.host/forums" end end describe "Requesting /forums/1 using XHR DELETE" do controller_name :forums before(:each) do @mock_forum = mock('Forum', :null_object => true) Forum.stub!(:find).and_return(@mock_forum) end def do_delete xhr :delete, :destroy, :id => "1" end it "should find the forum requested" do Forum.should_receive(:find).with("1").and_return(@mock_forum) do_delete end it "should not set the flash notice" do do_delete flash[:notice].should == nil end it "should call destroy on the found forum" do @mock_forum.should_receive(:destroy) do_delete end it "should render destroy.rjs" do do_delete response.should render_template('destroy') end end