1 # frozen_string_literal: true
5 class Tag2linkTest < ActiveSupport::TestCase
6 def test_link_returns_nil_for_full_url
7 assert_nil Tag2link.link("website", "https://example.com/page")
10 def test_link_returns_nil_for_unknown_key
11 assert_nil Tag2link.link("nonexistent_key", "SomeValue")
14 def test_link_returns_proper_url_for_known_key
15 url = Tag2link.link("wikidata", "Q936")
16 assert_equal "https://www.wikidata.org/entity/Q936", url
19 def test_link_strips_path_terminators
20 url = Tag2link.link("hashtags", "#maproulette")
21 assert_equal "https://resultmaps.neis-one.org/osm-changesets?comment=maproulette", url
24 def test_build_dict_rejects_deprecated_and_third_party
26 { "key" => "Key:example", "url" => "http://example.com/$1", "rank" => "deprecated", "source" => "osmwiki:P8" },
27 { "key" => "Key:example2", "url" => "http://example2.com/$1", "rank" => "preferred", "source" => "wikidata:P3303" },
28 { "key" => "Key:example3", "url" => "http://example3.com/$1", "rank" => "preferred", "source" => "osmwiki:P8" }
30 dict = Tag2link.build_dict(data)
31 assert_not_includes dict, "example"
32 assert_not_includes dict, "example2"
33 assert_includes dict, "example3"
36 def test_build_dict_chooses_single_preferred_item
38 { "key" => "Key:example", "url" => "http://example2.com/$1", "rank" => "normal", "source" => "osmwiki:P8" },
39 { "key" => "Key:example", "url" => "http://example.com/$1", "rank" => "preferred", "source" => "osmwiki:P8" }
41 dict = Tag2link.build_dict(data)
42 assert_equal "http://example.com/$1", dict["example"]
45 { "key" => "Key:example", "url" => "http://example2.com/$1", "rank" => "preferred", "source" => "osmwiki:P8" },
46 { "key" => "Key:example", "url" => "http://example.com/$1", "rank" => "preferred", "source" => "wikidata:P1630" },
47 { "key" => "Key:example", "url" => "http://example3.com/$1", "rank" => "preferred", "source" => "osmwiki:P8" }
49 dict = Tag2link.build_dict(data)
50 assert_equal "http://example.com/$1", dict["example"]
53 { "key" => "Key:example", "url" => "http://example2.com/$1", "rank" => "preferred", "source" => "osmwiki:P8" }
55 dict = Tag2link.build_dict(data)
56 assert_equal "http://example2.com/$1", dict["example"]
59 def test_build_dict_deduplicates_urls
61 { "key" => "Key:example", "url" => "http://example.com/$1", "rank" => "preferred", "source" => "osmwiki:P8" },
62 { "key" => "Key:example", "url" => "http://example.com/$1", "rank" => "normal", "source" => "wikidata:P1630" }
64 dict = Tag2link.build_dict(data)
65 assert_equal "http://example.com/$1", dict["example"]
68 def test_build_dict_rejects_multiple_equally_preferred_items
70 { "key" => "Key:example", "url" => "http://example1.com/$1", "rank" => "preferred", "source" => "osmwiki:P8" },
71 { "key" => "Key:example", "url" => "http://example2.com/$1", "rank" => "preferred", "source" => "osmwiki:P8" }
73 dict = Tag2link.build_dict(data)
74 assert_not_includes dict, "example"
77 { "key" => "Key:example", "url" => "http://example1.com/$1", "rank" => "normal", "source" => "osmwiki:P8" },
78 { "key" => "Key:example", "url" => "http://example2.com/$1", "rank" => "normal", "source" => "osmwiki:P8" }
80 dict = Tag2link.build_dict(data)
81 assert_not_includes dict, "example"
84 def test_build_dict_chooses_osmwiki_when_both_have_single_preferred
86 { "key" => "Key:example", "url" => "http://example1.com/$1", "rank" => "preferred", "source" => "osmwiki:P8" },
87 { "key" => "Key:example", "url" => "http://example2.com/$1", "rank" => "preferred", "source" => "wikidata:P1630" }
89 dict = Tag2link.build_dict(data)
90 assert_equal "http://example1.com/$1", dict["example"]
93 { "key" => "Key:example", "url" => "http://example1.com/$1", "rank" => "normal", "source" => "osmwiki:P8" },
94 { "key" => "Key:example", "url" => "http://example2.com/$1", "rank" => "normal", "source" => "wikidata:P1630" }
96 dict = Tag2link.build_dict(data)
97 assert_equal "http://example1.com/$1", dict["example"]
100 def test_build_dict_multiple_sources_more_than_two
102 { "key" => "Key:example", "url" => "http://example1.com/$1", "rank" => "normal", "source" => "osmwiki:P8" },
103 { "key" => "Key:example", "url" => "http://example2.com/$1", "rank" => "normal", "source" => "wikidata:P1630" },
104 { "key" => "Key:example", "url" => "http://example3.com/$1", "rank" => "normal", "source" => "other:source" }
106 dict = Tag2link.build_dict(data)
107 # Should not happen with current tag2link schema, but ensure we handle it gracefully
108 assert_not_includes dict, "example"