artist urls: normalize trailing slashes and missing http://.

* Remove unnecessary trailing slashes when artist URLs are saved.
* Automatically add `http://` to new artist URLs if it's missing (before
  this was an error; now it's automatically fixed).
This commit is contained in:
evazion
2022-02-21 18:57:40 -06:00
parent 7d49ab6130
commit c5777f360e
3 changed files with 18 additions and 19 deletions

View File

@@ -72,8 +72,7 @@ class ArtistURL < ApplicationRecord
end
def domain
uri = Addressable::URI.parse(normalized_url)
uri.domain
Danbooru::URL.parse(normalized_url)&.domain
end
def site_name
@@ -119,11 +118,7 @@ class ArtistURL < ApplicationRecord
end
def self.normalize_url(url)
uri = Addressable::URI.parse(url)
uri.site = uri.normalized_site
uri.to_s
rescue Addressable::URI::InvalidURIError
url
Danbooru::URL.parse(url)&.to_s.presence || url
end
def url=(url)

View File

@@ -580,7 +580,8 @@ class ArtistTest < ActiveSupport::TestCase
should "not save invalid urls" do
assert_no_difference("ArtistVersion.count") do
@artist.update(:url_string => "http://foo.com www.example.com")
@artist.update(url_string: "http://foo.com :42")
assert_equal(%w[http://foo.com], @artist.versions.last.urls)
end
end

View File

@@ -25,26 +25,29 @@ class ArtistURLTest < ActiveSupport::TestCase
should "disallow invalid urls" do
urls = [
FactoryBot.build(:artist_url, url: "www.example.com"),
FactoryBot.build(:artist_url, url: ":www.example.com"),
FactoryBot.build(:artist_url, url: "http://http://www.example.com"),
build(:artist_url, url: ":www.example.com"),
build(:artist_url, url: "http://http://www.example.com"),
]
assert_equal(false, urls[0].valid?)
assert_match(/must begin with http/, urls[0].errors.full_messages.join)
assert_match(/is malformed/, urls[0].errors.full_messages.join)
assert_equal(false, urls[1].valid?)
assert_match(/is malformed/, urls[1].errors.full_messages.join)
assert_equal(false, urls[2].valid?)
assert_match(/that does not contain a dot/, urls[2].errors.full_messages.join)
assert_match(/that does not contain a dot/, urls[1].errors.full_messages.join)
end
should "always add a trailing slash when normalized" do
url = FactoryBot.create(:artist_url, :url => "http://monet.com")
should "automatically add http:// if missing" do
url = create(:artist_url, url: "example.com")
assert_equal("http://example.com", url.url)
assert_equal("http://example.com/", url.normalized_url)
end
should "normalize trailing slashes" do
url = create(:artist_url, url: "http://monet.com")
assert_equal("http://monet.com", url.url)
assert_equal("http://monet.com/", url.normalized_url)
url = FactoryBot.create(:artist_url, :url => "http://monet.com/")
assert_equal("http://monet.com/", url.url)
url = create(:artist_url, url: "http://monet.com/")
assert_equal("http://monet.com", url.url)
assert_equal("http://monet.com/", url.normalized_url)
end