activerecord-hackery--ransack/spec/ransack/helpers/form_helper_spec.rb

148 lines
3.8 KiB
Ruby

require 'spec_helper'
module Ransack
module Helpers
describe FormHelper do
router = ActionDispatch::Routing::RouteSet.new
router.draw do
resources :people
get ':controller(/:action(/:id(.:format)))'
end
include router.url_helpers
# FIXME: figure out a cleaner way to get this behavior
before do
@controller = ActionView::TestCase::TestController.new
@controller.instance_variable_set(:@_routes, router)
@controller.class_eval do
include router.url_helpers
end
@controller.view_context_class.class_eval do
include router.url_helpers
end
end
describe '#sort_link with default search_key' do
subject { @controller.view_context
.sort_link(
[:main_app, Person.search(:sorts => ['name desc'])],
:name,
:controller => 'people'
)
}
it {
should match(
if ActiveRecord::VERSION::STRING =~ /^3\.[1-2]\./
/people\?q%5Bs%5D=name\+asc/
else
/people\?q(%5B|\[)s(%5D|\])=name\+asc/
end
)
}
it {
should match /sort_link desc/
}
it {
should match /Full Name ▼/
}
end
describe '#sort_link with default search_key defined as symbol' do
subject { @controller.
view_context.sort_link(
Person.search(
{ :sorts => ['name desc'] }, :search_key => :people_search
),
:name,
:controller => 'people'
)
}
it {
should match(
if ActiveRecord::VERSION::STRING =~ /^3\.[1-2]\./
/people\?people_search%5Bs%5D=name\+asc/
else
/people\?people_search(%5B|\[)s(%5D|\])=name\+asc/
end
)
}
end
describe '#sort_link with default search_key defined as string' do
subject {
@controller.view_context.sort_link(
Person.search(
{ :sorts => ['name desc'] }, :search_key => 'people_search'
),
:name,
:controller => 'people'
)
}
it {
should match(
if ActiveRecord::VERSION::STRING =~ /^3\.[1-2]\./
/people\?people_search%5Bs%5D=name\+asc/
else
/people\?people_search(%5B|\[)s(%5D|\])=name\+asc/
end
)
}
end
context 'view has existing parameters' do
before do
@controller.view_context.params.merge!({ :exist => 'existing' })
end
describe '#sort_link should not remove existing params' do
subject {
@controller.view_context.sort_link(
Person.search(
{ :sorts => ['name desc'] }, :search_key => 'people_search'
),
:name,
:controller => 'people'
)
}
it {
should match /exist\=existing/
}
end
end
describe '#search_form_for with default format' do
subject {
@controller.view_context
.search_form_for(Person.search) {}
}
it {
should match /action="\/people"/
}
end
describe '#search_form_for with pdf format' do
subject {
@controller.view_context
.search_form_for(Person.search, :format => :pdf) {}
}
it {
should match /action="\/people.pdf"/
}
end
describe '#search_form_for with json format' do
subject {
@controller.view_context
.search_form_for(Person.search, :format => :json) {}
}
it {
should match /action="\/people.json"/
}
end
end
end
end