# frozen_string_literal: true

describe "Admin What's New Page" do
  let(:whats_new_page) { PageObjects::Pages::AdminWhatsNew.new }
  let(:sidebar) { PageObjects::Components::NavigationMenu::Sidebar.new }
  fab!(:admin)

  before do
    SiteSetting.navigation_menu = "sidebar"
    sign_in(admin)
  end

  def set_new_features_response_json(payload)
    Discourse.redis.set("new_features", MultiJson.dump(payload))
  end

  it "shows an error message when the backend returns an empty list" do
    set_new_features_response_json(nil)
    whats_new_page.visit
    expect(whats_new_page).to have_content(
      html_translation_to_text(
        I18n.t("admin_js.admin.dashboard.new_features.no_new_features_found"),
      ),
    )
  end

  it "displays a new feature indicator on the sidebar and clears it when navigating to what's new" do
    DiscourseUpdates.stubs(:has_unseen_features?).returns(true)
    set_new_features_response_json(
      [
        {
          "id" => 7,
          "user_id" => 1,
          "emoji" => "😍",
          "title" => "New feature",
          "description" => "New feature description",
          "link" => "https://meta.discourse.org",
          "tier" => [],
          "discourse_version" => "3.3.0.beta4",
          "created_at" => "2023-11-10T02:52:41.462Z",
          "updated_at" => "2023-11-10T04:28:47.020Z",
          "screenshot_url" =>
            "/uploads/default/original/1X/bab053dc94dc4e0d357b0e777e3357bb1ac99e12.jpeg",
        },
      ],
    )
    visit "/admin"
    sidebar.toggle_all_sections
    expect(sidebar.find_section_link("admin_whats_new")).to have_css(
      ".sidebar-section-link-suffix.admin-sidebar-nav-link__dot",
    )
    sidebar.find_section_link("admin_whats_new").click
    expect(sidebar.find_section_link("admin_whats_new")).to have_no_css(
      ".sidebar-section-link-suffix.admin-sidebar-nav-link__dot",
    )
  end

  it "displays new features with screenshot taking precedence over emoji" do
    set_new_features_response_json(
      [
        {
          "id" => 7,
          "user_id" => 1,
          "emoji" => "😍",
          "title" => "New feature",
          "description" => "New feature description",
          "link" => "https://meta.discourse.org",
          "tier" => [],
          "discourse_version" => "3.3.0.beta4",
          "created_at" => "2023-11-10T02:52:41.462Z",
          "updated_at" => "2023-11-10T04:28:47.020Z",
          "screenshot_url" =>
            "/uploads/default/original/1X/bab053dc94dc4e0d357b0e777e3357bb1ac99e12.jpeg",
        },
        {
          "id" => 8,
          "user_id" => 1,
          "emoji" => "🐼",
          "title" => "New feature from previous release",
          "description" => "New feature description",
          "link" => "https://meta.discourse.org",
          "tier" => [],
          "discourse_version" => "3.3.0.beta3",
          "created_at" => "2023-09-10T02:52:41.462Z",
          "updated_at" => "2023-09-10T04:28:47.020Z",
          "released_at" => "2023-08-10T04:28:47.020Z",
          "screenshot_url" =>
            "/uploads/default/original/1X/bab054dc94dc4e0d357b0e777e3357bb1ac99e13.jpeg",
        },
      ],
    )

    whats_new_page.visit

    whats_new_page.within_new_feature_group("November 2023") do
      expect(whats_new_page).to have_screenshot
      expect(whats_new_page).to have_learn_more_link
      expect(whats_new_page).to have_no_emoji
      expect(whats_new_page).to have_date("November 2023")
    end

    whats_new_page.within_new_feature_group("August 2023") do
      expect(whats_new_page).to have_screenshot
      expect(whats_new_page).to have_learn_more_link
      expect(whats_new_page).to have_no_emoji
      expect(whats_new_page).to have_date("August 2023")
    end
  end

  it "displays new features with emoji when no screenshot" do
    set_new_features_response_json(
      [
        {
          "id" => 7,
          "user_id" => 1,
          "emoji" => "😍",
          "title" => "New feature",
          "description" => "New feature description",
          "link" => "https://meta.discourse.org",
          "tier" => [],
          "discourse_version" => "",
          "created_at" => "2023-11-10T02:52:41.462Z",
          "updated_at" => "2023-11-10T04:28:47.020Z",
        },
      ],
    )
    whats_new_page.visit
    whats_new_page.within_new_feature_item("New feature") do
      expect(whats_new_page).to have_emoji
      expect(whats_new_page).to have_no_screenshot
    end
  end
end
