require "spec_helper" require "action_view" require "scoped_search/rails_helper" describe ScopedSearch::RailsHelper do include ScopedSearch::RailsHelper include ActionView::Helpers let(:params) { HashWithIndifferentAccess.new(:controller => "resources", :action => "search") } it "should generate a link with the order param set" do should_receive(:url_for).with( "controller" => "resources", "action" => "search", "order" => "field ASC" ).and_return("/example") sort("field") end it "should generate a link with order param set to alternative default sorting order" do should_receive(:url_for).with( "controller" => "resources", "action" => "search", "order" => "field DESC" ).and_return("/example") sort("field", :default => "DESC") end it "should generate a link with the order param inverted" do should_receive(:url_for).with( "controller" => "resources", "action" => "search", "order" => "field DESC" ).and_return("/example") params[:order] = "field ASC" sort("field") end it "should generate a link with other parameters retained" do should_receive(:url_for).with( "controller" => "resources", "action" => "search", "walrus" => "unicorns", "order" => "field ASC" ).and_return("/example") params[:walrus] = "unicorns" sort("field") end it "should replace the current sorting order" do should_receive(:url_for).with( "controller" => "resources", "action" => "search", "order" => "other ASC" ).and_return("/example") params[:order] = "field ASC" sort("other") end it "should set :href and no :class on anchor" do should_receive(:url_for).and_return('/example') sort("field").should == 'Field' end it "should add ascending style for current ascending sort order " do should_receive(:url_for).and_return('/example') params[:order] = "field ASC" sort("field").should == '▲ Field' end it "should add descending style for current descending sort order " do should_receive(:url_for).and_return('/example') params[:order] = "field DESC" sort("field").should == '▼ Field' end context 'with ActionController::Parameters' do let(:ac_params) { double('ActionController::Parameters') } it "should call to_h on passed params object" do should_receive(:url_for).with( "controller" => "resources", "action" => "search", "walrus" => "unicorns", "order" => "field ASC" ).and_return("/example") params[:walrus] = "unicorns" ac_params.should_receive(:respond_to?).with(:permit).and_return(true) ac_params.should_receive(:to_h).and_return(params) sort("field", url_options: ac_params) end end end