defmodule Mobilizon.Service.TimezoneDetectorTest do
  @moduledoc """
  Test the timezone detector
  """

  alias Mobilizon.Service.TimezoneDetector

  use Mobilizon.DataCase

  describe "detect when no geographic data is provided" do
    test "with timezone" do
      assert "Europe/Paris" == TimezoneDetector.detect("Europe/Paris", "Europe/Paris")
    end

    test "with invalid timezone" do
      assert "Europe/Paris" == TimezoneDetector.detect("Europe/Neuilly", "Europe/Paris")
    end

    test "with default" do
      assert "Europe/Paris" == TimezoneDetector.detect(nil, "Europe/Paris")
    end
  end

  describe "with geographic data provided" do
    test "when valid with value" do
      assert "Europe/Berlin" ==
               TimezoneDetector.detect(
                 "Europe/Berlin",
                 %Geo.Point{coordinates: {4.842569, 45.751718}, properties: %{}, srid: 4326},
                 "Europe/Moscow"
               )
    end

    test "when valid with no value" do
      assert "Europe/Paris" ==
               TimezoneDetector.detect(
                 nil,
                 %Geo.Point{coordinates: {4.842569, 45.751718}, properties: %{}, srid: 4326},
                 "Europe/Moscow"
               )
    end

    test "when valid with inalid value" do
      assert "Europe/Paris" ==
               TimezoneDetector.detect(
                 "Europe/Neuilly",
                 %Geo.Point{coordinates: {4.842569, 45.751718}, properties: %{}, srid: 4326},
                 "Europe/Moscow"
               )
    end

    test "with invalid coordinates" do
      assert "Europe/Moscow" ==
               TimezoneDetector.detect(
                 nil,
                 %Geo.Point{coordinates: {0, 0}, properties: %{}, srid: 4326},
                 "Europe/Moscow"
               )
    end

    test "with no data" do
      assert "Europe/Paris" == TimezoneDetector.detect("Europe/Neuilly", nil, "Europe/Paris")
    end
  end
end