using JSMR.Domain.Enums; using JSMR.Infrastructure.Data; using Microsoft.EntityFrameworkCore; namespace JSMR.Tests.Fixtures; public class VoiceWorkSearchProviderFixture : MariaDbFixture { protected override async Task OnInitializedAsync(AppDbContext context) { await SeedAsync(context); } private static async Task SeedAsync(AppDbContext context) { if (await context.VoiceWorks.AnyAsync()) return; context.Circles.AddRange( new() { CircleId = 1, Name = "Good Dreams", MakerId = "RG00001" }, new() { CircleId = 2, Name = "Sweet Dreams", Favorite = true, MakerId = "RG00002" }, new() { CircleId = 3, Name = "Nightmare Fuel", Blacklisted = true, MakerId = "RG00003" } ); context.VoiceWorks.AddRange( new() { VoiceWorkId = 1, CircleId = 1, ProductId = "RJ0000001", ProductName = "Today Sounds", Description = "An average product.", Status = (byte)VoiceWorkStatus.Available, SalesDate = new(2025, 1, 1), Downloads = 500, WishlistCount = 750, StarRating = 35 }, new() { VoiceWorkId = 2, CircleId = 2, ProductId = "RJ0000002", ProductName = "Super Comfy ASMR", Description = "An amazing product!", Status = (byte)VoiceWorkStatus.NewRelease, SalesDate = new(2025, 1, 3), Downloads = 5000, WishlistCount = 12000, StarRating = 50, Favorite = true }, new() { VoiceWorkId = 3, CircleId = 3, ProductId = "RJ0000003", ProductName = "Low Effort", Description = "A bad product.", Status = (byte)VoiceWorkStatus.Available, SalesDate = new(2025, 1, 2), Downloads = 50, WishlistCount = 100, StarRating = 20 }, new() { VoiceWorkId = 4, CircleId = 1, ProductId = "RJ0000004", ProductName = "Tomorrow Sounds", Description = "A average upcoming product.", Status = (byte)VoiceWorkStatus.Upcoming, ExpectedDate = new(2025, 1, 1), WishlistCount = 300 }, new() { VoiceWorkId = 5, CircleId = 2, ProductId = "RJ0000005", ProductName = "Super Comfy ASMR+", Description = "All your favorite sounds, plus more!", Status = (byte)VoiceWorkStatus.NewAndUpcoming, ExpectedDate = new(2025, 1, 11), WishlistCount = 10000 } ); context.Tags.AddRange( new() { TagId = 1, Name = "ASMR" }, new() { TagId = 2, Name = "OL" }, new() { TagId = 3, Name = "ほのぼの" }, new() { TagId = 4, Name = "エルフ/妖精" }, new() { TagId = 5, Name = "ツンデレ", Favorite = true }, new() { TagId = 6, Name = "オールハッピー" }, new() { TagId = 7, Name = "ギャル" }, new() { TagId = 8, Name = "メイド" }, new() { TagId = 9, Name = "ノンフィクション/体験談", Blacklisted = true } ); context.EnglishTags.AddRange( new() { EnglishTagId = 1, TagId = 1, Name = "ASMR" }, new() { EnglishTagId = 2, TagId = 2, Name = "Office Lady" }, new() { EnglishTagId = 3, TagId = 3, Name = "Heartwarming" }, new() { EnglishTagId = 4, TagId = 4, Name = "Elf / Fairy" }, new() { EnglishTagId = 5, TagId = 5, Name = "Tsundere" }, new() { EnglishTagId = 6, TagId = 6, Name = "All Happy" }, new() { EnglishTagId = 7, TagId = 7, Name = "Gal" }, new() { EnglishTagId = 8, TagId = 8, Name = "Maid" }, new() { EnglishTagId = 9, TagId = 9, Name = "Non-Fiction / Narrative" } ); context.VoiceWorkTags.AddRange( new() { VoiceWorkId = 1, TagId = 1 }, // ASMR new() { VoiceWorkId = 1, TagId = 2 }, // Office Lady new() { VoiceWorkId = 2, TagId = 1 }, // ASMR new() { VoiceWorkId = 2, TagId = 3 }, // Heartwarming new() { VoiceWorkId = 2, TagId = 4 }, // Elf / Fairy new() { VoiceWorkId = 2, TagId = 5 }, // Tsundere new() { VoiceWorkId = 2, TagId = 6 }, // All Happy new() { VoiceWorkId = 2, TagId = 7 }, // Gal new() { VoiceWorkId = 2, TagId = 8 }, // Maid new() { VoiceWorkId = 3, TagId = 5 }, // Tsundere new() { VoiceWorkId = 3, TagId = 9 } // Non-Fiction / Narrative //new() { VoiceWorkId = 3, TagId = 1 }, //new() { VoiceWorkId = 3, TagId = 1 }, //new() { VoiceWorkId = 3, TagId = 1 }, //new() { VoiceWorkId = 3, TagId = 1 }, //new() { VoiceWorkId = 3, TagId = 1 }, //new() { VoiceWorkId = 4, TagId = 1 }, //new() { VoiceWorkId = 4, TagId = 1 }, //new() { VoiceWorkId = 4, TagId = 1 }, //new() { VoiceWorkId = 4, TagId = 1 }, //new() { VoiceWorkId = 4, TagId = 1 }, //new() { VoiceWorkId = 4, TagId = 1 }, //new() { VoiceWorkId = 4, TagId = 1 }, //new() { VoiceWorkId = 5, TagId = 5 } // Tsundere //new() { VoiceWorkId = 5, TagId = 1 }, //new() { VoiceWorkId = 5, TagId = 1 }, //new() { VoiceWorkId = 5, TagId = 1 }, //new() { VoiceWorkId = 5, TagId = 1 }, //new() { VoiceWorkId = 5, TagId = 1 }, //new() { VoiceWorkId = 5, TagId = 1 } ); context.Creators.AddRange( new() { CreatorId = 1, Name = "陽向葵ゅか", Favorite = true }, new() { CreatorId = 2, Name = "秋野かえで" }, new() { CreatorId = 3, Name = "柚木つばめ" }, new() { CreatorId = 4, Name = "逢坂成美" }, new() { CreatorId = 5, Name = "山田じぇみ子", Blacklisted = true } ); context.VoiceWorkCreators.AddRange( new() { VoiceWorkId = 1, CreatorId = 2 }, // 秋野かえで new() { VoiceWorkId = 2, CreatorId = 1 }, // 陽向葵ゅか new() { VoiceWorkId = 3, CreatorId = 5 }, // 山田じぇみ子 new() { VoiceWorkId = 3, CreatorId = 1 }, // 陽向葵ゅか new() { VoiceWorkId = 4, CreatorId = 3 }, // 柚木つばめ new() { VoiceWorkId = 5, CreatorId = 1 }, // 陽向葵ゅか new() { VoiceWorkId = 5, CreatorId = 4 } // 逢坂成美 ); // context.VoiceWorkSearches.AddRange( new() { VoiceWorkId = 1, SearchText = "RJ0000001 RG00001 Good Dreams Today Sounds An average product. ASMR Office Lady" }, new() { VoiceWorkId = 2, SearchText = "RJ0000002 RG00002 Sweet Dreams Super Comfy ASMR An amazing product! ASMR Heartwarming Elf / Fairy Tsundere All Happy Gal Maid" }, new() { VoiceWorkId = 3, SearchText = "RJ0000003 RG00003 Nightmare Fuel Low Effort A bad product." }, new() { VoiceWorkId = 4, SearchText = "RJ0000004 RG00001 Good Dreams Tomorrow Sounds A average upcoming product." }, new() { VoiceWorkId = 5, SearchText = "RJ0000005 RG00002 Sweet Dreams Super Comfy ASMR+ All your favorite sounds, plus more!" } ); await context.SaveChangesAsync(); } } public sealed class VoiceWorkSearchProviderFixture2(MariaDbContainerFixture container) : IAsyncLifetime { public AppDbContext? DbContext { get; private set; } public async ValueTask InitializeAsync() { DbContext = await MariaTestDb.CreateIsolatedAsync( container.RootConnectionString, seed: SeedAsync); } private static async Task SeedAsync(AppDbContext context) { if (await context.VoiceWorks.AnyAsync()) return; context.Circles.AddRange( new() { CircleId = 1, Name = "Good Dreams", MakerId = "RG00001" }, new() { CircleId = 2, Name = "Sweet Dreams", Favorite = true, MakerId = "RG00002" }, new() { CircleId = 3, Name = "Nightmare Fuel", Blacklisted = true, MakerId = "RG00003" } ); context.VoiceWorks.AddRange( new() { VoiceWorkId = 1, CircleId = 1, ProductId = "RJ0000001", ProductName = "Today Sounds", Description = "An average product.", Status = (byte)VoiceWorkStatus.Available, SalesDate = new(2025, 1, 1), Downloads = 500, WishlistCount = 750, StarRating = 35 }, new() { VoiceWorkId = 2, CircleId = 2, ProductId = "RJ0000002", ProductName = "Super Comfy ASMR", Description = "An amazing product!", Status = (byte)VoiceWorkStatus.NewRelease, SalesDate = new(2025, 1, 3), Downloads = 5000, WishlistCount = 12000, StarRating = 50, Favorite = true }, new() { VoiceWorkId = 3, CircleId = 3, ProductId = "RJ0000003", ProductName = "Low Effort", Description = "A bad product.", Status = (byte)VoiceWorkStatus.Available, SalesDate = new(2025, 1, 2), Downloads = 50, WishlistCount = 100, StarRating = 20 }, new() { VoiceWorkId = 4, CircleId = 1, ProductId = "RJ0000004", ProductName = "Tomorrow Sounds", Description = "A average upcoming product.", Status = (byte)VoiceWorkStatus.Upcoming, ExpectedDate = new(2025, 1, 1), WishlistCount = 300 }, new() { VoiceWorkId = 5, CircleId = 2, ProductId = "RJ0000005", ProductName = "Super Comfy ASMR+", Description = "All your favorite sounds, plus more!", Status = (byte)VoiceWorkStatus.NewAndUpcoming, ExpectedDate = new(2025, 1, 11), WishlistCount = 10000 } ); context.Tags.AddRange( new() { TagId = 1, Name = "ASMR" }, new() { TagId = 2, Name = "OL" }, new() { TagId = 3, Name = "ほのぼの" }, new() { TagId = 4, Name = "エルフ/妖精" }, new() { TagId = 5, Name = "ツンデレ", Favorite = true }, new() { TagId = 6, Name = "オールハッピー" }, new() { TagId = 7, Name = "ギャル" }, new() { TagId = 8, Name = "メイド" }, new() { TagId = 9, Name = "ノンフィクション/体験談", Blacklisted = true } ); context.EnglishTags.AddRange( new() { EnglishTagId = 1, TagId = 1, Name = "ASMR" }, new() { EnglishTagId = 2, TagId = 2, Name = "Office Lady" }, new() { EnglishTagId = 3, TagId = 3, Name = "Heartwarming" }, new() { EnglishTagId = 4, TagId = 4, Name = "Elf / Fairy" }, new() { EnglishTagId = 5, TagId = 5, Name = "Tsundere" }, new() { EnglishTagId = 6, TagId = 6, Name = "All Happy" }, new() { EnglishTagId = 7, TagId = 7, Name = "Gal" }, new() { EnglishTagId = 8, TagId = 8, Name = "Maid" }, new() { EnglishTagId = 9, TagId = 9, Name = "Non-Fiction / Narrative" } ); context.VoiceWorkTags.AddRange( new() { VoiceWorkId = 1, TagId = 1 }, // ASMR new() { VoiceWorkId = 1, TagId = 2 }, // Office Lady new() { VoiceWorkId = 2, TagId = 1 }, // ASMR new() { VoiceWorkId = 2, TagId = 3 }, // Heartwarming new() { VoiceWorkId = 2, TagId = 4 }, // Elf / Fairy new() { VoiceWorkId = 2, TagId = 5 }, // Tsundere new() { VoiceWorkId = 2, TagId = 6 }, // All Happy new() { VoiceWorkId = 2, TagId = 7 }, // Gal new() { VoiceWorkId = 2, TagId = 8 }, // Maid new() { VoiceWorkId = 3, TagId = 5 }, // Tsundere new() { VoiceWorkId = 3, TagId = 9 } // Non-Fiction / Narrative //new() { VoiceWorkId = 3, TagId = 1 }, //new() { VoiceWorkId = 3, TagId = 1 }, //new() { VoiceWorkId = 3, TagId = 1 }, //new() { VoiceWorkId = 3, TagId = 1 }, //new() { VoiceWorkId = 3, TagId = 1 }, //new() { VoiceWorkId = 4, TagId = 1 }, //new() { VoiceWorkId = 4, TagId = 1 }, //new() { VoiceWorkId = 4, TagId = 1 }, //new() { VoiceWorkId = 4, TagId = 1 }, //new() { VoiceWorkId = 4, TagId = 1 }, //new() { VoiceWorkId = 4, TagId = 1 }, //new() { VoiceWorkId = 4, TagId = 1 }, //new() { VoiceWorkId = 5, TagId = 5 } // Tsundere //new() { VoiceWorkId = 5, TagId = 1 }, //new() { VoiceWorkId = 5, TagId = 1 }, //new() { VoiceWorkId = 5, TagId = 1 }, //new() { VoiceWorkId = 5, TagId = 1 }, //new() { VoiceWorkId = 5, TagId = 1 }, //new() { VoiceWorkId = 5, TagId = 1 } ); context.Creators.AddRange( new() { CreatorId = 1, Name = "陽向葵ゅか", Favorite = true }, new() { CreatorId = 2, Name = "秋野かえで" }, new() { CreatorId = 3, Name = "柚木つばめ" }, new() { CreatorId = 4, Name = "逢坂成美" }, new() { CreatorId = 5, Name = "山田じぇみ子", Blacklisted = true } ); context.VoiceWorkCreators.AddRange( new() { VoiceWorkId = 1, CreatorId = 2 }, // 秋野かえで new() { VoiceWorkId = 2, CreatorId = 1 }, // 陽向葵ゅか new() { VoiceWorkId = 3, CreatorId = 5 }, // 山田じぇみ子 new() { VoiceWorkId = 3, CreatorId = 1 }, // 陽向葵ゅか new() { VoiceWorkId = 4, CreatorId = 3 }, // 柚木つばめ new() { VoiceWorkId = 5, CreatorId = 1 }, // 陽向葵ゅか new() { VoiceWorkId = 5, CreatorId = 4 } // 逢坂成美 ); // context.VoiceWorkSearches.AddRange( new() { VoiceWorkId = 1, SearchText = "RJ0000001 RG00001 Good Dreams Today Sounds An average product. ASMR Office Lady" }, new() { VoiceWorkId = 2, SearchText = "RJ0000002 RG00002 Sweet Dreams Super Comfy ASMR An amazing product! ASMR Heartwarming Elf / Fairy Tsundere All Happy Gal Maid" }, new() { VoiceWorkId = 3, SearchText = "RJ0000003 RG00003 Nightmare Fuel Low Effort A bad product." }, new() { VoiceWorkId = 4, SearchText = "RJ0000004 RG00001 Good Dreams Tomorrow Sounds A average upcoming product." }, new() { VoiceWorkId = 5, SearchText = "RJ0000005 RG00002 Sweet Dreams Super Comfy ASMR+ All your favorite sounds, plus more!" } ); await context.SaveChangesAsync(); } public async ValueTask DisposeAsync() { if (DbContext is not null) { await DbContext.DisposeAsync(); } } }