Initial implementation of voice works scanning.
This commit is contained in:
@@ -1,15 +1,13 @@
|
||||
using JSMR.Application.Integrations.DLSite.Models;
|
||||
using JSMR.Application.Common;
|
||||
using JSMR.Application.Integrations.DLSite.Models;
|
||||
using JSMR.Infrastructure.Http;
|
||||
using JSMR.Infrastructure.Integrations.DLSite;
|
||||
using JSMR.Infrastructure.Integrations.DLSite.Mapping;
|
||||
using JSMR.Infrastructure.Integrations.DLSite.Models;
|
||||
using JSMR.Infrastructure.Integrations.DLSite.Serialization;
|
||||
using JSMR.Tests.Utilities;
|
||||
using Microsoft.Extensions.Logging;
|
||||
using NSubstitute;
|
||||
using Shouldly;
|
||||
using System.Net;
|
||||
using System.Net.Http;
|
||||
using System.Text.Json;
|
||||
|
||||
namespace JSMR.Tests.Integrations.DLSite;
|
||||
|
||||
@@ -25,26 +23,25 @@ public class DLSiteClientTests
|
||||
{
|
||||
string productInfoJson = await ReadJsonResourceAsync("Product-Info.json");
|
||||
|
||||
HttpResponseMessage response = new()
|
||||
{
|
||||
Content = new StringContent(productInfoJson),
|
||||
StatusCode = HttpStatusCode.OK
|
||||
};
|
||||
IHttpService httpService = Substitute.For<IHttpService>();
|
||||
|
||||
HttpClient httpClient = Substitute.For<HttpClient>();
|
||||
httpClient.BaseAddress = new Uri("https://fake.site.com/");
|
||||
|
||||
//{ BaseAddress = new Uri("https://www.dlsite.com/") };
|
||||
|
||||
httpClient.SendAsync(Arg.Any<HttpRequestMessage>(), Arg.Any<HttpCompletionOption>(), CancellationToken.None)
|
||||
.Returns(Task.FromResult(response));
|
||||
httpService.GetStringAsync(Arg.Any<string>(), CancellationToken.None)
|
||||
.Returns(Task.FromResult(productInfoJson));
|
||||
|
||||
var logger = Substitute.For<ILogger<DLSiteClient>>();
|
||||
var client = new DLSiteClient(httpClient, logger);
|
||||
var client = new DLSiteClient(httpService, logger);
|
||||
|
||||
var result = await client.GetVoiceWorkDetailsAsync(["RJ01230163"], CancellationToken.None);
|
||||
|
||||
result.Count.ShouldBe(1);
|
||||
|
||||
result.ShouldContainKey("RJ01230163");
|
||||
result["RJ01230163"].HasTrial.ShouldBeTrue();
|
||||
result["RJ01230163"].HasDLPlay.ShouldBeTrue();
|
||||
result["RJ01230163"].HasReviews.ShouldBeTrue();
|
||||
result["RJ01230163"].SupportedLanguages.ShouldBe([Language.English]);
|
||||
result["RJ01230163"].DownloadCount.ShouldBe(659);
|
||||
result["RJ01230163"].WishlistCount.ShouldBe(380);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
|
||||
79
JSMR.Tests/Unit/DLSiteSearchFilterBuilderTests.cs
Normal file
79
JSMR.Tests/Unit/DLSiteSearchFilterBuilderTests.cs
Normal file
@@ -0,0 +1,79 @@
|
||||
using JSMR.Infrastructure.Scanning;
|
||||
using Shouldly;
|
||||
|
||||
namespace JSMR.Tests.Unit;
|
||||
|
||||
public class DLSiteSearchFilterBuilderTests
|
||||
{
|
||||
[Fact]
|
||||
public void Build_Simple_Query()
|
||||
{
|
||||
var filterBuilder = new DLSiteSearchFilterBuilder()
|
||||
.UseDefaultLocale()
|
||||
.IncludeJapaneseSupportedLanguage();
|
||||
|
||||
string url = filterBuilder.BuildSearchQuery(1, 100);
|
||||
|
||||
using var writer = new StringWriter();
|
||||
|
||||
writer.Write($"https://www.dlsite.com/maniax/");
|
||||
writer.Write($"fsr/=/language/jp/");
|
||||
writer.Write("sex_category[0]/male/");
|
||||
writer.Write("ana_flg/all/");
|
||||
writer.Write("work_category[0]/doujin/");
|
||||
writer.Write("order[0]/release_d/");
|
||||
writer.Write("work_type_category[0]/audio/");
|
||||
writer.Write("work_type_category_name[0]/ボイス・ASMR/");
|
||||
|
||||
writer.Write("options_and_or/and/");
|
||||
writer.Write($"options[0]/JPN/");
|
||||
|
||||
writer.Write($"per_page/100/");
|
||||
writer.Write($"page/1/");
|
||||
writer.Write("show_type/1/");
|
||||
writer.Write($"?locale=ja_JP");
|
||||
|
||||
url.ShouldBe(writer.ToString());
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Build_Advanced_Query()
|
||||
{
|
||||
var filterBuilder = new DLSiteSearchFilterBuilder()
|
||||
.UseEnglishLocale()
|
||||
.IncludeJapaneseSupportedLanguage()
|
||||
.IncludeEnglishSupportedLanguage()
|
||||
.ExcludeMakers(["RG0000001", "RG0000002", "", "RG0000001"])
|
||||
.ExcludePartiallyAIGeneratedWorks()
|
||||
.ExcludeAIGeneratedWorks();
|
||||
|
||||
string url = filterBuilder.BuildSearchQuery(1, 100);
|
||||
|
||||
using var writer = new StringWriter();
|
||||
|
||||
writer.Write($"https://www.dlsite.com/maniax/");
|
||||
writer.Write($"fsr/=/language/en/");
|
||||
writer.Write("sex_category[0]/male/");
|
||||
writer.Write("ana_flg/all/");
|
||||
writer.Write("work_category[0]/doujin/");
|
||||
writer.Write("order[0]/release_d/");
|
||||
writer.Write("work_type_category[0]/audio/");
|
||||
writer.Write("work_type_category_name[0]/ボイス・ASMR/");
|
||||
|
||||
writer.Write("options_and_or/and/");
|
||||
writer.Write($"options[0]/JPN/");
|
||||
writer.Write($"options[1]/ENG/");
|
||||
|
||||
writer.Write($"keyword_maker_name/-RG0000001+-RG0000002/");
|
||||
|
||||
writer.Write($"options_not[0]/AIP/");
|
||||
writer.Write($"options_not[1]/AIG/");
|
||||
|
||||
writer.Write($"per_page/100/");
|
||||
writer.Write($"page/1/");
|
||||
writer.Write("show_type/1/");
|
||||
writer.Write($"?locale=en_US");
|
||||
|
||||
url.ShouldBe(writer.ToString());
|
||||
}
|
||||
}
|
||||
@@ -10,15 +10,15 @@ public class MySqlBooleanQueryTests
|
||||
{
|
||||
string normalizedValue = MySqlBooleanQuery.Normalize("value1 value2|value3 -value4 \"value 5\"");
|
||||
|
||||
normalizedValue.ShouldBe("+value1 +(value2|value3) -value4 +\"value 5\"");
|
||||
normalizedValue.ShouldBe("+value1 +(value2 value3) -value4 +\"value 5\"");
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Normalize_Unusual_Usage()
|
||||
{
|
||||
string normalizedValue = MySqlBooleanQuery.Normalize("+value1 +(value2|value3) -value4 +\"value 5\"");
|
||||
string normalizedValue = MySqlBooleanQuery.Normalize("+value1 +(value2 value3) -value4 +\"value 5\"");
|
||||
|
||||
normalizedValue.ShouldBe("+value1 +(value2|value3) -value4 +\"value 5\"");
|
||||
normalizedValue.ShouldBe("+value1 +(value2 value3) -value4 +\"value 5\"");
|
||||
}
|
||||
|
||||
[Fact]
|
||||
@@ -28,4 +28,12 @@ public class MySqlBooleanQueryTests
|
||||
|
||||
normalizedValue.ShouldBe("+value1 +value2 +value3");
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Normalize_Bad_Or_Data()
|
||||
{
|
||||
string normalizedValue = MySqlBooleanQuery.Normalize("value1 | value2");
|
||||
|
||||
normalizedValue.ShouldBe("+value1 +value2");
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user