Nicoseiga: rewrite tests and fix several bugs

* Fixed a bug where manga posts with a single tag would raise an error
* Fixed a bug where dic.nicovideo.jp/oekaki posts weren't uploadable due
  to SSL issues
* Added support for more manga corner cases
This commit is contained in:
nonamethanks
2022-09-29 00:46:47 +02:00
committed by N. Oname
parent d629c81aa1
commit d51cc17eaf
6 changed files with 212 additions and 179 deletions

View File

@@ -40,7 +40,7 @@ module Danbooru
attr_accessor :max_size, :http
class << self
delegate :get, :head, :put, :post, :delete, :cache, :follow, :max_size, :timeout, :auth, :basic_auth, :headers, :cookies, :use, :public_only, :download_media, to: :new
delegate :get, :head, :put, :post, :delete, :cache, :follow, :max_size, :timeout, :auth, :basic_auth, :headers, :cookies, :use, :public_only, :with_legacy_ssl, :download_media, to: :new
end
def initialize
@@ -136,6 +136,18 @@ module Danbooru
end
end
# allow requests to sites using unsafe legacy renegotiations (such as dic.nicovideo.jp)
# see https://github.com/openssl/openssl/commit/72d2670bd21becfa6a64bb03fa55ad82d6d0c0f3
def with_legacy_ssl
dup.tap do |o|
o.http = o.http.dup.tap do |http|
ctx = OpenSSL::SSL::SSLContext.new
ctx.options |= OpenSSL::SSL::OP_LEGACY_SERVER_CONNECT
http.default_options = http.default_options.with_ssl_context(ctx)
end
end
end
concerning :DownloadMethods do
# Download a file from `url` and return a {MediaFile}.
#

View File

@@ -19,12 +19,7 @@ class NicoSeigaApiClient
when "illust"
[api_response["id"]]
when "manga"
manga_api_response.map do |x|
case x["meta"]["source_url"]
when %r{/thumb/(\d+)\w}i then Regexp.last_match(1)
when %r{nicoseiga\.cdn\.nimg\.jp/drm/image/\w+/(\d+)\w}i then Regexp.last_match(1)
end
end
manga_api_response.map { |x| Source::URL.parse(x.dig("meta", "source_url"))&.image_id }.compact
end
end
@@ -37,11 +32,21 @@ class NicoSeigaApiClient
end
def tags
api_response.dig("tag_list", "tag").to_a.map { |t| t["name"] }.compact
tags = api_response.dig("tag_list", "tag")
if tags.instance_of? Hash
# When a manga post has a single tag, the XML parser thinks it's a hash instead of an array of hashes,
# so we need to manually turn it into the latter. Example: https://seiga.nicovideo.jp/watch/mg302561
tags = [tags]
end
tags.to_a.map { |t| t["name"] }.compact
end
def user_id
api_response["user_id"]
if api_response["user_id"].to_i == 0 # anonymous: https://nico.ms/mg310193
nil
else
api_response["user_id"]
end
end
def user_name
@@ -80,6 +85,7 @@ class NicoSeigaApiClient
end
def user_api_response(user_id)
return {} unless user_id.present?
resp = get("#{XML_API}/user/info?id=#{user_id}")
return {} if resp.blank? || resp.code.to_i == 404
Hash.from_xml(resp.to_s)["response"]["user"]

View File

@@ -95,6 +95,14 @@ module Source
parsed_url.manga_id || parsed_referer&.manga_id
end
def http
if parsed_url.oekaki_id.present?
super.with_legacy_ssl
else
super
end
end
def api_client
if illust_id.present?
NicoSeigaApiClient.new(work_id: illust_id, type: "illust", http: http)

View File

