Added voice work repository tests.
All checks were successful
ci / build-test (push) Successful in 2m21s
ci / publish-image (push) Successful in 1m39s

This commit is contained in:
2026-03-31 00:43:02 -04:00
parent 347f6f297d
commit 45a8c8be5a
4 changed files with 91 additions and 1 deletions

View File

@@ -1,7 +1,6 @@
using JSMR.Application.VoiceWorks.Commands.SetFavorite; using JSMR.Application.VoiceWorks.Commands.SetFavorite;
using JSMR.Application.VoiceWorks.Ports; using JSMR.Application.VoiceWorks.Ports;
using JSMR.Domain.Entities; using JSMR.Domain.Entities;
using JSMR.Infrastructure.Common.Time;
using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore;
namespace JSMR.Infrastructure.Data.Repositories.VoiceWorks; namespace JSMR.Infrastructure.Data.Repositories.VoiceWorks;

View File

@@ -0,0 +1,45 @@
using JSMR.Application.VoiceWorks.Commands.SetFavorite;
using JSMR.Domain.Entities;
using JSMR.Infrastructure.Data;
using JSMR.Infrastructure.Data.Repositories.VoiceWorks;
using JSMR.Tests.Fixtures;
using Microsoft.EntityFrameworkCore;
using Shouldly;
namespace JSMR.Tests.Data.Repositories.VoiceWorks;
public class Set_Is_Favorite_Tests(MariaDbContainerFixture container) : VoiceWorkRepositoryTests(container)
{
[Fact]
public async Task Set_Is_Favorite()
{
await using AppDbContext dbContext = await GetAppDbContextAsync();
VoiceWorkWriter writer = new(dbContext);
await SetFavoriteAndVerifyAsync(dbContext, writer, 1, true);
await SetFavoriteAndVerifyAsync(dbContext, writer, 1, true);
await SetFavoriteAndVerifyAsync(dbContext, writer, 1, false);
await SetFavoriteAndVerifyAsync(dbContext, writer, 1, false);
await SetFavoriteAndVerifyAsync(dbContext, writer, 1, true);
await SetFavoriteAndVerifyAsync(dbContext, writer, 1, false);
}
private static async Task SetFavoriteAndVerifyAsync(AppDbContext dbContext, VoiceWorkWriter writer, int voiceWorkId, bool isFavorite)
{
SetVoiceWorkFavoriteRequest request = new(
VoiceWorkId: voiceWorkId,
IsFavorite: isFavorite
);
SetVoiceWorkFavoriteResponse response = await writer.SetFavoriteAsync(request, TestContext.Current.CancellationToken);
response.VoiceWorkId.ShouldBe(voiceWorkId);
response.IsFavorite.ShouldBe(isFavorite);
VoiceWork? voiceWork = await dbContext.VoiceWorks
.SingleAsync(v => v.VoiceWorkId == voiceWorkId, TestContext.Current.CancellationToken);
voiceWork.ShouldNotBeNull();
voiceWork.Favorite.ShouldBe(isFavorite);
}
}

View File

@@ -0,0 +1,31 @@
using JSMR.Domain.Enums;
using JSMR.Infrastructure.Data;
using Microsoft.EntityFrameworkCore;
namespace JSMR.Tests.Data.Repositories.VoiceWorks;
public static class VoiceWorkRepositorySeedData
{
public 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" },
new() { CircleId = 4, Name = "Never Again", Spam = true, MakerId = "RG00004" }
);
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 }
);
await context.SaveChangesAsync();
}
}

View File

@@ -0,0 +1,15 @@
using JSMR.Infrastructure.Data;
using JSMR.Tests.Fixtures;
namespace JSMR.Tests.Data.Repositories.VoiceWorks;
public abstract class VoiceWorkRepositoryTests(MariaDbContainerFixture container)
{
protected async Task<AppDbContext> GetAppDbContextAsync()
{
return await MariaDbClone.CloneFromTemplateAsync(
container.RootConnectionString,
container.TemplateDbName,
seed: VoiceWorkRepositorySeedData.SeedAsync);
}
}