Eight public members had no caller anywhere in src: GitService.GetFileDiffAsync, SubtaskRepository.DeleteByTaskIdAsync, TaskRepository.GetByListAsync (a backwards-compat alias for GetByListIdAsync) and .GetByCreatorAsync, WorktreeRepository.GetByStatesAsync, TaskMonitorViewModel.SetPendingQuestion (a duplicate of the live-event lambda), PrimeClaudeTabViewModel.ApplyFiredEvent, and StreamLineFormatter.FormatFile. TaskAttachmentRepository.DeleteAllForTaskAsync was reachable only from its own test; the ON DELETE CASCADE on task_attachments already covers it. Tests for the deleted members go with them. Dropped two package refs the platform already provides: EntityFrameworkCore.Design in Worker (the design-time factory and the migrations live in Data, which has its own ref) and System.IO.FileSystem.AccessControl in Installer.Tests (net8.0-windows ships the ACL APIs in the shared framework).
96 lines
3.2 KiB
C#
96 lines
3.2 KiB
C#
using ClaudeDo.Ui.Helpers;
|
|
|
|
namespace ClaudeDo.Ui.Tests.Helpers;
|
|
|
|
public class StreamLineFormatterTests
|
|
{
|
|
private readonly StreamLineFormatter _formatter = new();
|
|
|
|
// --- Assistant text blocks ---
|
|
|
|
[Fact]
|
|
public void FormatLine_AssistantTextBlock_ReturnsTextContent()
|
|
{
|
|
var line = """{"type":"assistant","message":{"content":[{"type":"text","text":"Hello world"}]}}""";
|
|
Assert.Equal("Hello world\n", _formatter.FormatLine(line));
|
|
}
|
|
|
|
[Fact]
|
|
public void FormatLine_AssistantConsecutiveTextBlocks_ReturnEachAppended()
|
|
{
|
|
var line1 = """{"type":"assistant","message":{"content":[{"type":"text","text":"Hello "}]}}""";
|
|
var line2 = """{"type":"assistant","message":{"content":[{"type":"text","text":"world"}]}}""";
|
|
Assert.Equal("Hello \n", _formatter.FormatLine(line1));
|
|
Assert.Equal("world\n", _formatter.FormatLine(line2));
|
|
}
|
|
|
|
[Fact]
|
|
public void FormatLine_AssistantThinkingBlock_IsFiltered()
|
|
{
|
|
var line = """{"type":"assistant","message":{"content":[{"type":"thinking","text":"hidden"}]}}""";
|
|
Assert.Null(_formatter.FormatLine(line));
|
|
}
|
|
|
|
// --- Tool use, result, system, fallback ---
|
|
|
|
[Fact]
|
|
public void FormatLine_AssistantToolUseBlock_ReturnsToolNameLine()
|
|
{
|
|
var line = """{"type":"assistant","message":{"content":[{"type":"tool_use","id":"x","name":"Bash","input":{"command":"ls"}}]}}""";
|
|
Assert.Equal("[Bash] $ ls\n", _formatter.FormatLine(line));
|
|
}
|
|
|
|
[Fact]
|
|
public void FormatLine_InputJsonDelta_ReturnsNull()
|
|
{
|
|
var line = """{"type":"stream_event","event":{"type":"content_block_delta","index":1,"delta":{"type":"input_json_delta","partial_json":"{\"cmd\":"}}}""";
|
|
Assert.Null(_formatter.FormatLine(line));
|
|
}
|
|
|
|
[Fact]
|
|
public void FormatLine_Result_ReturnsFormattedResult()
|
|
{
|
|
var line = """{"type":"result","result":"Done."}""";
|
|
Assert.Equal("\n--- Result ---\nDone.\n", _formatter.FormatLine(line));
|
|
}
|
|
|
|
[Fact]
|
|
public void FormatLine_ApiRetry_ReturnsRetryNotice()
|
|
{
|
|
var line = """{"type":"system","subtype":"api_retry"}""";
|
|
Assert.Equal("[Retrying API call...]\n", _formatter.FormatLine(line));
|
|
}
|
|
|
|
[Fact]
|
|
public void FormatLine_SystemUnknownSubtype_ReturnsNull()
|
|
{
|
|
var line = """{"type":"system","subtype":"some_unknown_subtype"}""";
|
|
Assert.Null(_formatter.FormatLine(line));
|
|
}
|
|
|
|
[Fact]
|
|
public void FormatLine_AssistantType_ReturnsNull()
|
|
{
|
|
var line = """{"type":"assistant","message":{}}""";
|
|
Assert.Null(_formatter.FormatLine(line));
|
|
}
|
|
|
|
[Fact]
|
|
public void FormatLine_MalformedJson_ReturnsRawLine()
|
|
{
|
|
var line = "not json at all";
|
|
Assert.Equal("not json at all", _formatter.FormatLine(line));
|
|
}
|
|
|
|
[Fact]
|
|
public void FormatLine_MessageStartAndDelta_ReturnsNull()
|
|
{
|
|
var start = """{"type":"stream_event","event":{"type":"message_start","message":{}}}""";
|
|
var delta = """{"type":"stream_event","event":{"type":"message_delta","delta":{}}}""";
|
|
Assert.Null(_formatter.FormatLine(start));
|
|
Assert.Null(_formatter.FormatLine(delta));
|
|
}
|
|
|
|
// --- Trim ---
|
|
}
|