require 'test_helper'
require 'ostruct'
module MenuMaker
class MenuRendererTest < ActiveSupport::TestCase
def proc_renderer
proc do |menu|
items = menu.inject('') do |html, item|
link = %{#{item}}
html + %{
#{link}#{item.render_submenu}}
end
""
end
end
context 'with a renderer which responds to call' do
should 'render the menu' do
menu_maker = Menu.new(proc_renderer) do |menu|
menu.add 'First link', '/some/path'
end
expected = ''
assert_equal expected, menu_maker.render
end
context 'when one renderer is available' do
should 'render all menu depths with the same renderer' do
menu_maker = Menu.new(proc_renderer) do |menu|
menu.add 'First link', '/some/path' do |submenu|
submenu.add 'First sublink', '/some/path/new'
end
end
submenu = %{}
expected = %{}
assert_equal expected, menu_maker.render
end
end
context 'when two renderers are available' do
should 'render menu depths with respective renderers' do
submenu_renderer = proc { |menu| '' }
renderer = MenuRendererContainer.new do |container|
container.add_for_next_depth proc_renderer
container.add_for_next_depth submenu_renderer
end
menu_maker = Menu.new(renderer) do |menu|
menu.add 'First link', '/some/path' do |submenu|
submenu.add 'First sublink', '/some/path/new'
end
end
submenu = ""
expected = %{}
assert_equal expected, menu_maker.render
end
end
end
context 'with a MenuRenderer class renderer' do
should 'detect the path when not provided and the context responds to request' do
request = Class.new do
def method; 'POST' end
def path; '/path' end
end.new
context = OpenStruct.new request: request
renderer = MenuRenderer.new context
assert_equal Path.new(:post, '/path'), renderer.current_path
end
end
end
end