using ClaudeDo.Data; using ClaudeDo.Data.Models; using Microsoft.EntityFrameworkCore; using TaskStatus = ClaudeDo.Data.Models.TaskStatus; namespace ClaudeDo.Data.Tests; public sealed class ExpectsNoDiffTests : IDisposable { private readonly string _dbPath; private readonly ClaudeDoDbContext _ctx; private const string ListId = "l1"; public ExpectsNoDiffTests() { _dbPath = Path.Combine(Path.GetTempPath(), $"claudedo_endiff_{Guid.NewGuid():N}.db"); var options = new DbContextOptionsBuilder() .UseSqlite($"Data Source={_dbPath}") .Options; _ctx = new ClaudeDoDbContext(options); _ctx.Database.EnsureCreated(); _ctx.Lists.Add(new ListEntity { Id = ListId, Name = "Test", CreatedAt = DateTime.UtcNow }); _ctx.SaveChanges(); } public void Dispose() { _ctx.Dispose(); foreach (var suffix in new[] { "", "-wal", "-shm" }) try { File.Delete(_dbPath + suffix); } catch { } } [Fact] public void DefaultsToFalse_WhenNotSet() { var task = new TaskEntity { Id = "t1", ListId = ListId, Title = "T", Status = TaskStatus.Idle, CreatedAt = DateTime.UtcNow }; _ctx.Tasks.Add(task); _ctx.SaveChanges(); using var reload = new ClaudeDoDbContext(new DbContextOptionsBuilder().UseSqlite(_ctx.Database.GetConnectionString()).Options); var reloaded = reload.Tasks.Single(t => t.Id == "t1"); Assert.False(reloaded.ExpectsNoDiff); } [Fact] public void PersistsTrue_Roundtrip() { var task = new TaskEntity { Id = "t2", ListId = ListId, Title = "T", Status = TaskStatus.Idle, CreatedAt = DateTime.UtcNow, ExpectsNoDiff = true }; _ctx.Tasks.Add(task); _ctx.SaveChanges(); using var reload = new ClaudeDoDbContext(new DbContextOptionsBuilder().UseSqlite(_ctx.Database.GetConnectionString()).Options); var reloaded = reload.Tasks.Single(t => t.Id == "t2"); Assert.True(reloaded.ExpectsNoDiff); } }