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