Bisher nur per Hand in worker.config.json. Neuer Abschnitt CLAUDE CLI mit eigenem Save-Button (die Datei gehoert dem Worker, nicht app_settings) und einer Zeile, wohin der Wert per ExecutableResolver tatsaechlich aufloest — 'nicht im PATH gefunden' war bisher erst am fehlgeschlagenen Run zu sehen. WorkerConfig ist DI-Singleton und ClaudeProcess loest pro Spawn auf, also greift die Aenderung ab dem naechsten Run ohne Neustart. SaveOnlineInbox/SaveClaudeBin teilen jetzt ein SaveKey(), damit beide dieselbe read-modify-write-Semantik haben (alle anderen Keys bleiben unberuehrt). Die zugehoerigen Locale-Keys sind im vorigen Commit mitgelaufen.
47 lines
1.5 KiB
C#
47 lines
1.5 KiB
C#
using ClaudeDo.Worker.Config;
|
|
using Xunit;
|
|
|
|
namespace ClaudeDo.Worker.Tests.Config;
|
|
|
|
/// SaveClaudeBin/SaveOnlineInbox are read-modify-write on a file the user also hand-edits, so the
|
|
/// one thing that must hold is: every other key survives.
|
|
public sealed class WorkerConfigSaveTests : IDisposable
|
|
{
|
|
private readonly string _path = Path.Combine(
|
|
Path.GetTempPath(), $"cd_workercfg_{Guid.NewGuid():N}.json");
|
|
|
|
public void Dispose() { try { File.Delete(_path); } catch { } }
|
|
|
|
[Fact]
|
|
public void SaveClaudeBin_keeps_every_other_key()
|
|
{
|
|
File.WriteAllText(_path, """
|
|
{
|
|
"claude_bin": "claude",
|
|
"signalr_port": 12345,
|
|
"external_mcp_api_key": "secret",
|
|
"online_inbox": { "enabled": true }
|
|
}
|
|
""");
|
|
|
|
var cfg = WorkerConfig.Load(_path);
|
|
cfg.ClaudeBin = @"C:\tools\claude.cmd";
|
|
cfg.SaveClaudeBin(_path);
|
|
|
|
var reloaded = WorkerConfig.Load(_path);
|
|
Assert.Equal(@"C:\tools\claude.cmd", reloaded.ClaudeBin);
|
|
Assert.Equal(12345, reloaded.SignalRPort);
|
|
Assert.Equal("secret", reloaded.ExternalMcpApiKey);
|
|
Assert.True(reloaded.OnlineInbox.Enabled);
|
|
}
|
|
|
|
[Fact]
|
|
public void SaveClaudeBin_creates_the_file_when_missing()
|
|
{
|
|
var cfg = new WorkerConfig { ClaudeBin = "claude-next" };
|
|
cfg.SaveClaudeBin(_path);
|
|
|
|
Assert.Equal("claude-next", WorkerConfig.Load(_path).ClaudeBin);
|
|
}
|
|
}
|