diff options
Diffstat (limited to 'spec/lib/sidebars/menu_spec.rb')
-rw-r--r-- | spec/lib/sidebars/menu_spec.rb | 79 |
1 files changed, 78 insertions, 1 deletions
diff --git a/spec/lib/sidebars/menu_spec.rb b/spec/lib/sidebars/menu_spec.rb index 53a889c2db8..641f1c6e7e6 100644 --- a/spec/lib/sidebars/menu_spec.rb +++ b/spec/lib/sidebars/menu_spec.rb @@ -2,9 +2,10 @@ require 'spec_helper' -RSpec.describe Sidebars::Menu do +RSpec.describe Sidebars::Menu, feature_category: :navigation do let(:menu) { described_class.new(context) } let(:context) { Sidebars::Context.new(current_user: nil, container: nil) } + let(:nil_menu_item) { Sidebars::NilMenuItem.new(item_id: :foo) } describe '#all_active_routes' do @@ -21,6 +22,82 @@ RSpec.describe Sidebars::Menu do end end + describe '#serialize_for_super_sidebar' do + before do + allow(menu).to receive(:title).and_return('Title') + allow(menu).to receive(:active_routes).and_return({ path: 'foo' }) + end + + it 'returns a tree-like structure of itself and all menu items' do + menu.add_item(Sidebars::MenuItem.new(title: 'Is active', link: 'foo2', active_routes: { controller: 'fooc' })) + menu.add_item(Sidebars::MenuItem.new( + title: 'Not active', + link: 'foo3', + active_routes: { controller: 'barc' }, + has_pill: true, + pill_count: 10 + )) + menu.add_item(nil_menu_item) + + allow(context).to receive(:route_is_active).and_return(->(x) { x[:controller] == 'fooc' }) + + expect(menu.serialize_for_super_sidebar).to eq( + { + title: "Title", + icon: nil, + link: "foo2", + is_active: true, + pill_count: nil, + items: [ + { + title: "Is active", + icon: nil, + link: "foo2", + is_active: true, + pill_count: nil + }, + { + title: "Not active", + icon: nil, + link: "foo3", + is_active: false, + pill_count: 10 + } + ] + }) + end + + it 'returns pill data if defined' do + allow(menu).to receive(:has_pill?).and_return(true) + allow(menu).to receive(:pill_count).and_return('foo') + expect(menu.serialize_for_super_sidebar).to eq( + { + title: "Title", + icon: nil, + link: nil, + is_active: false, + pill_count: 'foo', + items: [] + }) + end + end + + describe '#serialize_as_menu_item_args' do + it 'returns hash of title, link, active_routes, container_html_options' do + allow(menu).to receive(:title).and_return('Title') + allow(menu).to receive(:active_routes).and_return({ path: 'foo' }) + allow(menu).to receive(:container_html_options).and_return({ class: 'foo' }) + allow(menu).to receive(:link).and_return('/link') + + expect(menu.serialize_as_menu_item_args).to eq({ + title: 'Title', + link: '/link', + active_routes: { path: 'foo' }, + container_html_options: { class: 'foo' } + }) + end + end + describe '#render?' do context 'when the menus has no items' do it 'returns false' do |