feat(ui): open merge-helper ConPTY tile from selection
Changelog / changelog (push) Successful in 1s
Release / release (push) Successful in 38s

This commit is contained in:
mika kuns
2026-07-24 14:21:26 +02:00
parent ecbc73495c
commit 083e1f3948
5 changed files with 100 additions and 0 deletions
@@ -406,6 +406,65 @@ public class MissionControlViewModelTests : IDisposable
Assert.Empty(vm.Panes);
}
private sealed class ThrowingMergeHelperLaunchSpecWorker : StubWorkerClient
{
public override Task<LaunchSpec> GetMergeHelperLaunchSpecAsync(IReadOnlyList<string> taskIds, string? listId, CancellationToken ct = default)
=> throw new InvalidOperationException("spec failed");
}
[Fact]
public async Task OpenMergeHelperConPtySessionAsync_AddsAdHocPane()
{
var worker = new FakeWorker();
using var vm = BuildVm(worker);
await vm.OpenMergeHelperConPtySessionAsync(null, new[] { "t1", "t2" });
Assert.Single(vm.ConPtySessions);
Assert.Null(vm.ConPtySessions[0].TaskId);
Assert.Single(vm.Panes);
Assert.Same(vm.ConPtySessions[0], vm.Panes[0]);
}
[Fact]
public async Task OpenMergeHelperConPtySessionAsync_TwoRuns_NeverDeduped()
{
var worker = new FakeWorker();
using var vm = BuildVm(worker);
await vm.OpenMergeHelperConPtySessionAsync(null, new[] { "t1" });
await vm.OpenMergeHelperConPtySessionAsync(null, new[] { "t1" });
Assert.Equal(2, vm.ConPtySessions.Count);
}
[Fact]
public async Task OpenMergeHelperConPtySessionAsync_EmptySelection_NoPane()
{
var worker = new FakeWorker();
using var vm = BuildVm(worker);
await vm.OpenMergeHelperConPtySessionAsync(null, Array.Empty<string>());
Assert.Empty(vm.ConPtySessions);
Assert.Empty(vm.Panes);
}
[Fact]
public async Task OpenMergeHelperConPtySessionAsync_WorkerThrows_RaisesErrorReported_NoPaneAdded()
{
var worker = new ThrowingMergeHelperLaunchSpecWorker();
using var vm = BuildVm(worker);
string? error = null;
vm.ErrorReported += msg => error = msg;
await vm.OpenMergeHelperConPtySessionAsync(null, new[] { "t1" });
Assert.Empty(vm.ConPtySessions);
Assert.Empty(vm.Panes);
Assert.NotNull(error);
}
[Fact]
public void ToggleLayoutCommand_FlipsIsFocusMode()
{