require 'test_helper' module Sources class PixivSketchTest < ActiveSupport::TestCase context "A Pixiv Sketch source" do should "work for a post with a single image" do source = Source::Extractor.find("https://sketch.pixiv.net/items/5835314698645024323") assert_equal("Pixiv Sketch", source.site_name) assert_equal(["https://img-sketch.pixiv.net/uploads/medium/file/9986983/8431631593768139653.jpg"], source.image_urls) assert_equal("https://sketch.pixiv.net/items/5835314698645024323", source.page_url) assert_equal("https://sketch.pixiv.net/@user_ejkv8372", source.profile_url) assert_equal(["https://sketch.pixiv.net/@user_ejkv8372", "https://www.pixiv.net/users/44772126"], source.profile_urls) assert_equal("user_ejkv8372", source.artist_name) assert_equal(["user_ejkv8372", "サコ"], source.other_names) assert_equal("🍻シャンクスずミホヌク誕生日おめでずう🍻過去絵 ", source.artist_commentary_desc) assert_equal([], source.tags.map(&:first)) assert_nothing_raised { source.to_h } end should "work for an image url without a referer" do # page: https://sketch.pixiv.net/items/8052785510155853613 source = Source::Extractor.find("https://img-sketch.pixiv.net/uploads/medium/file/9988973/7216948861306830496.jpg") assert_equal(["https://img-sketch.pixiv.net/uploads/medium/file/9988973/7216948861306830496.jpg"], source.image_urls) assert_nil(source.page_url) assert_nil(source.profile_url) assert_equal([], source.profile_urls) assert_nil(source.artist_name) assert_equal([], source.other_names) assert_nil(source.artist_commentary_desc) assert_equal([], source.tags.map(&:first)) assert_nothing_raised { source.to_h } end should "work for an image url with a referer" do source = Source::Extractor.find("https://img-sketch.pixiv.net/uploads/medium/file/9988973/7216948861306830496.jpg", "https://sketch.pixiv.net/items/8052785510155853613") assert_equal("https://sketch.pixiv.net/items/8052785510155853613", source.page_url) assert_equal("https://sketch.pixiv.net/@op-one", source.profile_url) assert_equal(["https://sketch.pixiv.net/@op-one", "https://www.pixiv.net/users/5903369"], source.profile_urls) assert_equal("op-one", source.artist_name) assert_equal(["op-one", "俺P号"], source.other_names) assert_match(/\A3月3日は「うさぎの日」らしいので/, source.artist_commentary_desc) assert_equal(%w[制䜜過皋 このすば この玠晎らしい䞖界に祝犏を セナ バニヌ 3月3日 å·šä¹³ 黒髪巚乳 タむツ], source.tags.map(&:first)) assert_nothing_raised { source.to_h } end should "work for a NSFW post" do source = Source::Extractor.find("https://sketch.pixiv.net/items/193462611994864256") assert_equal(["https://img-sketch.pixiv.net/uploads/medium/file/884876/4909517173982299587.jpg"], source.image_urls) assert_equal("https://sketch.pixiv.net/items/193462611994864256", source.page_url) assert_equal("https://sketch.pixiv.net/@lithla", source.profile_url) assert_equal(["https://sketch.pixiv.net/@lithla", "https://www.pixiv.net/users/4957"], source.profile_urls) assert_equal("lithla", source.artist_name) assert_equal(["lithla", "リリスラりダ"], source.other_names) assert_equal("チビッコ露出プレむ ピヌス", source.artist_commentary_desc) assert_equal([], source.tags.map(&:first)) assert_nothing_raised { source.to_h } end should "work for a post with a multiple images" do source = Source::Extractor.find("https://sketch.pixiv.net/items/8052785510155853613") assert_equal(%w[ https://img-sketch.pixiv.net/uploads/medium/file/9988964/1564052114639195387.png https://img-sketch.pixiv.net/uploads/medium/file/9988965/3187185972065199018.png https://img-sketch.pixiv.net/uploads/medium/file/9988966/5281789458380074490.png https://img-sketch.pixiv.net/uploads/medium/file/9988967/8187710652175488805.png https://img-sketch.pixiv.net/uploads/medium/file/9988968/3497441770651131427.png https://img-sketch.pixiv.net/uploads/medium/file/9988969/1770110164450415039.png https://img-sketch.pixiv.net/uploads/medium/file/9988970/1340350233137289970.png https://img-sketch.pixiv.net/uploads/medium/file/9988971/9105451079763734305.jpg https://img-sketch.pixiv.net/uploads/medium/file/9988972/2641925439408057307.jpg https://img-sketch.pixiv.net/uploads/medium/file/9988973/7216948861306830496.jpg ], source.image_urls) assert_equal("https://sketch.pixiv.net/items/8052785510155853613", source.page_url) assert_equal("https://sketch.pixiv.net/@op-one", source.profile_url) assert_equal("op-one", source.artist_name) assert_equal(<<~EOS.normalize_whitespace, source.artist_commentary_desc) 3月3日は「うさぎの日」らしいので ▌制䜜過皋 ◎制䜜過皋 ①() ②() ③()+色 ④1原(原) â‘€1原(原)(線のみ) ⑥色 ⑊仕䞊げ⇒完成 ⑚完成() ⑧完成() 色たで぀ける時間ず心の䜙裕が無いのでモノクロでらくがき それでも5時間ぐらいかかっおる(③④の間で30分ぐらい雑務) やっぱから原は時間かかる  ・線画だけから立䜓が把握できない(頭の䞭で3D化できない) ・描き続けおるず立䜓感がゲシュタルト厩壊する ・目のピントが合わない ので12回䌑憩しお目ず頭䌑たせないずいけないのがき぀い 目ず頭のスタミナ䞍足は劂䜕ずもしがたい 線画のみから感芚的に立䜓把握できる「確かめ算」みたいな手法を緎りこむ必芁がある のはわかっおるけど 「断面図」 「透明な板を蚭定しお奥行きパヌス確認」 「地面に正方圢を描いお瞊パヌス確認」 「関節郚や胎䜓䞭倮郚に栞(äžž)を描いお立䜓確認」 「線画」を淡く衚瀺し䞊から簡単な立䜓モデルを描いおみお「倧きさ比率の確認」  ぐらいかな思い぀くのは あず初期に足銖の関節玠䜓描いお立䜓把握しおる跡がある いただに関節の軞を足銖のドコに蚭定すれば自然に芋えるか迷う 倚分最倧に䌞ばしたり曲げたりしおるずきは関節浮いおたりするんだろうから簡単な軞蚭定だず違和感が出おくるんだずは思う #制䜜過皋 #このすば #この玠晎らしい䞖界に祝犏を #セナ #バニヌ #3月3日 #å·šä¹³ #黒髪巚乳 #タむツ EOS assert_equal(%w[制䜜過皋 このすば この玠晎らしい䞖界に祝犏を セナ バニヌ 3月3日 å·šä¹³ 黒髪巚乳 タむツ], source.tags.map(&:first)) assert_nothing_raised { source.to_h } end should "Parse Pixiv Sketch URLs correctly" do assert(Source::URL.image_url?("https://img-sketch.pixiv.net/uploads/medium/file/4463372/8906921629213362989.jpg ")) assert(Source::URL.image_url?("https://img-sketch.pximg.net/c!/w=540,f=webp:jpeg/uploads/medium/file/4463372/8906921629213362989.jpg")) assert(Source::URL.image_url?("https://img-sketch.pixiv.net/c/f_540/uploads/medium/file/9986983/8431631593768139653.jpg")) assert(Source::URL.page_url?("https://sketch.pixiv.net/items/5835314698645024323")) assert(Source::URL.profile_url?("https://sketch.pixiv.net/@user_ejkv8372")) end end end end