Sha256: 390637f2c8dd071ec532a2c3820c865b27f17d1763105f7f6c991a1968f99fd3

Contents?: true

Size: 1.98 KB

Versions: 7

Compression:

Stored size: 1.98 KB

Contents

require 'test_helper'

describe Nesta::Menu do
  include ModelFactory
  include TestConfiguration

  def with_page(&block)
    with_temp_content_directory do
      page = create(:page)
      create_menu(page.path)
      yield(page)
    end
  end

  def with_hierarchy_of_pages(&block)
    with_temp_content_directory do
      pages = (1..6).map { |i| create(:page) }
      text = <<-EOF
#{pages[0].path}
  #{pages[1].path}
    #{pages[2].path}
    #{pages[3].path}
    "no-such-page"
"another-missing-page"
#{pages[4].path}
  #{pages[5].path}
      EOF
      create_menu(text)
      yield(pages)
    end
  end

  after do
    remove_temp_directory
    Nesta::FileModel.purge_cache
  end

  it 'retrieves Page objects for the menu' do
    with_page do |page|
      assert_equal [page], Nesta::Menu.full_menu
      assert_equal [page], Nesta::Menu.for_path('/')
    end
  end

  it "filters pages that don't exist out of the menu" do
    with_temp_content_directory do
      page = create(:page)
      text = ['no-such-page', page.path].join("\n")
      create_menu(text)
      assert_equal [page], Nesta::Menu.top_level
    end
  end

  describe 'nested sub menus' do
    it 'returns top level menu items' do
      with_hierarchy_of_pages do |pages|
        assert_equal [pages[0], pages[4]], Nesta::Menu.top_level
      end
    end

    it 'returns full tree of menu items' do
      with_hierarchy_of_pages do |pages|
        page1, page2, page3, page4, page5, page6 = pages
        expected = [page1, [page2, [page3, page4]], page5, [page6]]
        assert_equal expected, Nesta::Menu.full_menu
      end
    end

    it 'returns part of the tree of menu items' do
      with_hierarchy_of_pages do |pages|
        page1, page2, page3, page4, page5, page6 = pages
        assert_equal [page2, [page3, page4]], Nesta::Menu.for_path(page2.path)
      end
    end

    it 'deems menu for path not in menu to be nil' do
      with_hierarchy_of_pages do
        assert_nil Nesta::Menu.for_path('wibble')
      end
    end
  end
end

Version data entries

7 entries across 7 versions & 1 rubygems

Version Path
nesta-0.18.0 test/unit/models/menu_test.rb
nesta-0.17.0 test/unit/models/menu_test.rb
nesta-0.16.0 test/unit/models/menu_test.rb
nesta-0.15.0 test/unit/models/menu_test.rb
nesta-0.14.0 test/unit/menu_test.rb
nesta-0.13.0 test/unit/menu_test.rb
nesta-0.12.0 test/unit/menu_test.rb