Updated scanner logic to handle thumb VueJS components. Removed uneeded DLSiteWork fields.
All checks were successful
ci / build-test (push) Successful in 2m21s
ci / publish-image (push) Has been skipped

This commit is contained in:
2026-02-28 22:20:24 -05:00
parent ca7ffa1730
commit 704a6fc433
9 changed files with 316 additions and 40 deletions

View File

@@ -49,10 +49,58 @@ public class VoiceWorkScannerTests
result[0].Creators.ShouldBe(["柚木つばめ"]);
result[0].Genres.ShouldBe(["体験版"]);
result[0].Tags.ShouldBe(["バイノーラル/ダミヘ", "手コキ", "足コキ", "パイズリ", "言葉責め", "焦らし", "乳首責め", "本番なし"]);
result[0].Type.ShouldBe(DLSiteWorkType.Released);
result[0].Downloads.ShouldBe(1220);
}
[Fact]
public async Task Scan_With_Updated_Japanese_Locale()
{
string html = await ReadResourceAsync("Japanese-Page-Updated.html");
IHttpService httpService = Substitute.For<IHttpService>();
httpService.GetStringAsync(Arg.Any<string>(), CancellationToken.None)
.Returns(Task.FromResult(html));
HtmlLoader loader = new(httpService);
JapaneseVoiceWorksScanner scanner = new(loader);
VoiceWorkScanOptions options = new(
PageNumber: 1,
PageSize: 100,
ExcludeAIGeneratedWorks: true,
ExcludePartiallyAIGeneratedWorks: true,
ExcludedMakerIds: []
);
var result = await scanner.ScanPageAsync(options, CancellationToken.None);
result.Count.ShouldBe(2);
result[0].SalesDate.ShouldBeNull();
result[0].ExpectedDate.ShouldBe(new DateOnly(2026, 12, 21));
result[0].ProductId.ShouldBe("RJ01536422");
result[0].ProductName.ShouldBe("珈琲屋 綴 / いつもいつでも〜Alone with you〜");
result[0].Description.ShouldBe("珈琲に特化した喫茶店、喫茶綴、外伝。『珈琲屋 綴』の従業員、綴明日菜が、大好きな珈琲と、貴方との時間を大切に育みます。珈琲に特化した喫茶店、喫茶綴の外伝です。CV:野上菜月様");
result[0].Maker.ShouldBe("喫茶綴");
result[0].MakerId.ShouldBe("RG36156");
result[0].Creators.ShouldBe(["野上菜月"]);
result[0].Genres.ShouldBe(["全年齢"]);
result[0].Tags.ShouldBe(["ASMR", "癒し", "オールハッピー", "バイノーラル/ダミヘ", "日常/生活", "耳かき"]);
// TODO: Wishlist count?
result[1].SalesDate.ShouldBeNull();
result[1].ExpectedDate.ShouldBe(new DateOnly(2026, 12, 21));
result[1].ProductId.ShouldBe("RJ01393816");
result[1].ProductName.ShouldBe("アダルトグッズショップの店長にオナ禁でオモチャにされる話");
result[1].Description.ShouldBe("アダルトグッズショップでダウナーなセンパイと仕事中にオナ禁サポートをしてサボっていたことが店長にバレてしまった。今度はセンパイの詩乃と店長のミチル、2人にオナ禁でオモチャにされることになってしまった。");
result[1].Maker.ShouldBe("平たい胸族");
result[1].MakerId.ShouldBe("RG01044380");
result[1].Creators.ShouldBe([]);
result[1].Genres.ShouldBe([]);
result[1].Tags.ShouldBe(["ASMR", "バイノーラル/ダミヘ", "色仕掛け", "浮気", "百合", "レズ/女同士", "ツルペタ", "貧乳/微乳"]);
}
[Fact]
public async Task Scan_With_English_Locale()
{
@@ -88,13 +136,11 @@ public class VoiceWorkScannerTests
result[0].Creators.ShouldBe(["Some Creator"]);
result[0].Genres.ShouldBe(["Voice", "Trial version"]);
result[0].Tags.ShouldBe(["Male Protagonist", "Gal", "Uniform", "Harem", "Big Breasts", "Tanned Skin / Suntan"]);
result[0].Type.ShouldBe(DLSiteWorkType.Released);
result[0].Downloads.ShouldBe(1000);
result[1].ExpectedDate.ShouldBe(new DateOnly(2025, 10, 11));
result[1].SalesDate.ShouldBeNull();
result[1].ProductId.ShouldBe("RJ00000002");
result[1].Type.ShouldBe(DLSiteWorkType.Announced);
}
[Fact]
@@ -132,7 +178,6 @@ public class VoiceWorkScannerTests
result[0].Creators.ShouldBe(["沼倉愛美"]);
result[0].Genres.ShouldBe(["All Ages", "Trial version"]);
result[0].Tags.ShouldBe(["Moe", "Healing", "Binaural", "ASMR", "Ear Cleaning", "Slice of Life / Daily Living", "Heartwarming", "Whispering"]);
result[0].Type.ShouldBe(DLSiteWorkType.Released);
result[0].Downloads.ShouldBe(1);
}
}