require "application_system_test_case"

class SiteTest < ApplicationSystemTestCase
  test "visiting the index" do
    visit "/"

    assert_selector "h1", :text => "OpenStreetMap"
  end

  test "tooltip shows for Layers button" do
    visit "/"

    assert_no_selector ".tooltip"
    button = find ".control-layers .control-button"
    button.hover
    assert_selector ".tooltip", :text => "Layers"
  end

  test "tooltip shows for Map Key button on Standard layer" do
    visit "/"

    assert_no_selector ".tooltip"
    button = find ".control-key .control-button"
    button.hover
    tooltip = find ".tooltip"
    tooltip.assert_text "Map Key"
    tooltip.assert_no_text "not available"
  end

  test "tooltip shows for Map Key button on a layer without a key provided" do
    visit "/#layers=Y" # assumes that CyclOSM layer has no map key

    assert_no_selector ".tooltip"
    button = find ".control-key .control-button"
    button.hover
    tooltip = find ".tooltip"
    tooltip.assert_text "Map Key"
    tooltip.assert_text "not available"
  end

  test "tooltip shows for query button when zoomed in" do
    visit "/#map=14/0/0"

    assert_no_selector ".tooltip"
    button = find ".control-query .control-button"
    button.hover
    tooltip = find ".tooltip"
    tooltip.assert_text "Query features"
    tooltip.assert_no_text "Zoom in"
  end

  [
    "#edit_tab",
    ".control-note .control-button",
    ".control-query .control-button"
  ].each do |selector|
    test "tooltips on low zoom levels for disabled control '#{selector}'" do
      visit "/#map=10/0/0"

      assert_no_selector ".tooltip"
      find(selector).hover
      assert_selector ".tooltip", :text => "Zoom in"
    end

    test "no zoom-in tooltips on high zoom levels, then tooltips appear after zoom out for control '#{selector}'" do
      visit "/#map=14/0/0"

      assert_no_selector ".tooltip"
      find(selector).hover
      assert_no_selector ".tooltip", :text => "Zoom in"
      find("h1").hover # un-hover original element

      visit "#map=10/0/0"
      find("#{selector}.disabled") # Ensure that capybara has waited for JS to finish processing

      assert_no_selector ".tooltip"
      find(selector).hover
      assert_selector ".tooltip", :text => "Zoom in"
    end
  end

  test "notes layer tooltip appears on zoom out" do
    visit "/#map=9/40/-4" # depends on zoom levels where notes are allowed

    find(".control-layers .control-button").click
    li = find(".layers-ui .overlay-layers li:first-child")
    li.not_matches_css? ".disabled"
    li.hover # try to trigger disabled tooltip
    zoomout = find(".control-button.zoomout")
    zoomout.hover # un-hover the tooltip that's being tested
    zoomout.click
    li.matches_css? ".disabled"
    li.hover
    assert_selector ".tooltip", :text => "Zoom in"
  end
end
