using ClaudeDo.Data; using ClaudeDo.Ui.ViewModels.Islands; using Microsoft.EntityFrameworkCore; namespace ClaudeDo.Ui.Tests.ViewModels; public class TasksIslandDailyPrepTests : IDisposable { private readonly string _dbPath; public TasksIslandDailyPrepTests() { _dbPath = Path.Combine(Path.GetTempPath(), $"claudedo_tasks_prep_{Guid.NewGuid():N}.db"); using var ctx = NewContext(); ctx.Database.EnsureCreated(); } public void Dispose() { try { File.Delete(_dbPath); } catch { } try { File.Delete(_dbPath + "-wal"); } catch { } try { File.Delete(_dbPath + "-shm"); } catch { } } private ClaudeDoDbContext NewContext() { var opts = new DbContextOptionsBuilder() .UseSqlite($"Data Source={_dbPath}") .Options; return new ClaudeDoDbContext(opts); } private sealed class TestDbFactory : IDbContextFactory { private readonly Func _create; public TestDbFactory(Func create) => _create = create; public ClaudeDoDbContext CreateDbContext() => _create(); } private sealed class DefaultStub : StubWorkerClient { } private TasksIslandViewModel NewTasksVm(StubWorkerClient stub) => new(new TestDbFactory(NewContext), worker: stub); [Fact] public async Task ClearDayCommand_calls_worker() { var stub = new DefaultStub(); var vm = NewTasksVm(stub); await vm.ClearDayCommand.ExecuteAsync(null); Assert.Equal(1, stub.ClearMyDayCalls); } }