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_build_dict_rejects_deprecated_and_third_party
 
  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" }
 
  25     dict = Tag2link.build_dict(data)
 
  26     assert_not_includes dict, "example"
 
  27     assert_not_includes dict, "example2"
 
  28     assert_includes dict, "example3"
 
  31   def test_build_dict_chooses_single_preferred_item
 
  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" }
 
  36     dict = Tag2link.build_dict(data)
 
  37     assert_equal "http://example.com/$1", dict["example"]
 
  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" }
 
  44     dict = Tag2link.build_dict(data)
 
  45     assert_equal "http://example.com/$1", dict["example"]
 
  48       { "key" => "Key:example", "url" => "http://example2.com/$1", "rank" => "preferred", "source" => "osmwiki:P8" }
 
  50     dict = Tag2link.build_dict(data)
 
  51     assert_equal "http://example2.com/$1", dict["example"]
 
  54   def test_build_dict_deduplicates_urls
 
  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" }
 
  59     dict = Tag2link.build_dict(data)
 
  60     assert_equal "http://example.com/$1", dict["example"]
 
  63   def test_build_dict_rejects_multiple_equally_preferred_items
 
  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" }
 
  68     dict = Tag2link.build_dict(data)
 
  69     assert_not_includes dict, "example"
 
  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" }
 
  75     dict = Tag2link.build_dict(data)
 
  76     assert_not_includes dict, "example"
 
  79   def test_build_dict_chooses_osmwiki_when_both_have_single_preferred
 
  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" }
 
  84     dict = Tag2link.build_dict(data)
 
  85     assert_equal "http://example1.com/$1", dict["example"]
 
  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" }
 
  91     dict = Tag2link.build_dict(data)
 
  92     assert_equal "http://example1.com/$1", dict["example"]
 
  95   def test_build_dict_multiple_sources_more_than_two
 
  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" }
 
 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"