Merge claudedo/0020cd0c4696431996a158f8e1b91cba
This commit is contained in:
@@ -134,8 +134,11 @@ public sealed class AttachmentMcpToolsTests : IDisposable
|
||||
var filePath = Path.Combine(_storeRoot, task.Id, "remove.txt");
|
||||
Assert.True(File.Exists(filePath));
|
||||
|
||||
await sut.RemoveTaskAttachment(task.Id, "remove.txt");
|
||||
var result = await sut.RemoveTaskAttachment(task.Id, "remove.txt");
|
||||
|
||||
Assert.True(result.Removed);
|
||||
Assert.Equal(task.Id, result.TaskId);
|
||||
Assert.Equal("remove.txt", result.FileName);
|
||||
Assert.False(File.Exists(filePath));
|
||||
await using var vCtx = _db.CreateContext();
|
||||
var row = await new TaskAttachmentRepository(vCtx).GetAsync(task.Id, "remove.txt");
|
||||
|
||||
+84
-9
@@ -37,14 +37,31 @@ public sealed class ConfigMcpToolsTests : IDisposable
|
||||
{
|
||||
var listId = await SeedListAsync();
|
||||
|
||||
await _sut.SetListConfig(listId, "sonnet", "be terse", null, 42, CancellationToken.None);
|
||||
var setResult = await _sut.SetListConfig(listId, "sonnet", "be terse", null, 42, CancellationToken.None);
|
||||
Assert.True(setResult.Ok);
|
||||
Assert.Equal(listId, setResult.ListId);
|
||||
Assert.NotNull(setResult.Config);
|
||||
Assert.Equal("sonnet", setResult.Config!.Model);
|
||||
|
||||
var cfg = await _sut.GetListConfig(listId, CancellationToken.None);
|
||||
|
||||
Assert.NotNull(cfg);
|
||||
Assert.Equal("sonnet", cfg!.Model);
|
||||
Assert.Equal("be terse", cfg.SystemPrompt);
|
||||
Assert.Null(cfg.AgentPath);
|
||||
Assert.Equal(42, cfg.MaxTurns);
|
||||
Assert.True(cfg.Found);
|
||||
Assert.NotNull(cfg.Config);
|
||||
Assert.Equal("sonnet", cfg.Config!.Model);
|
||||
Assert.Equal("be terse", cfg.Config.SystemPrompt);
|
||||
Assert.Null(cfg.Config.AgentPath);
|
||||
Assert.Equal(42, cfg.Config.MaxTurns);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task GetListConfig_NoConfigSet_ReturnsNotFound()
|
||||
{
|
||||
var listId = await SeedListAsync();
|
||||
|
||||
var cfg = await _sut.GetListConfig(listId, CancellationToken.None);
|
||||
|
||||
Assert.False(cfg.Found);
|
||||
Assert.Null(cfg.Config);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
@@ -53,9 +70,12 @@ public sealed class ConfigMcpToolsTests : IDisposable
|
||||
var listId = await SeedListAsync();
|
||||
await _sut.SetListConfig(listId, "sonnet", null, null, null, CancellationToken.None);
|
||||
|
||||
await _sut.SetListConfig(listId, null, null, null, null, CancellationToken.None);
|
||||
var clearResult = await _sut.SetListConfig(listId, null, null, null, null, CancellationToken.None);
|
||||
|
||||
Assert.Null(await _sut.GetListConfig(listId, CancellationToken.None));
|
||||
Assert.True(clearResult.Ok);
|
||||
Assert.Null(clearResult.Config);
|
||||
var cfg = await _sut.GetListConfig(listId, CancellationToken.None);
|
||||
Assert.False(cfg.Found);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
@@ -73,10 +93,65 @@ public sealed class ConfigMcpToolsTests : IDisposable
|
||||
};
|
||||
await _tasks.AddAsync(task);
|
||||
|
||||
await _sut.SetTaskConfig(task.Id, "opus", null, null, 15, CancellationToken.None);
|
||||
var result = await _sut.SetTaskConfig(task.Id, "opus", null, null, 15, CancellationToken.None);
|
||||
|
||||
Assert.True(result.Ok);
|
||||
Assert.Equal(task.Id, result.TaskId);
|
||||
Assert.Equal("opus", result.Config!.Model);
|
||||
Assert.Equal(15, result.Config.MaxTurns);
|
||||
|
||||
var loaded = await _tasks.GetByIdAsync(task.Id);
|
||||
Assert.Equal("opus", loaded!.Model);
|
||||
Assert.Equal(15, loaded.MaxTurns);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task SetTaskConfig_NullField_ClearsThatOverride()
|
||||
{
|
||||
var listId = await SeedListAsync();
|
||||
var task = new TaskEntity
|
||||
{
|
||||
Id = Guid.NewGuid().ToString(),
|
||||
ListId = listId,
|
||||
Title = "t",
|
||||
Status = ClaudeDo.Data.Models.TaskStatus.Idle,
|
||||
CreatedAt = DateTime.UtcNow,
|
||||
CommitType = "chore",
|
||||
};
|
||||
await _tasks.AddAsync(task);
|
||||
await _sut.SetTaskConfig(task.Id, "opus", "be terse", "agent.md", 15, CancellationToken.None);
|
||||
|
||||
var result = await _sut.SetTaskConfig(task.Id, "opus", null, "agent.md", null, CancellationToken.None);
|
||||
|
||||
Assert.True(result.Ok);
|
||||
Assert.Equal("opus", result.Config!.Model);
|
||||
Assert.Null(result.Config.SystemPrompt);
|
||||
Assert.Equal("agent.md", result.Config.AgentPath);
|
||||
Assert.Null(result.Config.MaxTurns);
|
||||
|
||||
var loaded = await _tasks.GetByIdAsync(task.Id);
|
||||
Assert.Null(loaded!.SystemPrompt);
|
||||
Assert.Null(loaded.MaxTurns);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task GetTaskConfig_NoOverrideSet_ReturnsNotFound()
|
||||
{
|
||||
var listId = await SeedListAsync();
|
||||
var task = new TaskEntity
|
||||
{
|
||||
Id = Guid.NewGuid().ToString(),
|
||||
ListId = listId,
|
||||
Title = "t",
|
||||
Status = ClaudeDo.Data.Models.TaskStatus.Idle,
|
||||
CreatedAt = DateTime.UtcNow,
|
||||
CommitType = "chore",
|
||||
};
|
||||
await _tasks.AddAsync(task);
|
||||
|
||||
var cfg = await _sut.GetTaskConfig(task.Id, CancellationToken.None);
|
||||
|
||||
Assert.False(cfg.Found);
|
||||
Assert.Null(cfg.Config);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -832,7 +832,8 @@ public sealed class ExternalMcpServiceTests : IDisposable
|
||||
|
||||
var result = await sut.GetTaskConfig(task.Id, CancellationToken.None);
|
||||
|
||||
Assert.Null(result);
|
||||
Assert.False(result.Found);
|
||||
Assert.Null(result.Config);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
@@ -845,11 +846,12 @@ public sealed class ExternalMcpServiceTests : IDisposable
|
||||
|
||||
var result = await sut.GetTaskConfig(task.Id, CancellationToken.None);
|
||||
|
||||
Assert.NotNull(result);
|
||||
Assert.Equal("claude-sonnet-4-6", result.Model);
|
||||
Assert.Equal("be concise", result.SystemPrompt);
|
||||
Assert.Null(result.AgentPath);
|
||||
Assert.Equal(10, result.MaxTurns);
|
||||
Assert.True(result.Found);
|
||||
Assert.NotNull(result.Config);
|
||||
Assert.Equal("claude-sonnet-4-6", result.Config!.Model);
|
||||
Assert.Equal("be concise", result.Config.SystemPrompt);
|
||||
Assert.Null(result.Config.AgentPath);
|
||||
Assert.Equal(10, result.Config.MaxTurns);
|
||||
}
|
||||
|
||||
// ── GetTaskStatusValues ───────────────────────────────────────────────────
|
||||
|
||||
@@ -64,8 +64,10 @@ public sealed class LifecycleMcpToolsTests : IDisposable
|
||||
var task = await SeedTaskAsync(TaskStatus.Failed);
|
||||
var sut = BuildSut();
|
||||
|
||||
await sut.ResetFailedTask(task.Id, CancellationToken.None);
|
||||
var result = await sut.ResetFailedTask(task.Id, CancellationToken.None);
|
||||
|
||||
Assert.True(result.Reset);
|
||||
Assert.Equal(task.Id, result.TaskId);
|
||||
var loaded = await _tasks.GetByIdAsync(task.Id);
|
||||
Assert.Equal(TaskStatus.Idle, loaded!.Status);
|
||||
}
|
||||
|
||||
@@ -59,8 +59,10 @@ public sealed class ListMcpToolsTests : IDisposable
|
||||
{
|
||||
var created = await _sut.CreateList("gone", null, null, CancellationToken.None);
|
||||
|
||||
await _sut.DeleteList(created.Id, CancellationToken.None);
|
||||
var result = await _sut.DeleteList(created.Id, CancellationToken.None);
|
||||
|
||||
Assert.True(result.Deleted);
|
||||
Assert.Equal(created.Id, result.Id);
|
||||
Assert.Null(await _lists.GetByIdAsync(created.Id));
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user