@@ -18,8 +18,7 @@
# Unhandled URLs
#
# * https://lohas.nicoseiga.jp/material/5746c5/4459092
# * https://dic.nicovideo.jp/oekaki/52833.png
#
module Source
class URL::NicoSeiga < Source::URL
attr_reader :illust_id, :manga_id, :image_id, :oekaki_id, :sm_video_id, :nm_video_id, :user_id, :username, :profile_url
@@ -92,6 +91,10 @@ module Source
in "dcdn.cdn.nimg.jpg", *, /^\d+$/ => image_id
@image_id = image_id
# https://deliver.cdn.nicomanga.jp/thumb/7891081p?1590171867
in "deliver.cdn.nicomanga.jp", "thumb", /^(\d+)p$/ => image_id
@image_id = $1
# https://deliver.cdn.nicomanga.jp/thumb/aHR0cHM6Ly9kZWxpdmVyLmNkbi5uaWNvbWFuZ2EuanAvdGh1bWIvODEwMDk2OHA_MTU2NTY5OTg4MA.webp (page: https://seiga.nicovideo.jp/watch/mg316708, full image: https://lohas.nicoseiga.jp/priv/1f6d38ef2ba6fc9d9e27823babc4cf721cef16ec/1646906617/8100969)
in "deliver.cdn.nicomanga.jp", *rest
# unhandled
@@ -131,7 +134,7 @@ module Source
# https://www.nicovideo.jp/user/4572975
# https://www.nicovideo.jp/user/20446930/mylist/28674289
in ("www.nicovideo.jp"), "user", /^\d+$/ => user_id, *rest
in "www.nicovideo.jp", "user", /^\d+$/ => user_id, *rest
@user_id = user_id
@profile_url = "https://www.nicovideo.jp/user/#{user_id}"
@@ -191,8 +194,8 @@ module Source
"https://www.nicovideo.jp/watch/sm#{sm_video_id}"
elsif oekaki_id.present?
"https://dic.nicovideo.jp/oekaki_id/#{oekaki_id}"
#elsif image_id.present?
# "https://seiga.nicovideo.jp/image/source/#{image_id}"
# elsif image_id.present?
# "https://seiga.nicovideo.jp/image/source/#{image_id}"
end
end
end

View File

@@ -5,7 +5,7 @@ module SourceTestHelper
# * If deleted is true, it skips the downloading check, but it still tries everything else and makes sure nothing breaks.
# * Any passed kwargs parameter is tested against the strategy.
def strategy_should_work(url, arguments)
def strategy_should_work(url, arguments = {})
# XXX: can't use **kwargs because of a bug with shoulda-context
referer, download_size, deleted = [:referer, :download_size, :deleted].map { |arg| arguments.delete(arg) }
@@ -86,15 +86,15 @@ module SourceTestHelper
# check any method that is passed as kwargs, in order to hardcode as few things as possible
# XXX can't use **kwargs because of a bug with shoulda-context, so we're using a hash temporarily
methods_to_test.each do |method_name, expected_value|
actual_value = strategy.try(method_name)
actual_value = strategy.public_send(method_name)
should "make sure that '#{method_name}' matches" do
if expected_value.instance_of? Regexp
assert_match(expected_value, actual_value)
elsif expected_value.instance_of? Array
if expected_value.first.instance_of? Regexp
actual_values = actual_value.sort
expected_value.sort.each_with_index { |each_value, index| assert_match(each_value, actual_values[index]) }
# We don't sort actual_value here because sites like nicoseiga have variable values right in the middle of the url, like timestamps
expected_value.zip(actual_value).map { |expected_regex, actual_string| assert_match(expected_regex, actual_string) }
else
assert_equal(expected_value.sort, actual_value.sort)
end

View File

