# frozen_string_literal: true

RSpec.describe HomepageHelper do
  describe "resolver" do
    fab!(:user)

    it "returns latest by default" do
      expect(HomepageHelper.resolve).to eq("latest")
    end

    context "when theme has a custom homepage" do
      before { ThemeModifierHelper.any_instance.expects(:custom_homepage).returns(true) }

      it "returns custom" do
        expect(HomepageHelper.resolve).to eq("custom")
      end
    end

    context "when a plugin modifies the custom_homepage_enabled to true" do
      before do
        DiscoursePluginRegistry
          .expects(:apply_modifier)
          .with(:custom_homepage_enabled, false, request: nil, current_user: nil)
          .returns(true)
      end

      it "returns custom" do
        expect(HomepageHelper.resolve).to eq("custom")
      end
    end

    it "returns custom when a plugin modifies the custom_homepage_enabled to true" do
      DiscoursePluginRegistry
        .expects(:apply_modifier)
        .with(:custom_homepage_enabled, false, request: nil, current_user: nil)
        .returns(true)

      expect(HomepageHelper.resolve).to eq("custom")
    end

    context "when first item in top menu is not valid for anons" do
      before { SiteSetting.top_menu = "new|top|latest|unread" }

      it "distinguishes between auth homepage and anon homepage" do
        expect(HomepageHelper.resolve(nil, user)).to eq("new")
        # new is not a valid route for anon users, anon homepage is next item, top
        expect(HomepageHelper.resolve).to eq(SiteSetting.anonymous_homepage)
        expect(HomepageHelper.resolve).to eq("top")
      end
    end
  end
end