using ClaudeDo.Data; using ClaudeDo.Data.Seeding; using Microsoft.EntityFrameworkCore; using Xunit; namespace ClaudeDo.Worker.Tests.UiSchema; public class DefaultListSeedTests : IDisposable { private readonly string _dbPath = Path.Combine(Path.GetTempPath(), $"claudedo-seed-{Guid.NewGuid():N}.db"); private ClaudeDoDbContext NewContext() { var opts = new DbContextOptionsBuilder() .UseSqlite($"Data Source={_dbPath}").Options; var ctx = new ClaudeDoDbContext(opts); ctx.Database.EnsureCreated(); return ctx; } [Fact] public async Task Seeds_MyDay_Important_Planned_Lists_Idempotently() { await using (var ctx = NewContext()) { await DefaultListsSeeder.SeedAsync(ctx); await DefaultListsSeeder.SeedAsync(ctx); // idempotent } await using var verify = NewContext(); var names = verify.Lists.Select(l => l.Name).OrderBy(n => n).ToList(); Assert.Equal(new[] { "Important", "My Day", "Planned" }, names); } public void Dispose() { try { if (File.Exists(_dbPath)) File.Delete(_dbPath); } catch { } try { if (File.Exists(_dbPath + "-wal")) File.Delete(_dbPath + "-wal"); } catch { } try { if (File.Exists(_dbPath + "-shm")) File.Delete(_dbPath + "-shm"); } catch { } } }