diff --git a/app/logical/mastodon_api_client.rb b/app/logical/mastodon_api_client.rb index ed26a1da7..d8401b8fd 100644 --- a/app/logical/mastodon_api_client.rb +++ b/app/logical/mastodon_api_client.rb @@ -15,7 +15,7 @@ class MastodonApiClient def json return {} if id.blank? || access_token.blank? JSON.parse(access_token.get("/api/v1/statuses/#{id}").body) - rescue + rescue JSON::ParserError {} end diff --git a/app/logical/source/extractor/mastodon.rb b/app/logical/source/extractor/mastodon.rb index ef8fd0695..a65ee8cff 100644 --- a/app/logical/source/extractor/mastodon.rb +++ b/app/logical/source/extractor/mastodon.rb @@ -52,7 +52,7 @@ class Source::Extractor end def artist_name - api_response.account_name + api_response.account_name || artist_name_from_url end def artist_name_from_url @@ -60,7 +60,7 @@ class Source::Extractor end def other_names - [api_response.display_name] + [api_response.display_name].compact end def account_id diff --git a/test/unit/sources/mastodon_test.rb b/test/unit/sources/mastodon_test.rb index 9dfa6b53e..b573107ec 100644 --- a/test/unit/sources/mastodon_test.rb +++ b/test/unit/sources/mastodon_test.rb @@ -2,75 +2,23 @@ require 'test_helper' module Sources class MastodonTest < ActiveSupport::TestCase - context "The source site for a https://pawoo.net/web/status/$id url" do + context "For Pawoo," do setup do skip "Pawoo keys not set" unless Danbooru.config.pawoo_client_id - @site = Source::Extractor.find("https://pawoo.net/web/statuses/1202176") end - should "get the profile" do - assert_equal("https://pawoo.net/@9ed00e924818", @site.profile_url) + context "a https://pawoo.net/web/status/$id url" do + strategy_should_work( + "https://pawoo.net/web/statuses/1202176", + image_urls: ["https://img.pawoo.net/media_attachments/files/000/128/953/original/4c0a06087b03343f.png"], + profile_url: "https://pawoo.net/@9ed00e924818", + artist_name: "9ed00e924818", + dtext_artist_commentary_desc: "a mind forever voyaging through strange seas of thought alone" + ) end - should "get the artist name" do - assert_equal("9ed00e924818", @site.artist_name) - end - - should "get the image url" do - assert_equal(["https://img.pawoo.net/media_attachments/files/000/128/953/original/4c0a06087b03343f.png"], @site.image_urls) - end - - should "get the commentary" do - desc = '

a mind forever voyaging through strange seas of thought alone pawoo.net/media/9hJzXvwxVl1Cez

' - assert_equal(desc, @site.artist_commentary_desc) - end - - should "get the dtext-ified commentary" do - desc = 'a mind forever voyaging through strange seas of thought alone' - assert_equal(desc, @site.dtext_artist_commentary_desc) - end - end - - context "The source site for a https://pawoo.net/$user/$id url" do - setup do - skip "Pawoo keys not set" unless Danbooru.config.pawoo_client_id - @site = Source::Extractor.find("https://pawoo.net/@evazion/19451018") - end - - should "get the profile" do - profiles = %w[https://pawoo.net/@evazion https://pawoo.net/web/accounts/47806] - assert_equal(profiles.first, @site.profile_url) - assert_equal(profiles, @site.profile_urls) - end - - should "get the artist name" do - assert_equal("evazion", @site.artist_name) - end - - should "get the image urls" do - urls = %w[ - https://img.pawoo.net/media_attachments/files/001/297/997/original/c4272a09570757c2.png - https://img.pawoo.net/media_attachments/files/001/298/028/original/55a6fd252778454b.mp4 - https://img.pawoo.net/media_attachments/files/001/298/081/original/2588ee9ba808f38f.webm - https://img.pawoo.net/media_attachments/files/001/298/084/original/media.mp4 - ] - - assert_equal(urls, @site.image_urls) - end - - should "get the tags" do - assert_equal(%w[foo bar baz], @site.tags.map(&:first)) - end - - should "get the commentary" do - desc = "

test post please ignore

blah blah blah

this is a test 🍕

#foo #bar #baz

