Merge branch 'claude/main-page-group-hierarchy-3a3210'

This commit is contained in:
2026-08-04 10:10:19 +02:00
6 changed files with 368 additions and 53 deletions
@@ -233,7 +233,8 @@ public sealed class HostGridTests : IAsyncLifetime
vault.SelectedGroup = production;
vault.GroupFilter.ShouldBeNull("one press selects a group and does not open it");
vault.VisibleHosts.Count.ShouldBe(2, "so the grid still holds the hosts outside it");
vault.VisibleHosts.Select(row => row.Label)
.ShouldBe(["stage-web"], "so the grid is still the outermost level, and prod-db is inside a group");
vault.GroupTarget.ShouldBeSameAs(production, "what EDIT and DELETE act on");
vault.ShowsGroupActions.ShouldBeTrue();
@@ -252,7 +253,8 @@ public sealed class HostGridTests : IAsyncLifetime
// same job and went with the change.
vault.OpenGroupCommand.Execute(vault.GroupTrail[0].Group);
vault.VisibleHosts.Count.ShouldBe(2, "ALL HOSTS brings back the hosts outside the group");
vault.VisibleHosts.Select(row => row.Label)
.ShouldBe(["stage-web"], "ALL HOSTS is the outermost level, not every host in the keychain");
vault.GroupTarget.ShouldBeNull("and nothing is aimed at once no group is open or selected");
vault.ShowsGroupActions.ShouldBeFalse("a pair of buttons with no subject is hidden rather than shown");
}
@@ -344,7 +344,10 @@ public sealed class ScreenLayoutTests : IAsyncLifetime
/// that spans the width is as inside it as a card is.
/// </para>
/// <para>
/// Measured with every host filed, which is the shape that used to produce the most headings.
/// Measured with every host filed and that group open, which is the shape that used to produce the most
/// headings. Open, because the grid holds one level of the tree — a host inside a group is drawn inside
/// that group and nowhere else — so measuring at the outermost level would be measuring an empty grid.
/// See <c>VaultViewModel.Matches</c>.
/// </para>
/// </remarks>
[Fact]
@@ -358,6 +361,8 @@ public sealed class ScreenLayoutTests : IAsyncLifetime
new HostGroupMove(host, vault.Groups[0].EntityId));
}
vault.OpenGroupCommand.Execute(vault.Groups[0]);
await OnTheHostsScreenAsync((screen, _) =>
{
var rows = screen.HostGrid
@@ -370,7 +375,8 @@ public sealed class ScreenLayoutTests : IAsyncLifetime
rows.ShouldAllBe(row => row is HostRowViewModel);
});
await MeasureHostsAsync(faults => faults.ShouldBeEmpty("with three groups and every host filed"));
await MeasureHostsAsync(
faults => faults.ShouldBeEmpty("with every host filed and the group holding them open"));
}
/// <remarks>