require File.expand_path(File.dirname(__FILE__) + '/../test_helper')
class MenuByDefaultTest < Test::Unit::TestCase
def setup
super
@menu_bar = PluginAWeek::MenuHelper::MenuBar.new(@controller)
@menu = PluginAWeek::MenuHelper::Menu.new(@menu_bar, :home)
end
def test_should_have_a_name
assert_equal 'home', @menu.name
end
def test_should_have_a_request_controller
assert_equal @controller, @menu.request_controller
end
def test_should_have_a_parent_menu_bar
assert_equal @menu_bar, @menu.parent_menu_bar
end
def test_should_not_have_a_parent_menu
assert_nil @menu.parent_menu
end
def test_should_auto_set_ids
assert @menu.auto_set_ids?
end
def test_should_attach_active_submenus
assert @menu.attach_active_submenus?
end
def test_should_not_add_an_html_id
assert_nil @menu[:id]
end
def test_should_not_be_selected
assert !@menu.selected?
end
end
class MenuTest < Test::Unit::TestCase
def setup
super
@menu_bar = PluginAWeek::MenuHelper::MenuBar.new(@controller)
@menu = PluginAWeek::MenuHelper::Menu.new(@menu_bar, :home)
end
def test_should_accept_a_block
in_block = false
menu = PluginAWeek::MenuHelper::Menu.new(@menu_bar, :home) do |menu|
in_block = true
end
assert in_block
end
def test_should_include_last_class_in_html_if_last_menu
assert_equal '
', @menu.html(true)
end
def test_should_append_last_class_if_class_attribute_already_exists
@menu[:class] = 'pretty'
assert_equal '', @menu.html(true)
end
def test_should_allow_last_class_to_be_customized
@original_last_class = PluginAWeek::MenuHelper::Menu.last_class
PluginAWeek::MenuHelper::Menu.last_class = 'menubar-end'
assert_equal '', @menu.html(true)
ensure
PluginAWeek::MenuHelper::Menu.last_class = @original_last_class
end
def test_should_not_modify_html_options_after_building_html
@menu.html(true)
assert_nil @menu[:class]
end
end
class MenuWithMatchingNamedRouteTest < Test::Unit::TestCase
def setup
super
ActionController::Routing::Routes.draw do |map|
map.home '', :controller => 'home', :action => 'index'
end
@menu_bar = PluginAWeek::MenuHelper::MenuBar.new(@controller)
@menu = PluginAWeek::MenuHelper::Menu.new(@menu_bar, :home)
end
def test_should_build_url_from_named_route
expected = {:controller => 'home', :action => 'index', :only_path => false, :use_route => :home}
assert_equal expected, @menu.url_options
end
end
class MenuWithMatchingControllerTest < Test::Unit::TestCase
def setup
super
@menu_bar = PluginAWeek::MenuHelper::MenuBar.new(@controller)
@menu = PluginAWeek::MenuHelper::Menu.new(@menu_bar, :home)
end
def test_should_use_name_as_controller
expected = {:controller => 'home', :only_path => false}
assert_equal expected, @menu.url_options
end
end
class MenuWithoutMatchingNamedRouteOrControllerTest < Test::Unit::TestCase
def setup
super
@menu_bar = PluginAWeek::MenuHelper::MenuBar.new(@controller)
@menu = PluginAWeek::MenuHelper::Menu.new(@menu_bar, :investors)
end
def test_should_use_request_controller_as_controller_and_name_as_action
expected = {:controller => 'contact', :action => 'investors', :only_path => false}
assert_equal expected, @menu.url_options
end
end
class MenuWithCustomUrlOptionsTest < Test::Unit::TestCase
def setup
super
@menu_bar = PluginAWeek::MenuHelper::MenuBar.new(@controller)
end
def test_should_use_custom_controller_if_specified
menu = PluginAWeek::MenuHelper::Menu.new(@menu_bar, :privacy_policy, :controller => 'home')
expected = {:controller => 'home', :action => 'privacy_policy', :only_path => false}
assert_equal expected, menu.url_options
end
def test_should_not_use_name_as_action_if_same_as_controller_name
menu = PluginAWeek::MenuHelper::Menu.new(@menu_bar, :about_us, :controller => 'about_us')
expected = {:controller => 'about_us', :only_path => false}
assert_equal expected, menu.url_options
end
def test_should_use_custom_action_if_specified
menu = PluginAWeek::MenuHelper::Menu.new(@menu_bar, :privacy_policy, :controller => 'home', :action => 'privacy')
expected = {:controller => 'home', :action => 'privacy', :only_path => false}
assert_equal expected, menu.url_options
end
end
class MenuWithSpecificUrlTest < Test::Unit::TestCase
def setup
super
@menu_bar = PluginAWeek::MenuHelper::MenuBar.new(@controller)
@menu = PluginAWeek::MenuHelper::Menu.new(@menu_bar, :search, 'Search', 'http://www.google.com')
end
def test_should_use_exact_url
assert_equal 'http://www.google.com', @menu.url_options
end
end
class MenuWithMenubarId < Test::Unit::TestCase
def setup
super
@menu_bar = PluginAWeek::MenuHelper::MenuBar.new(@controller, {}, :id => 'menus')
@menu = PluginAWeek::MenuHelper::Menu.new(@menu_bar, :home)
end
def test_should_prefix_menu_id_with_menu_bar_id
assert_equal 'menus-home', @menu[:id]
end
end
class MenuWithoutContentTest < Test::Unit::TestCase
def setup
super
@menu_bar = PluginAWeek::MenuHelper::MenuBar.new(@controller)
@menu = PluginAWeek::MenuHelper::Menu.new(@menu_bar, :home)
end
def test_should_use_titleized_version_of_name_as_content
assert_equal 'Home', @menu.html
end
end
class MenuWithCustomContentTest < Test::Unit::TestCase
def setup
super
@menu_bar = PluginAWeek::MenuHelper::MenuBar.new(@controller)
@menu = PluginAWeek::MenuHelper::Menu.new(@menu_bar, :home, 'My Home')
end
def test_should_use_custom_content_as_content
assert_equal 'My Home', @menu.html
end
end
class MenuWithoutLinkingTest < Test::Unit::TestCase
def setup
super
@menu_bar = PluginAWeek::MenuHelper::MenuBar.new(@controller)
@menu = PluginAWeek::MenuHelper::Menu.new(@menu_bar, :home, {}, :link => false)
end
def test_should_not_linkify_html
assert_equal 'Home', @menu.html
end
end
class MenuWithoutAutoIdSettingTest < Test::Unit::TestCase
def setup
super
@menu_bar = PluginAWeek::MenuHelper::MenuBar.new(@controller, {:auto_set_ids => false}, :id => 'menus')
@menu = PluginAWeek::MenuHelper::Menu.new(@menu_bar, :home)
end
def test_should_not_set_default_id
assert_nil @menu[:id]
end
end
class MenuWhenNotCurrentPageTest < Test::Unit::TestCase
def setup
super
@menu_bar = PluginAWeek::MenuHelper::MenuBar.new(@controller)
@menu = PluginAWeek::MenuHelper::Menu.new(@menu_bar, :home)
end
def test_should_not_be_selected
assert !@menu.selected?
end
def test_should_not_include_selected_css_class_in_html
assert_equal 'Home', @menu.html
end
end
class MenuWhenCurrentPageTest < Test::Unit::TestCase
def setup
super
@menu_bar = PluginAWeek::MenuHelper::MenuBar.new(@controller)
@menu = PluginAWeek::MenuHelper::Menu.new(@menu_bar, :contact)
end
def test_should_be_selected
assert @menu.selected?
end
def test_should_include_selected_css_class_in_html
assert_equal '', @menu.html
end
def test_should_append_selected_class_if_class_attribute_already_exists
@menu[:class] = 'pretty'
assert_equal '', @menu.html
end
def test_should_allow_selected_class_to_be_customized
@original_selected_class = PluginAWeek::MenuHelper::Menu.selected_class
PluginAWeek::MenuHelper::Menu.selected_class = 'menubar-active'
assert_equal '', @menu.html
ensure
PluginAWeek::MenuHelper::Menu.selected_class = @original_selected_class
end
end
class MenuWithoutSubmenusTest < Test::Unit::TestCase
def setup
super
@menu_bar = PluginAWeek::MenuHelper::MenuBar.new(@controller)
@menu = PluginAWeek::MenuHelper::Menu.new(@menu_bar, :home)
end
def test_should_not_render_a_menu_bar
assert_equal 'Home', @menu.html
end
end
class MenuWithSubmenusTest < Test::Unit::TestCase
def setup
super
@menu_bar = PluginAWeek::MenuHelper::MenuBar.new(@controller)
@menu = PluginAWeek::MenuHelper::Menu.new(@menu_bar, :home) do |home|
home.menu :about_us do |about_us|
about_us.menu :who_we_are
end
end
end
def test_should_render_a_menu_bar
expected = <<-eos
Home
eos
assert_equal expected.gsub(/\n\s*/, ''), @menu.html
end
end
class MenuUnselectedWithDetachedActiveSubmenusTest < Test::Unit::TestCase
def setup
super
@menu_bar = PluginAWeek::MenuHelper::MenuBar.new(@controller, :attach_active_submenus => false)
@menu = PluginAWeek::MenuHelper::Menu.new(@menu_bar, :home) do |home|
home.menu :about_us
end
end
def test_should_render_a_menu_bar
expected = <<-eos
Home
eos
assert_equal expected.gsub(/\n\s*/, ''), @menu.html
end
def test_should_not_store_a_menu_bar_in_content_variable
assert !@controller.instance_variable_defined?('@content_for_menu_bar_level_2')
end
end
class MenuSelectedWithDetachedActiveSubmenusTest < Test::Unit::TestCase
def setup
super
@menu_bar = PluginAWeek::MenuHelper::MenuBar.new(@controller, :attach_active_submenus => false)
@menu = PluginAWeek::MenuHelper::Menu.new(@menu_bar, :contact) do |contact|
contact.menu :investors
end
end
def test_should_not_render_a_menu_bar
assert_equal '', @menu.html
end
def test_should_store_a_menu_bar_in_content_variable
# Generate the html to store it in the variable
@menu.html
expected = <<-eos
eos
assert_equal expected.gsub(/\n\s*/, ''), @controller.instance_variable_get('@content_for_menu_bar_level_2')
end
end
class MenuWithSubmenuAsCurrentPageTest < Test::Unit::TestCase
def setup
super
@menu_bar = PluginAWeek::MenuHelper::MenuBar.new(@controller)
@menu = PluginAWeek::MenuHelper::Menu.new(@menu_bar, :about_us) do |about_us|
about_us.menu :contact
end
end
def test_should_be_selected
assert @menu.selected?
end
def test_should_include_selected_css_class_in_html
expected = <<-eos
eos
assert_equal expected.gsub(/\n\s*/, ''), @menu.html
end
end
class MenuWithParentMenuTest < Test::Unit::TestCase
def setup
super
@menu_bar = PluginAWeek::MenuHelper::MenuBar.new(@controller)
@parent_menu = PluginAWeek::MenuHelper::Menu.new(@menu_bar, :contact, {}, :id => 'contact')
@menu = @parent_menu.menu :investors
end
def test_should_have_a_parent_menu
assert_equal @parent_menu, @menu.parent_menu
end
def test_should_prefix_menu_id_with_parent_menu_id
assert_equal 'contact-investors', @menu[:id]
end
end
class MenuWithParentMenuAndMatchingNamedRouteTest < Test::Unit::TestCase
def setup
super
ActionController::Routing::Routes.draw do |map|
map.contact_investors 'contact/investors', :controller => 'contact', :action => 'investors'
map.connect ':controller/:action/:id'
end
@menu_bar = PluginAWeek::MenuHelper::MenuBar.new(@controller)
@parent_menu = PluginAWeek::MenuHelper::Menu.new(@menu_bar, :contact)
@menu = @parent_menu.menu :investors
end
def test_should_build_url_from_named_route
expected = {:controller => 'contact', :action => 'investors', :only_path => false, :use_route => :contact_investors}
assert_equal expected, @menu.url_options
end
end
class MenuWithParentMenuAndMatchingControllerTest < Test::Unit::TestCase
def setup
super
@menu_bar = PluginAWeek::MenuHelper::MenuBar.new(@controller)
@parent_menu = PluginAWeek::MenuHelper::Menu.new(@menu_bar, :contact)
@menu = @parent_menu.menu :investors
end
def test_should_use_parent_controller_as_controller
expected = {:controller => 'contact', :action => 'investors', :only_path => false}
assert_equal expected, @menu.url_options
end
end