feat(data): add TaskRepository.UpdateAgentSettingsAsync
This commit is contained in:
@@ -111,6 +111,25 @@ public sealed class TaskRepository
|
|||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
#region Agent settings
|
||||||
|
|
||||||
|
public async Task UpdateAgentSettingsAsync(
|
||||||
|
string taskId,
|
||||||
|
string? model,
|
||||||
|
string? systemPrompt,
|
||||||
|
string? agentPath,
|
||||||
|
CancellationToken ct = default)
|
||||||
|
{
|
||||||
|
await _context.Tasks
|
||||||
|
.Where(t => t.Id == taskId)
|
||||||
|
.ExecuteUpdateAsync(s => s
|
||||||
|
.SetProperty(t => t.Model, model)
|
||||||
|
.SetProperty(t => t.SystemPrompt, systemPrompt)
|
||||||
|
.SetProperty(t => t.AgentPath, agentPath), ct);
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
#region Tags
|
#region Tags
|
||||||
|
|
||||||
public async Task AddTagAsync(string taskId, long tagId, CancellationToken ct = default)
|
public async Task AddTagAsync(string taskId, long tagId, CancellationToken ct = default)
|
||||||
|
|||||||
@@ -0,0 +1,75 @@
|
|||||||
|
using ClaudeDo.Data;
|
||||||
|
using ClaudeDo.Data.Models;
|
||||||
|
using ClaudeDo.Data.Repositories;
|
||||||
|
using ClaudeDo.Worker.Tests.Infrastructure;
|
||||||
|
using Xunit;
|
||||||
|
|
||||||
|
namespace ClaudeDo.Worker.Tests.Repositories;
|
||||||
|
|
||||||
|
public sealed class TaskRepositoryAgentSettingsTests : IDisposable
|
||||||
|
{
|
||||||
|
private readonly DbFixture _db = new();
|
||||||
|
private readonly ClaudeDoDbContext _ctx;
|
||||||
|
private readonly TaskRepository _repo;
|
||||||
|
|
||||||
|
public TaskRepositoryAgentSettingsTests()
|
||||||
|
{
|
||||||
|
_ctx = _db.CreateContext();
|
||||||
|
_repo = new TaskRepository(_ctx);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Dispose()
|
||||||
|
{
|
||||||
|
_ctx.Dispose();
|
||||||
|
_db.Dispose();
|
||||||
|
}
|
||||||
|
|
||||||
|
private async Task<string> SeedTaskAsync()
|
||||||
|
{
|
||||||
|
using var ctx = _db.CreateContext();
|
||||||
|
var listId = Guid.NewGuid().ToString();
|
||||||
|
var taskId = Guid.NewGuid().ToString();
|
||||||
|
await new ListRepository(ctx).AddAsync(new ListEntity
|
||||||
|
{
|
||||||
|
Id = listId, Name = "L", CreatedAt = DateTime.UtcNow,
|
||||||
|
});
|
||||||
|
await new TaskRepository(ctx).AddAsync(new TaskEntity
|
||||||
|
{
|
||||||
|
Id = taskId, ListId = listId, Title = "T", CreatedAt = DateTime.UtcNow,
|
||||||
|
});
|
||||||
|
return taskId;
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public async Task UpdateAgentSettingsAsync_SetsAllThreeFields()
|
||||||
|
{
|
||||||
|
var taskId = await SeedTaskAsync();
|
||||||
|
|
||||||
|
await _repo.UpdateAgentSettingsAsync(taskId, "opus", "system!", "/tmp/a.md");
|
||||||
|
|
||||||
|
var entity = await _repo.GetByIdAsync(taskId);
|
||||||
|
Assert.NotNull(entity);
|
||||||
|
Assert.Equal("opus", entity!.Model);
|
||||||
|
Assert.Equal("system!", entity.SystemPrompt);
|
||||||
|
Assert.Equal("/tmp/a.md", entity.AgentPath);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public async Task UpdateAgentSettingsAsync_NullsClearColumns()
|
||||||
|
{
|
||||||
|
var taskId = await SeedTaskAsync();
|
||||||
|
|
||||||
|
using (var ctx = _db.CreateContext())
|
||||||
|
{
|
||||||
|
await new TaskRepository(ctx).UpdateAgentSettingsAsync(taskId, "opus", "s", "/a.md");
|
||||||
|
}
|
||||||
|
|
||||||
|
await _repo.UpdateAgentSettingsAsync(taskId, null, null, null);
|
||||||
|
|
||||||
|
var entity = await _repo.GetByIdAsync(taskId);
|
||||||
|
Assert.NotNull(entity);
|
||||||
|
Assert.Null(entity!.Model);
|
||||||
|
Assert.Null(entity.SystemPrompt);
|
||||||
|
Assert.Null(entity.AgentPath);
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user