feat(worker): extend ClaudeArgsBuilder with MaxTurns and PermissionMode

This commit is contained in:
Mika Kuns
2026-04-21 15:55:40 +02:00
parent cfb9ca1ca4
commit fca5d57fef
2 changed files with 96 additions and 2 deletions

View File

@@ -92,4 +92,88 @@ public sealed class ClaudeArgsBuilderTests
Assert.Contains("\"col1", args);
}
[Fact]
public void MaxTurns_Adds_Flag_When_Positive()
{
var args = _builder.Build(new ClaudeRunConfig(null, null, null, null, MaxTurns: 25));
Assert.Contains("--max-turns 25", args);
}
[Fact]
public void MaxTurns_Omitted_When_Null_Or_ZeroOrLess()
{
var a = _builder.Build(new ClaudeRunConfig(null, null, null, null, MaxTurns: null));
var b = _builder.Build(new ClaudeRunConfig(null, null, null, null, MaxTurns: 0));
Assert.DoesNotContain("--max-turns", a);
Assert.DoesNotContain("--max-turns", b);
}
[Fact]
public void PermissionMode_bypass_Keeps_DangerousFlag()
{
var args = _builder.Build(new ClaudeRunConfig(null, null, null, null, PermissionMode: "bypassPermissions"));
Assert.Contains("--dangerously-skip-permissions", args);
Assert.DoesNotContain("--permission-mode", args);
}
[Fact]
public void PermissionMode_acceptEdits_Emits_PermissionMode_Flag()
{
var args = _builder.Build(new ClaudeRunConfig(null, null, null, null, PermissionMode: "acceptEdits"));
Assert.Contains("--permission-mode acceptEdits", args);
Assert.DoesNotContain("--dangerously-skip-permissions", args);
}
[Fact]
public void PermissionMode_Null_Defaults_To_BypassPermissions()
{
var args = _builder.Build(new ClaudeRunConfig(null, null, null, null));
Assert.Contains("--dangerously-skip-permissions", args);
}
}
public sealed class MergeInstructionsTests
{
[Fact]
public void All_Empty_Returns_Empty()
{
var s = ClaudeDo.Worker.Runner.TaskRunner.MergeInstructions(null, null, null);
Assert.Equal("", s);
}
[Fact]
public void Only_Global_Returns_Global()
{
var s = ClaudeDo.Worker.Runner.TaskRunner.MergeInstructions("global rule", null, null);
Assert.Equal("global rule", s);
}
[Fact]
public void Only_Task_Returns_Task()
{
var s = ClaudeDo.Worker.Runner.TaskRunner.MergeInstructions(null, null, "task rule");
Assert.Equal("task rule", s);
}
[Fact]
public void Global_And_Task_Are_Prepended_With_Separator()
{
var s = ClaudeDo.Worker.Runner.TaskRunner.MergeInstructions("global rule", null, "task rule");
Assert.Equal("global rule\n\ntask rule", s);
}
[Fact]
public void All_Three_Are_Joined_In_Order()
{
var s = ClaudeDo.Worker.Runner.TaskRunner.MergeInstructions("G", "L", "T");
Assert.Equal("G\n\nL\n\nT", s);
}
[Fact]
public void Whitespace_Only_Parts_Are_Skipped()
{
var s = ClaudeDo.Worker.Runner.TaskRunner.MergeInstructions(" ", "L", "\t\n");
Assert.Equal("L", s);
}
}