require "rails_helper"

describe Admin::MenuComponent, :admin, controller: Admin::NewslettersController do
  it "disables all buttons when JavaScript isn't available" do
    render_inline Admin::MenuComponent.new

    expect(page).to have_button disabled: true
    expect(page).not_to have_button disabled: false
  end

  it "expands the current section" do
    render_inline Admin::MenuComponent.new

    expect(page).to have_css "button[aria-expanded='true']", exact_text: "Messages to users"
  end

  it "does not expand other sections" do
    render_inline Admin::MenuComponent.new

    expect(page).to have_css "button[aria-expanded='false']", exact_text: "Settings"
  end

  it "only renders the multitenancy and administrators sections in multitenancy management mode" do
    allow(Rails.application.config).to receive(:multitenancy_management_mode).and_return(true)

    render_inline Admin::MenuComponent.new

    expect(page).to have_css "#admin_menu"
    expect(page).to have_link "Multitenancy"
    expect(page).to have_link "Administrators"
    expect(page).to have_link count: 2
  end

  describe "#polls_link" do
    it "is marked as current when managing poll options",
       controller: Admin::Poll::Questions::OptionsController do
      render_inline Admin::MenuComponent.new

      expect(page).to have_css "[aria-current]", exact_text: "Polls"
    end

    it "is marked as current when managing poll options content",
       controller: Admin::Poll::Questions::Options::VideosController do
      render_inline Admin::MenuComponent.new

      expect(page).to have_css "[aria-current]", exact_text: "Polls"
    end
  end

  describe "#locales_link" do
    it "is present when two or more locales are available" do
      render_inline Admin::MenuComponent.new

      expect(page).to have_link "Languages"
    end

    it "is present when two or more locales are available but only one is enabled" do
      Setting["locales.enabled"] = "en"

      render_inline Admin::MenuComponent.new

      expect(page).to have_link "Languages"
    end

    it "is not present when only one locale is available" do
      allow(I18n).to receive(:available_locales).and_return([:en])

      render_inline Admin::MenuComponent.new

      expect(page).not_to have_link "Languages"
    end
  end
end
