97 lines
3 KiB
Ruby
97 lines
3 KiB
Ruby
require "rails_helper"
|
|
|
|
RSpec.describe AdminMenu do
|
|
describe ".nested_menu_items_from_request" do
|
|
subject(:method_call) { described_class.nested_menu_items_from_request(request) }
|
|
|
|
let(:request) { instance_double(ActionDispatch::Request, path: path) }
|
|
let(:path) { "/admin" }
|
|
|
|
context "when path is /admin/moderation/feedback_messages" do
|
|
let(:path) { "/admin/moderation/feedback_messages" }
|
|
|
|
it { is_expected.not_to be_present }
|
|
end
|
|
|
|
context "when path is /admin/content_manager/badge_achievements" do
|
|
let(:path) { "/admin/content_manager/badge_achievements" }
|
|
|
|
let(:badges_node) do
|
|
described_class::ITEMS[:content_manager].children
|
|
.detect { |ch| ch.name == "badges" }
|
|
end
|
|
|
|
it { is_expected.to eq(badges_node) }
|
|
end
|
|
end
|
|
|
|
describe ".navigation_items" do
|
|
subject(:navigation_items) { described_class.navigation_items }
|
|
|
|
it { is_expected.to be_a(Hash) }
|
|
end
|
|
|
|
describe "scope :content_manager" do
|
|
subject(:content_manager) { described_class.navigation_items.fetch(:content_manager) }
|
|
|
|
it { is_expected.to be_a(Menu::Scope) }
|
|
end
|
|
|
|
describe "scope :content_managers's posts item" do
|
|
subject(:posts) { content_manager.children.detect { |child| child.name == "posts" } }
|
|
|
|
let(:content_manager) { described_class.navigation_items.fetch(:content_manager) }
|
|
|
|
it { is_expected.to be_visible }
|
|
end
|
|
|
|
describe "scope :content_managers's spaces item" do
|
|
subject(:spaces) { content_manager.children.detect { |child| child.name == "spaces" } }
|
|
|
|
let(:content_manager) { described_class.navigation_items.fetch(:content_manager) }
|
|
|
|
it { is_expected.to be_visible }
|
|
end
|
|
|
|
describe "scope :customization" do
|
|
subject(:content_manager) { described_class.navigation_items.fetch(:customization) }
|
|
|
|
it { is_expected.to be_a(Menu::Scope) }
|
|
it { is_expected.to have_multiple_children }
|
|
it { is_expected.to have_children }
|
|
end
|
|
|
|
describe "scope :admin_team" do
|
|
subject(:content_manager) { described_class.navigation_items.fetch(:admin_team) }
|
|
|
|
it { is_expected.not_to have_multiple_children }
|
|
it { is_expected.to have_children }
|
|
end
|
|
|
|
describe "scope :customization's profile field" do
|
|
subject(:profile_field) { customization.children.detect { |child| child.name == "profile fields" } }
|
|
|
|
let(:customization) { described_class.navigation_items.fetch(:customization) }
|
|
|
|
it { is_expected.to be_a(Menu::Item) }
|
|
it { is_expected.to be_visible }
|
|
end
|
|
|
|
describe "scope :apps" do
|
|
subject(:listing) { apps.children.detect { |child| child.name == "listings" } }
|
|
|
|
let(:apps) { described_class.navigation_items.fetch(:apps) }
|
|
|
|
context "when Listing.feature_enabled? is true" do
|
|
before { allow(Listing).to receive(:feature_enabled?).and_return(true) }
|
|
|
|
it { is_expected.to be_visible }
|
|
end
|
|
|
|
context "when Listing.feature_enabled? is false" do
|
|
before { allow(Listing).to receive(:feature_enabled?).and_return(false) }
|
|
|
|
it { is_expected.not_to be_visible }
|
|
end
|
|
end
|
|
end
|