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