Add tree context menu, missing connection settings, and fix lazy-load browse

Right-click on browse tree nodes to Subscribe (multi-select) or View History
(Variable nodes only), with automatic tab switching. Add missing UI controls
for failover URLs, session timeout, auto-accept certificates, and certificate
store path. Fix tree expansion by adding two-way IsExpanded binding on
TreeViewItem.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
Joseph Doherty
2026-03-30 17:45:29 -04:00
parent a2883b82d9
commit 55ef854612
8 changed files with 348 additions and 7 deletions

View File

@@ -132,4 +132,40 @@ public class SubscriptionsViewModelTests
{
_vm.NewInterval.ShouldBe(1000);
}
[Fact]
public async Task AddSubscriptionForNodeAsync_AddsSubscription()
{
_vm.IsConnected = true;
await _vm.AddSubscriptionForNodeAsync("ns=2;s=TestNode");
_vm.ActiveSubscriptions.Count.ShouldBe(1);
_vm.ActiveSubscriptions[0].NodeId.ShouldBe("ns=2;s=TestNode");
_vm.SubscriptionCount.ShouldBe(1);
_service.SubscribeCallCount.ShouldBe(1);
}
[Fact]
public async Task AddSubscriptionForNodeAsync_SkipsDuplicate()
{
_vm.IsConnected = true;
await _vm.AddSubscriptionForNodeAsync("ns=2;s=TestNode");
await _vm.AddSubscriptionForNodeAsync("ns=2;s=TestNode");
_vm.ActiveSubscriptions.Count.ShouldBe(1);
_service.SubscribeCallCount.ShouldBe(1);
}
[Fact]
public async Task AddSubscriptionForNodeAsync_DoesNothing_WhenDisconnected()
{
_vm.IsConnected = false;
await _vm.AddSubscriptionForNodeAsync("ns=2;s=TestNode");
_vm.ActiveSubscriptions.ShouldBeEmpty();
_service.SubscribeCallCount.ShouldBe(0);
}
}