using ClaudeDo.Data.Repositories; using ClaudeDo.Worker.Tests.Infrastructure; namespace ClaudeDo.Worker.Tests.Repositories; public class WeekReportRepositoryTests : IDisposable { private readonly DbFixture _db = new(); public void Dispose() => _db.Dispose(); private static readonly DateOnly Start = new(2026, 5, 28); private static readonly DateOnly End = new(2026, 6, 3); [Fact] public async Task Upsert_Insert_Then_GetByRange_RoundTrips() { using (var ctx = _db.CreateContext()) await new WeekReportRepository(ctx).UpsertAsync(Start, End, "# Report"); using var read = _db.CreateContext(); var row = await new WeekReportRepository(read).GetByRangeAsync(Start, End); Assert.NotNull(row); Assert.Equal("# Report", row!.Markdown); } [Fact] public async Task Upsert_Existing_Overwrites_Markdown() { using (var ctx = _db.CreateContext()) await new WeekReportRepository(ctx).UpsertAsync(Start, End, "old"); using (var ctx = _db.CreateContext()) await new WeekReportRepository(ctx).UpsertAsync(Start, End, "new"); using var read = _db.CreateContext(); var row = await new WeekReportRepository(read).GetByRangeAsync(Start, End); Assert.Equal("new", row!.Markdown); } [Fact] public async Task GetByRange_MissingRange_ReturnsNull() { using var read = _db.CreateContext(); Assert.Null(await new WeekReportRepository(read).GetByRangeAsync(Start, End)); } }