@@ -6,157 +6,188 @@ module Sources
skip "NicoSeiga credentials not configured" unless Source::Extractor::NicoSeiga.enabled?
end
context "The source site for nico seiga" do
setup do
@site_1 = Source::Extractor.find("http://lohas.nicoseiga.jp/o/910aecf08e542285862954017f8a33a8c32a8aec/1433298801/4937663")
@site_2 = Source::Extractor.find("http://seiga.nicovideo.jp/seiga/im4937663")
@site_3 = Source::Extractor.find("https://seiga.nicovideo.jp/watch/mg470189?track=ct_episode")
end
should "get the profile" do
assert_equal("https://seiga.nicovideo.jp/user/illust/7017777", @site_1.profile_url)
assert_equal("https://seiga.nicovideo.jp/user/illust/7017777", @site_2.profile_url)
assert_equal("https://seiga.nicovideo.jp/user/illust/20797022", @site_3.profile_url)
end
should "get the artist name" do
assert_equal("osamari", @site_1.artist_name)
assert_equal("osamari", @site_2.artist_name)
assert_equal("風呂", @site_3.artist_name)
end
should "get the artist commentary" do
assert_equal("コジコジ", @site_2.artist_commentary_title)
assert_equal("コジコジのドット絵\nこんなかわいらしい容姿で毒を吐くコジコジが堪らん(切実)", @site_2.artist_commentary_desc)
assert_equal("ハコ女子 1ハコ目", @site_3.artist_commentary_title)
assert_equal("同じクラスの箱田さんはいつもハコを被っている。しかしてその素顔は… twitter(@hakojoshi1)にてだいたい毎日更新中。こっちだともうちょっと先まで読めるよ。", @site_3.artist_commentary_desc)
end
should "get the image url(s)" do
assert_match(%r{^https?://lohas\.nicoseiga\.jp/priv/}, @site_1.image_urls.sole)
assert_match(%r{^https?://lohas\.nicoseiga\.jp/priv/}, @site_2.image_urls.sole)
expected = [
%r{https://lohas\.nicoseiga\.jp/priv/\h+/\d+/10315315},
%r{https://lohas\.nicoseiga\.jp/priv/\h+/\d+/10315318},
%r{https://lohas\.nicoseiga\.jp/priv/\h+/\d+/10315319},
%r{https://lohas\.nicoseiga\.jp/priv/\h+/\d+/10315320},
%r{https://lohas\.nicoseiga\.jp/priv/\h+/\d+/10315321},
%r{https://lohas\.nicoseiga\.jp/priv/\h+/\d+/10315322},
%r{https://lohas\.nicoseiga\.jp/priv/\h+/\d+/10315323},
%r{https://lohas\.nicoseiga\.jp/priv/\h+/\d+/10315324},
%r{https://lohas\.nicoseiga\.jp/priv/\h+/\d+/10315316},
]
assert_equal(9, @site_3.image_urls.size)
9.times { |n| assert_match(expected[n], @site_3.image_urls[n]) }
end
should "get the page url" do
assert_equal("https://seiga.nicovideo.jp/seiga/im4937663", @site_1.page_url)
assert_equal("https://seiga.nicovideo.jp/seiga/im4937663", @site_2.page_url)
assert_equal("https://seiga.nicovideo.jp/watch/mg470189", @site_3.page_url)
end
should "get the tags" do
assert_not(@site_1.tags.empty?)
first_tag = @site_1.tags.first
assert_equal(["アニメ", "https://seiga.nicovideo.jp/tag/%E3%82%A2%E3%83%8B%E3%83%A1"], first_tag)
assert_not(@site_2.tags.empty?)
first_tag = @site_2.tags.first
assert_equal(["アニメ", "https://seiga.nicovideo.jp/tag/%E3%82%A2%E3%83%8B%E3%83%A1"], first_tag)
assert_not(@site_3.tags.empty?)
first_tag = @site_3.tags.first
assert_equal(["4コマ漫画", "https://seiga.nicovideo.jp/manga/tag/4%E3%82%B3%E3%83%9E%E6%BC%AB%E7%94%BB"], first_tag)
end
should "convert a page into a json representation" do
assert_nothing_raised { @site_1.to_h }
assert_nothing_raised { @site_2.to_h }
assert_nothing_raised { @site_3.to_h }
end
should "work for a https://lohas.nicoseiga.jp/thumb/${id}i url" do
site = Source::Extractor.find("https://lohas.nicoseiga.jp/thumb/6844226i")
assert_match(%r!https?://lohas.nicoseiga.jp/priv/[a-f0-9]{40}/[0-9]+/6844226!, site.image_urls.sole)
assert_match("https://seiga.nicovideo.jp/seiga/im6844226", site.page_url)
end
context "A nicoseiga post url" do
tags = [
["アニメ", "https://seiga.nicovideo.jp/tag/%E3%82%A2%E3%83%8B%E3%83%A1"],
["コジコジ", "https://seiga.nicovideo.jp/tag/%E3%82%B3%E3%82%B8%E3%82%B3%E3%82%B8"],
["さくらももこ", "https://seiga.nicovideo.jp/tag/%E3%81%95%E3%81%8F%E3%82%89%E3%82%82%E3%82%82%E3%81%93"],
["ドット絵", "https://seiga.nicovideo.jp/tag/%E3%83%89%E3%83%83%E3%83%88%E7%B5%B5"],
["ニコニコ大百科", "https://seiga.nicovideo.jp/tag/%E3%83%8B%E3%82%B3%E3%83%8B%E3%82%B3%E5%A4%A7%E7%99%BE%E7%A7%91"],
["お絵カキコ", "https://seiga.nicovideo.jp/tag/%E3%81%8A%E7%B5%B5%E3%82%AB%E3%82%AD%E3%82%B3"],
]
strategy_should_work(
"http://seiga.nicovideo.jp/seiga/im4937663",
image_urls: [%r{https://lohas\.nicoseiga\.jp/priv/\h+/\d+/4937663}],
download_size: 2_032,
page_url: "https://seiga.nicovideo.jp/seiga/im4937663",
tags: tags,
artist_name: "osamari",
tag_name: "nicoseiga7017777",
profile_url: "https://seiga.nicovideo.jp/user/illust/7017777",
artist_commentary_title: "コジコジ",
artist_commentary_desc: "コジコジのドット絵\nこんなかわいらしい容姿で毒を吐くコジコジが堪らん(切実)"
)
end
context "A manga upload through bookmarklet" do
setup do
@url = "https://seiga.nicovideo.jp/image/source/9146749"
@ref = "https://seiga.nicovideo.jp/watch/mg389884"
@site = Source::Extractor.find(@url, @ref)
end
should "get the correct pic" do
assert_match(%r!https?://lohas.nicoseiga.jp/priv/[a-f0-9]{40}/[0-9]+/9146749!, @site.image_urls.sole)
end
should "get the page url" do
assert_equal(@ref, @site.page_url)
end
context "A nicoseiga image url" do
tags = [
["アニメ", "https://seiga.nicovideo.jp/tag/%E3%82%A2%E3%83%8B%E3%83%A1"],
["コジコジ", "https://seiga.nicovideo.jp/tag/%E3%82%B3%E3%82%B8%E3%82%B3%E3%82%B8"],
["さくらももこ", "https://seiga.nicovideo.jp/tag/%E3%81%95%E3%81%8F%E3%82%89%E3%82%82%E3%82%82%E3%81%93"],
["ドット絵", "https://seiga.nicovideo.jp/tag/%E3%83%89%E3%83%83%E3%83%88%E7%B5%B5"],
["ニコニコ大百科", "https://seiga.nicovideo.jp/tag/%E3%83%8B%E3%82%B3%E3%83%8B%E3%82%B3%E5%A4%A7%E7%99%BE%E7%A7%91"],
["お絵カキコ", "https://seiga.nicovideo.jp/tag/%E3%81%8A%E7%B5%B5%E3%82%AB%E3%82%AD%E3%82%B3"],
]
strategy_should_work(
"http://lohas.nicoseiga.jp/o/910aecf08e542285862954017f8a33a8c32a8aec/1433298801/4937663",
image_urls: [%r{https://lohas\.nicoseiga\.jp/priv/\h+/\d+/4937663}],
download_size: 2_032,
page_url: "https://seiga.nicovideo.jp/seiga/im4937663",
tags: tags,
artist_name: "osamari",
tag_name: "nicoseiga7017777",
profile_url: "https://seiga.nicovideo.jp/user/illust/7017777",
artist_commentary_title: "コジコジ",
artist_commentary_desc: "コジコジのドット絵\nこんなかわいらしい容姿で毒を吐くコジコジが堪らん(切実)"
)
end
context "A manga image" do
should "work" do
@source = Source::Extractor.find("https://drm.cdn.nicomanga.jp/image/d4a2faa68ec34f95497db6601a4323fde2ccd451_9537/8017978p?1570012695")
context "A nicoseiga manga url" do
image_urls = [
%r{https://lohas\.nicoseiga\.jp/priv/\h+/\d+/10315315},
%r{https://lohas\.nicoseiga\.jp/priv/\h+/\d+/10315318},
%r{https://lohas\.nicoseiga\.jp/priv/\h+/\d+/10315319},
%r{https://lohas\.nicoseiga\.jp/priv/\h+/\d+/10315320},
%r{https://lohas\.nicoseiga\.jp/priv/\h+/\d+/10315321},
%r{https://lohas\.nicoseiga\.jp/priv/\h+/\d+/10315322},
%r{https://lohas\.nicoseiga\.jp/priv/\h+/\d+/10315323},
%r{https://lohas\.nicoseiga\.jp/priv/\h+/\d+/10315324},
%r{https://lohas\.nicoseiga\.jp/priv/\h+/\d+/10315316},
]
assert_match(%r{\Ahttps://lohas\.nicoseiga\.jp/priv/\h{40}/\d+/8017978\z}, @source.image_urls.sole)
end
strategy_should_work(
"https://seiga.nicovideo.jp/watch/mg470189?track=ct_episode",
image_urls: image_urls,
page_url: "https://seiga.nicovideo.jp/watch/mg470189",
artist_name: "風呂",
profile_url: "https://seiga.nicovideo.jp/user/illust/20797022",
artist_commentary_title: "ハコ女子 1ハコ目",
artist_commentary_desc: "同じクラスの箱田さんはいつもハコを被っている。しかしてその素顔は… twitter(@hakojoshi1)にてだいたい毎日更新中。こっちだともうちょっと先まで読めるよ。"
)
end
context "A nico.ms illust URL" do
should "work" do
@source = Source::Extractor.find("https://nico.ms/im10922621")
assert_match(%r{\Ahttps://lohas\.nicoseiga\.jp/priv/\h{40}/\d+/10922621\z}, @source.image_urls.sole)
end
context "A https://lohas.nicoseiga.jp/thumb/${id}i url" do
strategy_should_work(
"https://lohas.nicoseiga.jp/thumb/6844226i",
image_urls: [%r{https://lohas\.nicoseiga\.jp/priv/\h+/\d+/6844226}],
page_url: "https://seiga.nicovideo.jp/seiga/im6844226"
)
end
context "A nico.ms manga URL" do
should "work" do
@source = Source::Extractor.find("https://nico.ms/mg310193")
context "An image/source/123 url with referrer" do
strategy_should_work(
"https://seiga.nicovideo.jp/image/source/9146749",
referer: "https://seiga.nicovideo.jp/watch/mg389884",
image_urls: [%r{https://lohas\.nicoseiga\.jp/priv/\h+/\d+/9146749}],
page_url: "https://seiga.nicovideo.jp/watch/mg389884"
)
end
assert_equal(19, @source.image_urls.size)
assert_equal("https://seiga.nicovideo.jp/watch/mg310193", @source.page_url)
end
context "A drm.cdn.nicomanga.jp image url" do
strategy_should_work(
"https://drm.cdn.nicomanga.jp/image/d4a2faa68ec34f95497db6601a4323fde2ccd451_9537/8017978p?1570012695",
image_urls: [%r{https://lohas\.nicoseiga\.jp/priv/\h+/\d+/8017978}]
)
end
context "A nico.ms illust url" do
strategy_should_work(
"https://nico.ms/im10922621",
image_urls: [%r{https://lohas\.nicoseiga\.jp/priv/\h+/\d+/10922621}],
page_url: "https://seiga.nicovideo.jp/seiga/im10922621",
profile_url: "https://seiga.nicovideo.jp/user/illust/2258804"
)
end
context "A nico.ms manga url from an anonymous user" do
image_urls = [
%r{https://lohas\.nicoseiga\.jp/priv/\h+/\d+/8017978},
%r{https://lohas\.nicoseiga\.jp/priv/\h+/\d+/8017979},
%r{https://lohas\.nicoseiga\.jp/priv/\h+/\d+/8017980},
%r{https://lohas\.nicoseiga\.jp/priv/\h+/\d+/8017981},
%r{https://lohas\.nicoseiga\.jp/priv/\h+/\d+/8017982},
%r{https://lohas\.nicoseiga\.jp/priv/\h+/\d+/8017983},
%r{https://lohas\.nicoseiga\.jp/priv/\h+/\d+/8017984},
%r{https://lohas\.nicoseiga\.jp/priv/\h+/\d+/8017985},
%r{https://lohas\.nicoseiga\.jp/priv/\h+/\d+/8017986},
%r{https://lohas\.nicoseiga\.jp/priv/\h+/\d+/8017987},
%r{https://lohas\.nicoseiga\.jp/priv/\h+/\d+/8017988},
%r{https://lohas\.nicoseiga\.jp/priv/\h+/\d+/8017989},
%r{https://lohas\.nicoseiga\.jp/priv/\h+/\d+/8017990},
%r{https://lohas\.nicoseiga\.jp/priv/\h+/\d+/8017991},
%r{https://lohas\.nicoseiga\.jp/priv/\h+/\d+/8017992},
%r{https://lohas\.nicoseiga\.jp/priv/\h+/\d+/8017993},
%r{https://lohas\.nicoseiga\.jp/priv/\h+/\d+/8017994},
%r{https://lohas\.nicoseiga\.jp/priv/\h+/\d+/8017995},
%r{https://lohas\.nicoseiga\.jp/priv/\h+/\d+/8017996},
]
strategy_should_work(
"https://nico.ms/mg310193",
image_urls: image_urls,
artist_name: nil,
profile_url: nil,
artist_commentary_title: "ライブダンジョン! 第1話前半"
)
end
context "An anonymous illust" do
strategy_should_work(
"https://seiga.nicovideo.jp/seiga/im520647",
image_urls: [%r{https://lohas\.nicoseiga\.jp/priv/\h+/\d+/520647}],
artist_name: nil,
profile_url: nil
)
end
context "A nicoseiga video" do
should "not raise anything" do
site = Source::Extractor.find("https://www.nicovideo.jp/watch/sm36465441")
assert_nothing_raised { site.to_h }
end
end
context "An anonymous picture" do
should "still work" do
site = Source::Extractor.find("https://seiga.nicovideo.jp/seiga/im520647")
assert_nothing_raised { site.to_h }
end
strategy_should_work(
"https://www.nicovideo.jp/watch/sm36465441"
)
end
context "An age-restricted picture" do
should "still work" do
site = Source::Extractor.find("http://seiga.nicovideo.jp/seiga/im9208126")
assert_match(%r!https?://lohas.nicoseiga.jp/priv/[a-f0-9]{40}/[0-9]+/9208126!, site.image_urls.sole)
assert_nothing_raised { site.to_h }
end
strategy_should_work(
"http://seiga.nicovideo.jp/seiga/im9208126",
image_urls: [%r{https://lohas\.nicoseiga\.jp/priv/\h+/\d+/9208126}],
artist_name: "ちふり",
profile_url: "https://seiga.nicovideo.jp/user/illust/61431040",
tags: ["R-15"],
artist_commentary_title: "ゾーヤさんといっしょ"
)
end
context "An oekaki picture" do
should "still work" do
site = Source::Extractor.find("https://dic.nicovideo.jp/oekaki/52833.png")
assert_nothing_raised { site.to_h }
end
context "An oekaki direct url" do
strategy_should_work(
"https://dic.nicovideo.jp/oekaki/52833.png",
image_urls: ["https://dic.nicovideo.jp/oekaki/52833.png"]
)
end
context "A nicoseiga manga page with a single tag (source of XML misparsing)" do
image_urls = [
%r{https://lohas\.nicoseiga\.jp/priv/\h+/\d+/7891076},
%r{https://lohas\.nicoseiga\.jp/priv/\h+/\d+/7891080},
%r{https://lohas\.nicoseiga\.jp/priv/\h+/\d+/7891081},
]
strategy_should_work(
"https://seiga.nicovideo.jp/watch/mg302561",
image_urls: image_urls,
page_url: "https://seiga.nicovideo.jp/watch/mg302561",
tags: [["ロリ", "https://seiga.nicovideo.jp/manga/tag/%E3%83%AD%E3%83%AA"]],
artist_name: "とろてい",
tag_name: "nicoseiga1848060"
)
end
context "A commentary with spoiler" do
@@ -219,34 +250,7 @@ module Sources
assert(Source::URL.profile_url?("https://3d.nicovideo.jp/u/siobi"))
assert(Source::URL.profile_url?("http://game.nicovideo.jp/atsumaru/users/7757217"))
refute(Source::URL.profile_url?("https://seiga.nicovideo.jp"))
end
context "downloading a 'http://seiga.nicovideo.jp/seiga/:id' url" do
should "download the original file" do
@source = "http://seiga.nicovideo.jp/seiga/im4937663"
@rewrite = %r{https://lohas.nicoseiga.jp/priv/\h{40}/\d+/4937663}
assert_rewritten(@rewrite, @source)
assert_downloaded(2_032, @source)
end
end
context "downloading a 'http://lohas.nicoseiga.jp/o/:hash/:id' url" do
should "download the original file" do
@source = "http://lohas.nicoseiga.jp/o/910aecf08e542285862954017f8a33a8c32a8aec/1433298801/4937663"
@rewrite = %r{https://lohas.nicoseiga.jp/priv/\h{40}/\d+/4937663}
assert_rewritten(@rewrite, @source)
assert_downloaded(2_032, @source)
end
end
context "downloading a 'https://lohas.nicoseiga.jp/thumb/:id' url" do
should "download the original file" do
@source = "https://lohas.nicoseiga.jp/thumb/4937663i"
@rewrite = %r{https://lohas.nicoseiga.jp/priv/\h{40}/\d+/4937663}
assert_rewritten(@rewrite, @source)
assert_downloaded(2_032, @source)
end
assert_not(Source::URL.profile_url?("https://seiga.nicovideo.jp"))
end
end
end