require "test_helper" module Sources class FantiaTest < ActiveSupport::TestCase def setup super skip "session_id cookie not set" unless Danbooru.config.fantia_session_id.present? end context "A c.fantia.jp/uploads/post/file/ url" do should "work" do url = "https://c.fantia.jp/uploads/post/file/1070093/16faf0b1-58d8-4aac-9e86-b243063eaaf1.jpeg" source = Source::Extractor.find(url) assert_equal([url], source.image_urls) assert_equal("豆ラッコ", source.other_names.first) assert_equal("https://fantia.jp/fanclubs/27264", source.profile_url) assert_equal("https://fantia.jp/posts/1070093", source.page_url) assert_equal([], source.tags) assert_equal("大きく育った心春ちゃん1", source.artist_commentary_title) assert_equal("色々やります", source.artist_commentary_desc) assert_downloaded(3_692_131, url) assert_nothing_raised { source.to_h } end end context "A c.fantia.jp/uploads/post_content_photo/ url" do should "work" do url = "https://cc.fantia.jp/uploads/post_content_photo/file/7087182/main_7f04ff3c-1f08-450f-bd98-796c290fc2d1.jpg?Key-Pair-Id=APKAIOCKYZS7WKBB6G7A&Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly9jYy5mYW50aWEuanAvdXBsb2Fkcy9wb3N0X2NvbnRlbnRfcGhvdG8vZmlsZS83MDg3MTgyL21haW5fN2YwNGZmM2MtMWYwOC00NTBmLWJkOTgtNzk2YzI5MGZjMmQxLmpwZyIsIkNvbmRpdGlvbiI6eyJEYXRlTGVzc1RoYW4iOnsiQVdTOkVwb2NoVGltZSI6MTY0NjkyODAzN319fV19&Signature=wl2Nr9i1O5R5dDc7FB-8CKtRvyZPS6ZEFXn7Q74rBh9R2PZkpKuQUDDsJubgkYaHrqHEapcOdZczzZaM5kbRLXGPOnVFUE7vHKnXZTO~Z1-Z8Cqt823NKCR-AXBjYPhQoGP0pITLYkjhofy0FXg6RYJ0oNJPdKkdjcnwzr-nZfyaFgkrrQ5~LRDhW5HOgSNfvhJleMRLRgLtXbbgNnVwHmpFWNkFSwwmDcUTXTh4hrhQrOJ~xJmiQesSP1wPAE5ZZSBGsbUstOa5Y1nVu540wItR4VWLm-jjuMk9OIr-Nvxg0ocoP9WU13WrRbeMeL5X0xhxBYSxgVIKXko2BqMf5w__" ref = "https://fantia.jp/posts/1132267" source = Source::Extractor.find(url, ref) assert_equal("稲光伸二", source.other_names.first) assert_equal("https://fantia.jp/fanclubs/1096", source.profile_url) assert_equal(ref, source.page_url) assert_equal(["オリジナル", "漫画"], source.tags.map(&:first)) assert_equal("黒い歴史(5)", source.artist_commentary_title) assert_match(/^この回から絵はほとんど今と/, source.artist_commentary_desc) assert_nothing_raised { source.to_h } end end context "A c.fantia.jp/uploads/product/image/ url" do should "work" do url = "https://c.fantia.jp/uploads/product/image/249638/fd5aef8f-c217-49d0-83e8-289efb33dfc4.jpg" source = Source::Extractor.find(url) tags = ["イラスト集", "CG集", "PNG", "オリジナル", "宮前詩帆", "春川朱璃愛", "夏川黒羽", "ASMR", "音声", "原神", "シニョーラ"] assert_equal([url], source.image_urls) assert_match(/電波暗室/, source.other_names.first) assert_equal("https://fantia.jp/fanclubs/7", source.profile_url) assert_equal("https://fantia.jp/products/249638", source.page_url) assert_equal(tags, source.tags.map(&:first)) assert_equal("2021年9月更新分[PNG] - September 2021", source.artist_commentary_title) assert_match(/This is the same as the image data updated in September 2021/, source.artist_commentary_desc) assert_downloaded(288_801, url) assert_nothing_raised { source.to_h } end end context "A c.fantia.jp/uploads/product_image/file sample url" do should "work" do url = "https://c.fantia.jp/uploads/product_image/file/219407/main_bd7419c2-2450-4c53-a28a-90101fa466ab.jpg" ref = "https://fantia.jp/products/249638" source = Source::Extractor.find(url, ref) assert_equal(["https://c.fantia.jp/uploads/product_image/file/219407/bd7419c2-2450-4c53-a28a-90101fa466ab.jpg"], source.image_urls) assert_equal("https://fantia.jp/fanclubs/7", source.profile_url) assert_equal("https://fantia.jp/products/249638", source.page_url) assert_equal("2021年9月更新分[PNG] - September 2021", source.artist_commentary_title) assert_downloaded(613_103, url) assert_nothing_raised { source.to_h } end end context "A fantia.jp/posts/$id/download url" do should "work" do url = "https://fantia.jp/posts/1143951/download/1830956" source = Source::Extractor.find(url) assert_match(%r{1830956/cbcdfcbe_20220224_120_040_100.png}, source.image_urls.sole) assert_equal("松永紅葉", source.other_names.first) assert_equal("https://fantia.jp/fanclubs/322", source.profile_url) assert_equal("https://fantia.jp/posts/1143951", source.page_url) assert_equal([], source.tags) assert_equal("今日の一枚3186 (1:20+0:40+1:00)", source.artist_commentary_title) assert_equal("今日の一枚3186 (1:20+0:40+1:00)", source.artist_commentary_desc) assert_downloaded(14_371_816, url) assert_nothing_raised { source.to_h } end end context "A fantia.jp/posts/$id url" do should "work" do url = "https://fantia.jp/posts/1143951" source = Source::Extractor.find(url) assert_equal("https://c.fantia.jp/uploads/post/file/1143951/47491020-a6c6-47db-b09e-815b0530c0bc.png", source.image_urls.first) assert_match(%r{1830956/cbcdfcbe_20220224_120_040_100.png}, source.image_urls.second) assert_equal("松永紅葉", source.other_names.first) assert_equal("https://fantia.jp/fanclubs/322", source.profile_url) assert_equal("https://fantia.jp/posts/1143951", source.page_url) assert_equal([], source.tags) assert_equal("今日の一枚3186 (1:20+0:40+1:00)", source.artist_commentary_title) assert_equal("今日の一枚3186 (1:20+0:40+1:00)", source.artist_commentary_desc) assert_downloaded(1_157_953, source.image_urls[0]) assert_downloaded(14_371_816, source.image_urls[1]) assert_nothing_raised { source.to_h } end end context "A fantia.jp/products/$id url" do should "work" do url = "https://fantia.jp/products/249638" source = Source::Extractor.find(url) image_urls = %w[ https://c.fantia.jp/uploads/product/image/249638/fd5aef8f-c217-49d0-83e8-289efb33dfc4.jpg https://c.fantia.jp/uploads/product_image/file/219406/c73bd7f9-a13a-48f7-9ac7-35309faa88c3.jpg https://c.fantia.jp/uploads/product_image/file/219407/bd7419c2-2450-4c53-a28a-90101fa466ab.jpg https://c.fantia.jp/uploads/product_image/file/219408/50aae3fd-11c5-4679-a584-e4276617d4b9.jpg https://c.fantia.jp/uploads/product_image/file/219409/1e777b93-2672-4a5d-8076-91b3766d3664.jpg ] assert_equal(image_urls, source.image_urls) assert_equal("https://fantia.jp/fanclubs/7", source.profile_url) assert_equal("https://fantia.jp/products/249638", source.page_url) assert_downloaded(288_801, source.image_urls[0]) assert_downloaded(515_598, source.image_urls[1]) assert_downloaded(613_103, source.image_urls[2]) assert_downloaded(146_837, source.image_urls[3]) assert_downloaded(78_316, source.image_urls[4]) assert_nothing_raised { source.to_h } end end context "A product url with no images" do should "not get placeholder images" do source = Source::Extractor.find("https://fantia.jp/products/10000") assert_equal([], source.image_urls) assert_nothing_raised { source.to_h } end end context "A deleted or non-existing fantia url" do should "work" do url1 = "https://fantia.jp/posts/12345678901234567890" url2 = "https://fantia.jp/products/12345678901234567890" source1 = Source::Extractor.find(url1) source2 = Source::Extractor.find(url2) assert_equal([], source1.image_urls) assert_equal([], source2.image_urls) assert_nothing_raised { source1.to_h } assert_nothing_raised { source2.to_h } end end should "Parse Fantia URLs correctly" do assert(Source::URL.image_url?("https://c.fantia.jp/uploads/post/file/1070093/16faf0b1-58d8-4aac-9e86-b243063eaaf1.jpeg")) assert(Source::URL.image_url?("https://c.fantia.jp/uploads/product/image/249638/main_fd5aef8f-c217-49d0-83e8-289efb33dfc4.jpg")) assert(Source::URL.image_url?("https://c.fantia.jp/uploads/product_image/file/219407/bd7419c2-2450-4c53-a28a-90101fa466ab.jpg")) assert(Source::URL.image_url?("https://cc.fantia.jp/uploads/post_content_photo/file/4563389/main_a9763427-3ccd-4e51-bcde-ff5e1ce0aa56.jpg?Key-Pair-Id=APKAIOCKYZS7WKBB6G7A&Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly9jYy5mYW50aWEuanAvdXBsb2Fkcy9wb3N0X2NvbnRlbnRfcGhvdG8vZmlsZS80NTYzMzg5L21haW5fYTk3NjM0MjctM2NjZC00ZTUxLWJjZGUtZmY1ZTFjZTBhYTU2LmpwZyIsIkNvbmRpdGlvbiI6eyJEYXRlTGVzc1RoYW4iOnsiQVdTOkVwb2NoVGltZSI6MTY0NjkxMzk3OH19fV19&Signature=jyW5ankfO9uCHlKkozYU9RPpO3jzKTW2HuyXgS81i~cRgrXcI9orYU0IXuiit~0TznIyXbB7F~6Z790t7lX948PYAb9luYIREJC2u7pRMP3OBbsANbbFE0o4VR-6O3ZKbYQ4aG~ofVEZfiFVGoKoVtdJxj0bBNQV29eeFylGQATkFmywne1YMtJMqDirRBFMIatqNuunGsiWCQHqLYNHCeS4dZXlOnV8JQq0u1rPkeAQBmDCStFMA5ywjnWTfSZK7RN6RXKCAsMTXTl5X~I6EZASUPoGQy2vHUj5I-veffACg46jpvqTv6mLjQEw8JG~JLIOrZazKZR9O2kIoLNVGQ__")) assert(Source::URL.image_url?("https://cc.fantia.jp/uploads/post_content/file/1830956/cbcdfcbe_20220224_120_040_100.png?Key-Pair-Id=APKAIOCKYZS7WKBB6G7A&Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly9jYy5mYW50aWEuanAvdXBsb2Fkcy9wb3N0X2NvbnRlbnQvZmlsZS8xODMwOTU2L2NiY2RmY2JlXzIwMjIwMjI0XzEyMF8wNDBfMTAwLnBuZyIsIkNvbmRpdGlvbiI6eyJEYXRlTGVzc1RoYW4iOnsiQVdTOkVwb2NoVGltZSI6MTY0NjkxNDU4Nn19fV19&Signature=d1nw8gs9vcshIAeEH4oESm9-7z6y4A7MfoIRRvtUtV9iqTNA8KM0ORuCI7NwEoYc1VHsxy9ByeuSBpNaJoknnc3TOmHFhVRcLn~OWpnWqiHEPpMcSEG7uGlorysjEPmYYRGHjE7LJYcWiiJxjZ~fSBbYzxxwsjroPm-fyGUtNhdJWEMNp52vHe5P9KErb7M8tP01toekGdOqO-pkWm1t9xm2Tp5P7RWcbtQPOixgG4UgOhE0f3LVwHGHYJV~-lB5RjrDbTTO3ezVi7I7ybZjjHotVUK5MbHHmXzC1NqI-VN3vHddTwTbTK9xEnPMR27NHSlho3-O18WcNs1YgKD48w__")) assert(Source::URL.image_url?("https://fantia.jp/posts/1143951/download/1830956")) assert(Source::URL.page_url?("https://fantia.jp/posts/1148334")) assert(Source::URL.page_url?("https://fantia.jp/products/249638")) assert(Source::URL.profile_url?("https://fantia.jp/fanclubs/64496")) assert(Source::URL.profile_url?("https://fantia.jp/asanagi")) end end end