1defmodule TzParserOrganizerTest do
2  use ExUnit.Case, async: true
3  alias Tzdata.Parser, as: TzParser
4  alias Tzdata.ParserOrganizer, as: Organizer
5  @source_data_dir "test/tzdata_fixtures/source_data"
6
7  test "Zone map" do
8    europe = TzParser.read_file("europe_shortened", "test/tzdata_fixtures")
9    zones = Organizer.zones(europe)
10    assert zones["Europe/Copenhagen"][:name] == "Europe/Copenhagen"
11  end
12
13  test "Rule map" do
14    europe = TzParser.read_file("europe", @source_data_dir)
15    rules = Organizer.rules(europe)
16    assert hd(rules["Denmark"]) == %{at: {{23, 0, 0}, :wall}, from: 1916, in: 5, letter: "S", name: "Denmark", on: "14", record_type: :rule, save: 3600, to: :only, type: "-"}
17  end
18
19  test "Link map. Should have alias name as key. And canonical zone as value" do
20    backward = TzParser.read_file("backward", @source_data_dir)
21    links = Organizer.links(backward)
22    assert links["Iceland"] == "Atlantic/Reykjavik"
23  end
24
25  # We want a list of all the zone names.
26  # It works as a list of keys so we know which zones we have available.
27  # Canonical zones only
28  test "Zone list" do
29    europe = TzParser.read_file("europe_shortened", "test/tzdata_fixtures")
30    zone_list = Organizer.zone_list(europe)
31    assert length(zone_list) == 21
32    assert zone_list|>hd == "Atlantic/Faroe"
33    assert zone_list|>Enum.at(20) == "WET"
34  end
35
36  # For zone links. Zone links are links to canonical zones.
37  # Zone links are like an alias.
38  # For instance Europe/Jersey is an "alias" for Europe/London
39  test "Link list" do
40    europe = TzParser.read_file("europe_shortened", "test/tzdata_fixtures")
41    link_list = Organizer.link_list(europe)
42    assert length(link_list) == 4
43    assert link_list|>hd == "Europe/Busingen"
44    assert link_list|>Enum.at(3) == "Europe/Jersey"
45  end
46
47  # We want a list both zone and link names.
48  # It should be sorted alphabetically.
49  test "Zone and link list" do
50    europe = TzParser.read_file("europe_shortened", "test/tzdata_fixtures")
51    list = Organizer.zone_and_link_list(europe)
52    assert length(list) == 25
53    assert list|>hd == "Atlantic/Faroe"
54    assert list|>Enum.at(15) == "Europe/Jersey"
55  end
56end
57