" - - assert_nil(@site.artist_commentary_title) - assert_equal(desc, @site.artist_commentary_desc) - end - - should "get the dtext-ified commentary" do - desc = <<-DESC.strip_heredoc.chomp + context "a https://pawoo.net/$user/$id url" do + desc = <<~DESC.chomp test post please ignore blah blah blah @@ -80,45 +28,72 @@ module Sources "#foo":[https://pawoo.net/tags/foo] "#bar":[https://pawoo.net/tags/bar] "#baz":[https://pawoo.net/tags/baz] DESC - assert_equal(desc, @site.dtext_artist_commentary_desc) + strategy_should_work( + "https://pawoo.net/@evazion/19451018", + image_urls: %w[ + https://img.pawoo.net/media_attachments/files/001/297/997/original/c4272a09570757c2.png + https://img.pawoo.net/media_attachments/files/001/298/028/original/55a6fd252778454b.mp4 + https://img.pawoo.net/media_attachments/files/001/298/081/original/2588ee9ba808f38f.webm + https://img.pawoo.net/media_attachments/files/001/298/084/original/media.mp4 + ], + profile_urls: %w[https://pawoo.net/@evazion https://pawoo.net/web/accounts/47806], + artist_name: "evazion", + tags: %w[foo bar baz], + dtext_artist_commentary_desc: desc + ) + end + + context "a https://img.pawoo.net/ url" do + strategy_should_work( + "https://img.pawoo.net/media_attachments/files/001/298/028/original/55a6fd252778454b.mp4", + image_urls: ["https://img.pawoo.net/media_attachments/files/001/298/028/original/55a6fd252778454b.mp4"], + download_size: 59_950, + referer: "https://pawoo.net/@evazion/19451018", + page_url: "https://pawoo.net/@evazion/19451018" + ) + end + + context "a deleted or invalid source" do + strategy_should_work( + "https://pawoo.net/@nonamethankswashere/12345678901234567890", + profile_url: "https://pawoo.net/@nonamethankswashere", + artist_name: "nonamethankswashere", + deleted: true + ) end end - context "The source site for a https://img.pawoo.net/ url" do - setup do - skip "Pawoo keys not set" unless Danbooru.config.pawoo_client_id - @url = "https://img.pawoo.net/media_attachments/files/001/298/028/original/55a6fd252778454b.mp4" - @ref = "https://pawoo.net/@evazion/19451018" - @site = Source::Extractor.find(@url, @ref) - end - - should "fetch the source data" do - assert_equal("evazion", @site.artist_name) - end - - should "correctly get the page url" do - assert_equal(@ref, @site.page_url) - end - end - - context "A baraag url" do + context "For Baraag," do setup do skip "Baraag keys not set" unless Danbooru.config.baraag_client_id - @url = "https://baraag.net/@bardbot/105732813175612920" - @site1 = Source::Extractor.find(@url) - - @img = "https://baraag.net/system/media_attachments/files/105/803/948/862/719/091/original/54e1cb7ca33ec449.png" - @ref = "https://baraag.net/@Nakamura/105803949565505009" - @site2 = Source::Extractor.find(@img, @ref) end - should "work" do - assert_equal("https://baraag.net/@bardbot", @site1.profile_url) - assert_equal(["https://baraag.net/system/media_attachments/files/105/732/803/241/495/700/original/556e1eb7f5ca610f.png"], @site1.image_urls) - assert_equal("bardbot", @site1.artist_name) - assert_equal("🍌", @site1.dtext_artist_commentary_desc) + context "a baraag.net/$user/$id url" do + strategy_should_work( + "https://baraag.net/@bardbot/105732813175612920", + image_urls: ["https://baraag.net/system/media_attachments/files/105/732/803/241/495/700/original/556e1eb7f5ca610f.png"], + download_size: 573_353, + profile_url: "https://baraag.net/@bardbot", + artist_name: "bardbot", + dtext_artist_commentary_desc: "🍌" + ) + end - assert_equal([@img], @site2.image_urls) + context "a baraag image url" do + strategy_should_work( + "https://baraag.net/system/media_attachments/files/105/803/948/862/719/091/original/54e1cb7ca33ec449.png", + image_urls: ["https://baraag.net/system/media_attachments/files/105/803/948/862/719/091/original/54e1cb7ca33ec449.png"], + download_size: 363_261 + ) + end + + context "a deleted or invalid source" do + strategy_should_work( + "https://baraag.net/@nonamethankswashere/12345678901234567890", + profile_url: "https://baraag.net/@nonamethankswashere", + artist_name: "nonamethankswashere", + deleted: true + ) end end @@ -136,23 +111,6 @@ module Sources end end - context "A deleted or invalid source" do - setup do - skip "Pawoo keys not set" unless Danbooru.config.pawoo_client_id - - @site1 = Source::Extractor.find("https://pawoo.net/@nantokakun/105643037682139899") # 404 - @site2 = Source::Extractor.find("https://img.pawoo.net/media_attachments/files/001/297/997/original/c4272a09570757c2.png") - - assert_nothing_raised { @site1.to_h } - assert_nothing_raised { @site2.to_h } - end - - should "still find the artist" do - @artist = FactoryBot.create(:artist, name: "nantokakun", url_string: "https://pawoo.net/@nantokakun") - assert_equal([@artist], @site1.artists) - end - end - should "Parse Pawoo URLs correctly" do assert(Source::URL.image_url?("https://img.pawoo.net/media_attachments/files/001/297/997/small/c4272a09570757c2.png")) assert(Source::URL.image_url?("https://pawoo.net/media/lU2uV7C1MMQSb1czwvg"))