Files
danbooru/test/unit/sources/newgrounds_test.rb
evazion f062f2d145 sources: factor out Source::URL::Newgrounds.
Also fix it so that the image URL is set as the source for Newgrounds
posts, not the page URL. It's possible to generate the page URL from the
image URL (except for images after the first in multi-image posts).

* Page: https://www.newgrounds.com/art/view/natthelich/weaver
* Image: https://art.ngfiles.com/images/1520000/1520217_natthelich_weaver.jpg?f1606365031
2022-02-25 23:04:03 -06:00

115 lines
4.5 KiB
Ruby

require 'test_helper'
module Sources
class NewgroundsTest < ActiveSupport::TestCase
context "The source for a newgrounds picture" do
setup do
@url = "https://www.newgrounds.com/art/view/hcnone/sephiroth"
@image_url = "https://art.ngfiles.com/images/1539000/1539538_hcnone_sephiroth.png?f1607668234"
@image_1 = Sources::Strategies.find(@url)
@image_2 = Sources::Strategies.find(@image_url)
end
should "get the artist name" do
assert_equal("hcnone", @image_1.artist_name)
assert_equal("hcnone", @image_2.artist_name)
end
should "get the artist commentary title" do
assert_equal("Sephiroth", @image_1.artist_commentary_title)
assert_equal("Sephiroth", @image_2.artist_commentary_title)
end
should "get profile url" do
assert_equal("https://hcnone.newgrounds.com", @image_1.profile_url)
assert_equal("https://hcnone.newgrounds.com", @image_2.profile_url)
end
should "get the image urls" do
assert_match(@image_url, @image_1.image_url)
assert_equal(@image_url, @image_2.image_url)
end
should "get the canonical url" do
assert_equal(@url, @image_1.canonical_url)
assert_equal(@image_url, @image_2.canonical_url)
end
should "download an image" do
assert_downloaded(4224, @image_1.image_url)
assert_downloaded(4224, @image_2.image_url)
end
should "get the tags" do
tags = [
%w[sephiroth https://www.newgrounds.com/search/conduct/art?match=tags&tags=sephiroth],
%w[supersmashbros https://www.newgrounds.com/search/conduct/art?match=tags&tags=supersmashbros],
]
assert_equal(tags, @image_1.tags)
assert_equal(tags, @image_2.tags)
end
should "find the right artist" do
artist_1 = create(:artist, name: "hcnone1", url_string: "https://hcnone.newgrounds.com/art")
artist_2 = create(:artist, name: "hcnone2", url_string: "https://www.newgrounds.com/art/view/hcnone/sephiroth")
artist_3 = create(:artist, name: "bad_artist", url_string: "https://www.newgrounds.com/art")
assert_equal([artist_1, artist_2], @image_1.artists)
assert_equal([artist_1, artist_2], @image_2.artists)
assert_not_equal([artist_3], @image_1.artists)
end
end
context "A multi-image Newgrounds post" do
should "get all the images" do
source = Sources::Strategies.find("https://www.newgrounds.com/art/view/natthelich/weaver")
image_urls = [
"https://art.ngfiles.com/images/1520000/1520217_natthelich_weaver.jpg?f1606365031",
"https://art.ngfiles.com/comments/199000/iu_199826_7115981.jpg",
]
assert_equal(image_urls, source.image_urls)
end
end
context "A deleted or not existing picture" do
setup do
@fake_1 = Sources::Strategies.find("https://www.newgrounds.com/art/view/ThisUser/DoesNotExist")
@artist_1 = create(:artist, name: "thisuser", url_string: "https://thisuser.newgrounds.com")
@fake_2 = Sources::Strategies.find("https://www.newgrounds.com/art/view/natthelich/nopicture")
@artist_2 = create(:artist, name: "natthelich", url_string: "https://natthelich.newgrounds.com")
@fake_3 = Sources::Strategies.find("https://www.newgrounds.com/art/view/theolebrave/sensitive-pochaco")
@artist_3 = create(:artist, name: "taffytoad", url_string: "https://taffytoad.newgrounds.com")
end
should "still find the artist name" do
assert_equal("thisuser", @fake_1.artist_name)
assert_equal([@artist_1], @fake_1.artists)
assert_equal("https://thisuser.newgrounds.com", @fake_1.profile_url)
assert_equal("natthelich", @fake_2.artist_name)
assert_equal([@artist_2], @fake_2.artists)
assert_equal([@artist_3], @fake_3.artists)
end
end
context "normalizing for source" do
should "normalize correctly" do
source = "https://art.ngfiles.com/images/1033000/1033622_natthelich_fire-emblem-marth-plus-progress-pic.png?f1569487181"
assert_equal("https://www.newgrounds.com/art/view/natthelich/fire-emblem-marth-plus-progress-pic", Sources::Strategies.normalize_source(source))
end
should "avoid normalizing unnormalizable urls" do
bad_source = "https://art.ngfiles.com/comments/57000/iu_57615_7115981.jpg"
assert_equal(bad_source, Sources::Strategies.normalize_source(bad_source))
end
end
end
end