]> git.openstreetmap.org Git - rails.git/blob - test/lib/tag2link_test.rb
Stop arguments in path or query from being interpreted as hashes
[rails.git] / test / lib / tag2link_test.rb
1 # frozen_string_literal: true
2
3 require "test_helper"
4
5 class Tag2linkTest < ActiveSupport::TestCase
6   def test_link_returns_nil_for_full_url
7     assert_nil Tag2link.link("website", "https://example.com/page")
8   end
9
10   def test_link_returns_nil_for_unknown_key
11     assert_nil Tag2link.link("nonexistent_key", "SomeValue")
12   end
13
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
17   end
18
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
22   end
23
24   def test_build_dict_rejects_deprecated_and_third_party
25     data = [
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" }
29     ]
30     dict = Tag2link.build_dict(data)
31     assert_not_includes dict, "example"
32     assert_not_includes dict, "example2"
33     assert_includes dict, "example3"
34   end
35
36   def test_build_dict_chooses_single_preferred_item
37     data = [
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" }
40     ]
41     dict = Tag2link.build_dict(data)
42     assert_equal "http://example.com/$1", dict["example"]
43
44     data = [
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" }
48     ]
49     dict = Tag2link.build_dict(data)
50     assert_equal "http://example.com/$1", dict["example"]
51
52     data = [
53       { "key" => "Key:example", "url" => "http://example2.com/$1", "rank" => "preferred", "source" => "osmwiki:P8" }
54     ]
55     dict = Tag2link.build_dict(data)
56     assert_equal "http://example2.com/$1", dict["example"]
57   end
58
59   def test_build_dict_deduplicates_urls
60     data = [
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" }
63     ]
64     dict = Tag2link.build_dict(data)
65     assert_equal "http://example.com/$1", dict["example"]
66   end
67
68   def test_build_dict_rejects_multiple_equally_preferred_items
69     data = [
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" }
72     ]
73     dict = Tag2link.build_dict(data)
74     assert_not_includes dict, "example"
75
76     data = [
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" }
79     ]
80     dict = Tag2link.build_dict(data)
81     assert_not_includes dict, "example"
82   end
83
84   def test_build_dict_chooses_osmwiki_when_both_have_single_preferred
85     data = [
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" }
88     ]
89     dict = Tag2link.build_dict(data)
90     assert_equal "http://example1.com/$1", dict["example"]
91
92     data = [
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" }
95     ]
96     dict = Tag2link.build_dict(data)
97     assert_equal "http://example1.com/$1", dict["example"]
98   end
99
100   def test_build_dict_multiple_sources_more_than_two
101     data = [
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" }
105     ]
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"
109   end
110 end