using Shouldly; using LANCommander.Server.Services; using LANCommander.Server.Data; using LANCommander.Server.Data.Models; using LANCommander.SDK.Enums; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Logging.Abstractions; namespace LANCommander.Server.Tests.Data; [Collection("Application")] public class VersioningTests(ApplicationFixture fixture) : BaseTest(fixture) { private async Task SeedGameAsync(Action configure = null) { var contextFactory = GetService>(); await using var context = await contextFactory.CreateDbContextAsync(); var game = new Game { Id = Guid.NewGuid(), Title = $"Test Game {Guid.NewGuid()}", CreatedOn = DateTime.UtcNow, }; context.Games.Add(game); configure?.Invoke(game, context); await context.SaveChangesAsync(); return game; } [Fact] public async Task BackfillCreatesOneVersionPerArchiveWithConfigOnNewest() { var contextFactory = GetService>(); var olderArchiveCreatedOn = DateTime.UtcNow.AddDays(-2); var newerArchiveCreatedOn = DateTime.UtcNow.AddDays(-1); var game = await SeedGameAsync((g, db) => { var storageLocation = new StorageLocation { Id = Guid.NewGuid(), Path = "archives", Type = StorageLocationType.Archive, Default = true, }; db.StorageLocations.Add(storageLocation); db.Set().Add(new Archive { Id = Guid.NewGuid(), GameId = g.Id, StorageLocationId = storageLocation.Id, Version = "1.0.0", ObjectKey = "archive-1.zip", CreatedOn = olderArchiveCreatedOn, }); db.Set().Add(new Archive { Id = Guid.NewGuid(), GameId = g.Id, StorageLocationId = storageLocation.Id, Version = "2.0.0", ObjectKey = "archive-2.zip", CreatedOn = newerArchiveCreatedOn, }); db.Set