fix(claude-do): merge Log Visualizer shows every footer-log message, with footer c
ClaudeDo-Task: 199f5a36ad8a4f329fc8bdeac10c5304
This commit is contained in:
@@ -21,6 +21,10 @@ public class LogVisualizerViewModelTests
|
||||
public override Task<IReadOnlyList<WorkerLogEntry>> GetRecentLogsAsync() => Task.FromResult(Logs);
|
||||
}
|
||||
|
||||
private static LogVisualizerViewModel Vm(IWorkerClient client,
|
||||
Func<string, Task<bool>>? copy = null, Func<IReadOnlyList<WorkerLogEntry>>? footer = null)
|
||||
=> new(client, footer ?? (() => Array.Empty<WorkerLogEntry>()), copy ?? (_ => Task.FromResult(true)));
|
||||
|
||||
private static WorkerLogEntry E(WorkerLogLevel lvl, string msg)
|
||||
=> new(msg, lvl, new DateTime(2026, 6, 23, 8, 0, 0, DateTimeKind.Utc));
|
||||
|
||||
@@ -30,7 +34,7 @@ public class LogVisualizerViewModelTests
|
||||
[Fact]
|
||||
public async Task Refresh_populates_rows_from_worker_newest_first()
|
||||
{
|
||||
var vm = new LogVisualizerViewModel(new FakeClient(new[] { E(WorkerLogLevel.Info, "a"), E(WorkerLogLevel.Error, "b") }));
|
||||
var vm = Vm(new FakeClient(new[] { E(WorkerLogLevel.Info, "a"), E(WorkerLogLevel.Error, "b") }));
|
||||
|
||||
await vm.RefreshAsync();
|
||||
|
||||
@@ -40,7 +44,7 @@ public class LogVisualizerViewModelTests
|
||||
[Fact]
|
||||
public async Task WarnErrorOnly_filters_out_info()
|
||||
{
|
||||
var vm = new LogVisualizerViewModel(new FakeClient(new[]
|
||||
var vm = Vm(new FakeClient(new[]
|
||||
{ E(WorkerLogLevel.Info, "a"), E(WorkerLogLevel.Warn, "w"), E(WorkerLogLevel.Error, "e") }));
|
||||
await vm.RefreshAsync();
|
||||
|
||||
@@ -52,7 +56,7 @@ public class LogVisualizerViewModelTests
|
||||
[Fact]
|
||||
public async Task Empty_logs_yield_no_rows_and_a_status()
|
||||
{
|
||||
var vm = new LogVisualizerViewModel(new FakeClient(Array.Empty<WorkerLogEntry>()));
|
||||
var vm = Vm(new FakeClient(Array.Empty<WorkerLogEntry>()));
|
||||
|
||||
await vm.RefreshAsync();
|
||||
|
||||
@@ -64,7 +68,7 @@ public class LogVisualizerViewModelTests
|
||||
public async Task Refresh_orders_newest_entry_first()
|
||||
{
|
||||
var t0 = new DateTime(2026, 6, 23, 8, 0, 0, DateTimeKind.Utc);
|
||||
var vm = new LogVisualizerViewModel(new FakeClient(new[]
|
||||
var vm = Vm(new FakeClient(new[]
|
||||
{
|
||||
E(WorkerLogLevel.Info, "oldest", t0),
|
||||
E(WorkerLogLevel.Info, "middle", t0.AddMinutes(1)),
|
||||
@@ -80,7 +84,7 @@ public class LogVisualizerViewModelTests
|
||||
public async Task Refresh_orders_newest_entry_first_with_warn_error_only()
|
||||
{
|
||||
var t0 = new DateTime(2026, 6, 23, 8, 0, 0, DateTimeKind.Utc);
|
||||
var vm = new LogVisualizerViewModel(new FakeClient(new[]
|
||||
var vm = Vm(new FakeClient(new[]
|
||||
{
|
||||
E(WorkerLogLevel.Warn, "oldest", t0),
|
||||
E(WorkerLogLevel.Info, "skipped", t0.AddMinutes(1)),
|
||||
@@ -98,7 +102,7 @@ public class LogVisualizerViewModelTests
|
||||
public async Task CopyLast_orders_chronologically_oldest_first()
|
||||
{
|
||||
var t0 = new DateTime(2026, 6, 23, 8, 0, 0, DateTimeKind.Utc);
|
||||
var vm = new LogVisualizerViewModel(new FakeClient(new[]
|
||||
var vm = Vm(new FakeClient(new[]
|
||||
{
|
||||
E(WorkerLogLevel.Info, "oldest", t0),
|
||||
E(WorkerLogLevel.Warn, "middle", t0.AddMinutes(1)),
|
||||
@@ -122,7 +126,7 @@ public class LogVisualizerViewModelTests
|
||||
var entries = Enumerable.Range(0, 50)
|
||||
.Select(i => E(WorkerLogLevel.Info, $"line{i}", t0.AddMinutes(i)))
|
||||
.ToArray();
|
||||
var vm = new LogVisualizerViewModel(new FakeClient(entries));
|
||||
var vm = Vm(new FakeClient(entries));
|
||||
await vm.RefreshAsync();
|
||||
|
||||
var lines = vm.BuildCopyText().Split('\n');
|
||||
@@ -136,7 +140,7 @@ public class LogVisualizerViewModelTests
|
||||
public async Task CopyLast_respects_active_warn_error_filter()
|
||||
{
|
||||
var t0 = new DateTime(2026, 6, 23, 8, 0, 0, DateTimeKind.Utc);
|
||||
var vm = new LogVisualizerViewModel(new FakeClient(new[]
|
||||
var vm = Vm(new FakeClient(new[]
|
||||
{
|
||||
E(WorkerLogLevel.Info, "skipped", t0),
|
||||
E(WorkerLogLevel.Warn, "kept", t0.AddMinutes(1)),
|
||||
@@ -153,7 +157,7 @@ public class LogVisualizerViewModelTests
|
||||
[Fact]
|
||||
public async Task CopyLastCommand_disabled_when_no_rows()
|
||||
{
|
||||
var vm = new LogVisualizerViewModel(new FakeClient(Array.Empty<WorkerLogEntry>()));
|
||||
var vm = Vm(new FakeClient(Array.Empty<WorkerLogEntry>()));
|
||||
await vm.RefreshAsync();
|
||||
|
||||
Assert.False(vm.CopyLastCommand.CanExecute(null));
|
||||
@@ -163,7 +167,7 @@ public class LogVisualizerViewModelTests
|
||||
public async Task CopyLastCommand_copies_and_reports_count_on_success()
|
||||
{
|
||||
string? copied = null;
|
||||
var vm = new LogVisualizerViewModel(new FakeClient(new[] { E(WorkerLogLevel.Info, "a") }),
|
||||
var vm = Vm(new FakeClient(new[] { E(WorkerLogLevel.Info, "a") }),
|
||||
text => { copied = text; return Task.FromResult(true); });
|
||||
await vm.RefreshAsync();
|
||||
|
||||
@@ -176,7 +180,7 @@ public class LogVisualizerViewModelTests
|
||||
[Fact]
|
||||
public async Task CopyLastCommand_reports_failure_when_clipboard_unavailable()
|
||||
{
|
||||
var vm = new LogVisualizerViewModel(new FakeClient(new[] { E(WorkerLogLevel.Info, "a") }),
|
||||
var vm = Vm(new FakeClient(new[] { E(WorkerLogLevel.Info, "a") }),
|
||||
_ => Task.FromResult(false));
|
||||
await vm.RefreshAsync();
|
||||
|
||||
@@ -190,7 +194,7 @@ public class LogVisualizerViewModelTests
|
||||
{
|
||||
var t0 = new DateTime(2026, 6, 23, 8, 0, 0, DateTimeKind.Utc);
|
||||
var client = new MutableFakeClient { Logs = new[] { E(WorkerLogLevel.Info, "a", t0) } };
|
||||
var vm = new LogVisualizerViewModel(client);
|
||||
var vm = Vm(client);
|
||||
await vm.RefreshAsync();
|
||||
var row = vm.Rows.Single();
|
||||
|
||||
@@ -207,7 +211,7 @@ public class LogVisualizerViewModelTests
|
||||
{
|
||||
var t0 = new DateTime(2026, 6, 23, 8, 0, 0, DateTimeKind.Utc);
|
||||
var client = new MutableFakeClient { Logs = new[] { E(WorkerLogLevel.Info, "a", t0) } };
|
||||
var vm = new LogVisualizerViewModel(client);
|
||||
var vm = Vm(client);
|
||||
await vm.RefreshAsync();
|
||||
var existingRow = vm.Rows.Single();
|
||||
|
||||
@@ -226,7 +230,7 @@ public class LogVisualizerViewModelTests
|
||||
{
|
||||
Logs = new[] { E(WorkerLogLevel.Info, "a", t0), E(WorkerLogLevel.Info, "b", t0.AddMinutes(1)) },
|
||||
};
|
||||
var vm = new LogVisualizerViewModel(client);
|
||||
var vm = Vm(client);
|
||||
await vm.RefreshAsync();
|
||||
Assert.Equal(new[] { "b", "a" }, vm.Rows.Select(r => r.Message));
|
||||
|
||||
|
||||
Reference in New Issue
Block a user