154 lines
7.1 KiB
C#
154 lines
7.1 KiB
C#
using JSMR.Application.Scanning.Contracts;
|
|
using JSMR.Domain.Entities;
|
|
using JSMR.Domain.Enums;
|
|
using JSMR.Domain.ValueObjects;
|
|
using JSMR.Infrastructure.Data;
|
|
using JSMR.Tests.Fixtures;
|
|
using Microsoft.EntityFrameworkCore;
|
|
using Shouldly;
|
|
|
|
namespace JSMR.Tests.Ingestion.Japanese;
|
|
|
|
public class Basic_Insert_And_Update_Tests(MariaDbContainerFixture fixture) : JapaneseIngestionTestsBase(fixture)
|
|
{
|
|
[Fact]
|
|
public async Task Basic_Insert_And_Update_Test()
|
|
{
|
|
await using AppDbContext dbContext = await GetAppDbContextAsync();
|
|
|
|
VoiceWorkIngest ingest = new()
|
|
{
|
|
MakerId = "RG1",
|
|
MakerName = "My Maker",
|
|
ProductId = "RJ1",
|
|
Title = "My Product",
|
|
Description = "My description",
|
|
Tags = ["Tag 1", "Tag 2"],
|
|
Creators = ["Creator 1"],
|
|
WishlistCount = 100,
|
|
Downloads = 0,
|
|
HasTrial = true,
|
|
HasChobit = false,
|
|
AgeRating = AgeRating.AllAges,
|
|
HasImage = false,
|
|
SupportedLanguages = [SupportedLanguage.Japanese],
|
|
SalesDate = null,
|
|
ExpectedDate = new DateOnly(2025, 2, 1)
|
|
};
|
|
|
|
DateTime dateTime = TokyoLocalToUtc(2025, 01, 15, 00, 00, 00);
|
|
await UpsertAsync(dbContext, dateTime, [ingest]);
|
|
|
|
Circle? circle = await dbContext.Circles.FirstOrDefaultAsync(v => v.MakerId == ingest.MakerId, TestContext.Current.CancellationToken);
|
|
circle.ShouldNotBeNull();
|
|
circle.Name.ShouldBe(ingest.MakerName);
|
|
|
|
VoiceWork? voiceWork = await dbContext.VoiceWorks.FirstOrDefaultAsync(v => v.ProductId == ingest.ProductId, TestContext.Current.CancellationToken);
|
|
voiceWork.ShouldNotBeNull();
|
|
voiceWork.ProductName.ShouldBe(ingest.Title);
|
|
voiceWork.Description.ShouldBe(ingest.Description);
|
|
voiceWork.WishlistCount.ShouldBe(ingest.WishlistCount);
|
|
voiceWork.Downloads.ShouldBe(ingest.Downloads);
|
|
voiceWork.HasTrial.ShouldBe(ingest.HasTrial);
|
|
voiceWork.HasChobit.ShouldBe(ingest.HasChobit);
|
|
voiceWork.Rating.ShouldBe((int)ingest.AgeRating);
|
|
voiceWork.HasImage.ShouldBe(ingest.HasImage);
|
|
voiceWork.SubtitleLanguage.ShouldBe((byte)Language.Japanese);
|
|
voiceWork.SalesDate.ShouldBeNull();
|
|
voiceWork.ExpectedDate.ShouldBe(ingest.ExpectedDate!.Value.ToDateTime(TimeOnly.MinValue));
|
|
|
|
foreach (string tagName in ingest.Tags)
|
|
{
|
|
Tag? tag = await dbContext.Tags.FirstOrDefaultAsync(t => t.Name == tagName, TestContext.Current.CancellationToken);
|
|
tag.ShouldNotBeNull();
|
|
|
|
VoiceWorkTag? voiceWorkTag = await dbContext.VoiceWorkTags.FirstOrDefaultAsync(vwt =>
|
|
vwt.VoiceWorkId == voiceWork.VoiceWorkId && vwt.TagId == tag.TagId, TestContext.Current.CancellationToken);
|
|
|
|
voiceWorkTag.ShouldNotBeNull();
|
|
}
|
|
|
|
foreach (string creatorName in ingest.Creators)
|
|
{
|
|
Creator? creator = await dbContext.Creators.FirstOrDefaultAsync(c => c.Name == creatorName, TestContext.Current.CancellationToken);
|
|
creator.ShouldNotBeNull();
|
|
|
|
VoiceWorkCreator? voiceWorkCreator = await dbContext.VoiceWorkCreators.FirstOrDefaultAsync(vwc =>
|
|
vwc.VoiceWorkId == voiceWork.VoiceWorkId && vwc.CreatorId == creator.CreatorId, TestContext.Current.CancellationToken);
|
|
|
|
voiceWorkCreator.ShouldNotBeNull();
|
|
}
|
|
|
|
foreach (SupportedLanguage supportedLanguage in ingest.SupportedLanguages)
|
|
{
|
|
VoiceWorkSupportedLanguage? voiceWorkSupportedLanauge = await dbContext.VoiceWorkSupportedLanguages.FirstOrDefaultAsync(x =>
|
|
x.VoiceWorkId == voiceWork.VoiceWorkId && x.Language == supportedLanguage.Code, TestContext.Current.CancellationToken);
|
|
|
|
voiceWorkSupportedLanauge.ShouldNotBeNull();
|
|
}
|
|
|
|
VoiceWorkIngest updatedIngest = ingest with
|
|
{
|
|
MakerName = "My Maker (Updated)",
|
|
Tags = ["Tag 1", "Not Tag 2"],
|
|
Creators = ["Not Creator 1"],
|
|
Downloads = 50,
|
|
HasChobit = true,
|
|
SupportedLanguages = [SupportedLanguage.Japanese, SupportedLanguage.English],
|
|
HasImage = true,
|
|
SalesDate = new DateOnly(2025, 2, 5),
|
|
ExpectedDate = null
|
|
};
|
|
|
|
DateTime updateDateTime = TokyoLocalToUtc(2025, 02, 03, 00, 00, 00);
|
|
await UpsertAsync(dbContext, dateTime, [updatedIngest]);
|
|
|
|
circle = await dbContext.Circles.FirstOrDefaultAsync(v => v.MakerId == updatedIngest.MakerId, TestContext.Current.CancellationToken);
|
|
circle.ShouldNotBeNull();
|
|
circle.Name.ShouldBe(updatedIngest.MakerName);
|
|
|
|
voiceWork = await dbContext.VoiceWorks.FirstOrDefaultAsync(v => v.ProductId == updatedIngest.ProductId, TestContext.Current.CancellationToken);
|
|
voiceWork.ShouldNotBeNull();
|
|
voiceWork.ProductName.ShouldBe(updatedIngest.Title);
|
|
voiceWork.Description.ShouldBe(updatedIngest.Description);
|
|
voiceWork.WishlistCount.ShouldBe(updatedIngest.WishlistCount);
|
|
voiceWork.Downloads.ShouldBe(updatedIngest.Downloads);
|
|
voiceWork.HasTrial.ShouldBe(updatedIngest.HasTrial);
|
|
voiceWork.HasChobit.ShouldBe(updatedIngest.HasChobit);
|
|
voiceWork.Rating.ShouldBe((int)updatedIngest.AgeRating);
|
|
voiceWork.HasImage.ShouldBe(updatedIngest.HasImage);
|
|
voiceWork.SubtitleLanguage.ShouldBe((byte)Language.English);
|
|
voiceWork.SalesDate.ShouldBe(updatedIngest.SalesDate!.Value.ToDateTime(TimeOnly.MinValue));
|
|
voiceWork.ExpectedDate.ShouldBeNull();
|
|
|
|
foreach (string tagName in updatedIngest.Tags.Union(ingest.Tags))
|
|
{
|
|
Tag? tag = await dbContext.Tags.FirstOrDefaultAsync(t => t.Name == tagName, TestContext.Current.CancellationToken);
|
|
tag.ShouldNotBeNull();
|
|
|
|
VoiceWorkTag? voiceWorkTag = await dbContext.VoiceWorkTags.FirstOrDefaultAsync(vwt =>
|
|
vwt.VoiceWorkId == voiceWork.VoiceWorkId && vwt.TagId == tag.TagId, TestContext.Current.CancellationToken);
|
|
|
|
voiceWorkTag.ShouldNotBeNull();
|
|
}
|
|
|
|
foreach (string creatorName in updatedIngest.Creators.Union(ingest.Creators))
|
|
{
|
|
Creator? creator = await dbContext.Creators.FirstOrDefaultAsync(c => c.Name == creatorName, TestContext.Current.CancellationToken);
|
|
creator.ShouldNotBeNull();
|
|
|
|
VoiceWorkCreator? voiceWorkCreator = await dbContext.VoiceWorkCreators.FirstOrDefaultAsync(vwc =>
|
|
vwc.VoiceWorkId == voiceWork.VoiceWorkId && vwc.CreatorId == creator.CreatorId, TestContext.Current.CancellationToken);
|
|
|
|
voiceWorkCreator.ShouldNotBeNull();
|
|
}
|
|
|
|
foreach (SupportedLanguage supportedLanguage in updatedIngest.SupportedLanguages.Union(ingest.SupportedLanguages))
|
|
{
|
|
VoiceWorkSupportedLanguage? voiceWorkSupportedLanauge = await dbContext.VoiceWorkSupportedLanguages.FirstOrDefaultAsync(x =>
|
|
x.VoiceWorkId == voiceWork.VoiceWorkId && x.Language == supportedLanguage.Code, TestContext.Current.CancellationToken);
|
|
|
|
voiceWorkSupportedLanauge.ShouldNotBeNull();
|
|
}
|
|
}
|
|
} |