]> git.openstreetmap.org Git - rails.git/blob - test/lib/tag2link_test.rb
Merge remote-tracking branch 'upstream/pull/6490'
[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_build_dict_rejects_deprecated_and_third_party
20     data = [
21       { "key" => "Key:example", "url" => "http://example.com/$1", "rank" => "deprecated", "source" => "osmwiki:P8" },
22       { "key" => "Key:example2", "url" => "http://example2.com/$1", "rank" => "preferred", "source" => "wikidata:P3303" },
23       { "key" => "Key:example3", "url" => "http://example3.com/$1", "rank" => "preferred", "source" => "osmwiki:P8" }
24     ]
25     dict = Tag2link.build_dict(data)
26     assert_not_includes dict, "example"
27     assert_not_includes dict, "example2"
28     assert_includes dict, "example3"
29   end
30
31   def test_build_dict_chooses_single_preferred_item
32     data = [
33       { "key" => "Key:example", "url" => "http://example2.com/$1", "rank" => "normal", "source" => "osmwiki:P8" },
34       { "key" => "Key:example", "url" => "http://example.com/$1", "rank" => "preferred", "source" => "osmwiki:P8" }
35     ]
36     dict = Tag2link.build_dict(data)
37     assert_equal "http://example.com/$1", dict["example"]
38
39     data = [
40       { "key" => "Key:example", "url" => "http://example2.com/$1", "rank" => "preferred", "source" => "osmwiki:P8" },
41       { "key" => "Key:example", "url" => "http://example.com/$1", "rank" => "preferred", "source" => "wikidata:P1630" },
42       { "key" => "Key:example", "url" => "http://example3.com/$1", "rank" => "preferred", "source" => "osmwiki:P8" }
43     ]
44     dict = Tag2link.build_dict(data)
45     assert_equal "http://example.com/$1", dict["example"]
46
47     data = [
48       { "key" => "Key:example", "url" => "http://example2.com/$1", "rank" => "preferred", "source" => "osmwiki:P8" }
49     ]
50     dict = Tag2link.build_dict(data)
51     assert_equal "http://example2.com/$1", dict["example"]
52   end
53
54   def test_build_dict_deduplicates_urls
55     data = [
56       { "key" => "Key:example", "url" => "http://example.com/$1", "rank" => "preferred", "source" => "osmwiki:P8" },
57       { "key" => "Key:example", "url" => "http://example.com/$1", "rank" => "normal", "source" => "wikidata:P1630" }
58     ]
59     dict = Tag2link.build_dict(data)
60     assert_equal "http://example.com/$1", dict["example"]
61   end
62
63   def test_build_dict_rejects_multiple_equally_preferred_items
64     data = [
65       { "key" => "Key:example", "url" => "http://example1.com/$1", "rank" => "preferred", "source" => "osmwiki:P8" },
66       { "key" => "Key:example", "url" => "http://example2.com/$1", "rank" => "preferred", "source" => "osmwiki:P8" }
67     ]
68     dict = Tag2link.build_dict(data)
69     assert_not_includes dict, "example"
70
71     data = [
72       { "key" => "Key:example", "url" => "http://example1.com/$1", "rank" => "normal", "source" => "osmwiki:P8" },
73       { "key" => "Key:example", "url" => "http://example2.com/$1", "rank" => "normal", "source" => "osmwiki:P8" }
74     ]
75     dict = Tag2link.build_dict(data)
76     assert_not_includes dict, "example"
77   end
78
79   def test_build_dict_chooses_osmwiki_when_both_have_single_preferred
80     data = [
81       { "key" => "Key:example", "url" => "http://example1.com/$1", "rank" => "preferred", "source" => "osmwiki:P8" },
82       { "key" => "Key:example", "url" => "http://example2.com/$1", "rank" => "preferred", "source" => "wikidata:P1630" }
83     ]
84     dict = Tag2link.build_dict(data)
85     assert_equal "http://example1.com/$1", dict["example"]
86
87     data = [
88       { "key" => "Key:example", "url" => "http://example1.com/$1", "rank" => "normal", "source" => "osmwiki:P8" },
89       { "key" => "Key:example", "url" => "http://example2.com/$1", "rank" => "normal", "source" => "wikidata:P1630" }
90     ]
91     dict = Tag2link.build_dict(data)
92     assert_equal "http://example1.com/$1", dict["example"]
93   end
94
95   def test_build_dict_multiple_sources_more_than_two
96     data = [
97       { "key" => "Key:example", "url" => "http://example1.com/$1", "rank" => "normal", "source" => "osmwiki:P8" },
98       { "key" => "Key:example", "url" => "http://example2.com/$1", "rank" => "normal", "source" => "wikidata:P1630" },
99       { "key" => "Key:example", "url" => "http://example3.com/$1", "rank" => "normal", "source" => "other:source" }
100     ]
101     dict = Tag2link.build_dict(data)
102     # Should not happen with current tag2link schema, but ensure we handle it gracefully
103     assert_not_includes dict, "example"
104   end
105 end