# frozen_string_literal: true

RSpec.describe "Editing Sidebar Community Section", type: :system do
  fab!(:admin)
  fab!(:user)

  let(:sidebar) { PageObjects::Components::NavigationMenu::Sidebar.new }
  let(:sidebar_header_dropdown) { PageObjects::Components::NavigationMenu::HeaderDropdown.new }

  it "should not display the edit section button to non admins" do
    sign_in(user)

    visit("/latest")

    sidebar.click_community_section_more_button

    expect(sidebar).to have_no_customize_community_section_button
  end

  it "allows admin to edit community section and reset to default" do
    sign_in(admin)

    visit("/latest")

    expect(sidebar.primary_section_icons("community")).to eq(
      %w[layer-group user flag wrench paper-plane ellipsis-vertical],
    )

    modal = sidebar.click_community_section_more_button.click_customize_community_section_button
    modal.fill_link("Topics", "/latest", "paper-plane")
    modal.topics_link.drag_to(modal.review_link, delay: 0.4)
    modal.save
    modal.confirm_update

    expect(sidebar.primary_section_links("community")).to eq(
      ["My Posts", "Topics", "Review", "Admin", "Invite", "More"],
    )

    expect(sidebar.primary_section_icons("community")).to eq(
      %w[user paper-plane flag wrench paper-plane ellipsis-vertical],
    )

    modal = sidebar.click_community_section_more_button.click_customize_community_section_button
    modal.reset

    expect(sidebar).to have_section("Community")

    expect(sidebar.primary_section_links("community")).to eq(
      ["Topics", "My Posts", "Review", "Admin", "Invite", "More"],
    )

    expect(sidebar.primary_section_icons("community")).to eq(
      %w[layer-group user flag wrench paper-plane ellipsis-vertical],
    )
  end

  it "allows admin to edit community section when no secondary section links" do
    SidebarSection
      .where(title: "Community")
      .first
      .sidebar_section_links
      .where.not(position: 0)
      .destroy_all

    sign_in(admin)

    visit("/latest")

    modal = sidebar.click_customize_community_section_button

    expect(modal).to be_visible
  end

  it "should allow admins to open modal to edit the section when `navigation_menu` site setting is `header dropdown`" do
    SiteSetting.navigation_menu = "header dropdown"

    sign_in(admin)

    visit("/latest")

    sidebar_header_dropdown.open
    expect(sidebar_header_dropdown).to have_dropdown_visible
    modal = sidebar_header_dropdown.click_customize_community_section_button

    expect(modal).to be_visible
  end
end