Skip to content

Commit ee0861c

Browse files
committed
add nav menu tests
1 parent 44e2ce1 commit ee0861c

5 files changed

Lines changed: 166 additions & 24 deletions

File tree

tests/StaticInput.UnitTests.Viewer/Components/Layout/MainLayout.razor

Lines changed: 40 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -4,25 +4,34 @@
44

55
<MudThemeProvider Theme="@customTheme" />
66

7-
<MudLayout>
8-
<MudDrawer Open="true" Elevation="1" Breakpoint="Breakpoint.None" Fixed="true" Variant="DrawerVariant.Persistent">
9-
<MudDrawerHeader>
10-
<MudText Typo="Typo.h6">Static Input Tests</MudText>
11-
</MudDrawerHeader>
12-
<MudNavMenu>
13-
@foreach (var type in _availableComponentTypes)
14-
{
15-
<MudNavLink @key="type.Name" Match="NavLinkMatch.All" Icon="@Icons.Material.Filled.List"
16-
Href="@Navigation.GetUriWithQueryParameter("Test", type.Name)">
17-
@type.Name
18-
</MudNavLink>
19-
}
20-
</MudNavMenu>
21-
</MudDrawer>
22-
23-
<MudMainContent>
24-
<MudContainer MaxWidth="MaxWidth.Medium">
25-
<CascadingValue TValue="Type[]" IsFixed="true" Value="@_availableComponentTypes">
7+
<MudLayout Style="height:100vh">
8+
<MudDrawerContainer>
9+
<MudDrawer Open Fixed Elevation="1" Class="px-4" Style="width:auto"
10+
Breakpoint="Breakpoint.None" Variant="DrawerVariant.Persistent" ClipMode="DrawerClipMode.Docked">
11+
<MudDrawerHeader>
12+
<MudText Typo="Typo.h6">Static Input Tests</MudText>
13+
</MudDrawerHeader>
14+
<MudNavMenu>
15+
@foreach (var component in _testComponents.Keys)
16+
{
17+
<MudStaticNavGroup Title="@component">
18+
@foreach (var test in _testComponents[component])
19+
{
20+
<MudNavLink @key="test.Name" Match="NavLinkMatch.All" Icon="@Icons.Material.Filled.List"
21+
Href="@Navigation.GetUriWithQueryParameter("Test", test.Name)">
22+
@test.Name
23+
</MudNavLink>
24+
}
25+
</MudStaticNavGroup>
26+
27+
}
28+
</MudNavMenu>
29+
</MudDrawer>
30+
</MudDrawerContainer>
31+
32+
<MudMainContent Class="mud-height-full">
33+
<MudContainer Class="mud-height-full" MaxWidth="MaxWidth.Medium">
34+
<CascadingValue TValue="Dictionary<string, List<Type>>" IsFixed="true" Value="@_testComponents">
2635
@Body
2736
</CascadingValue>
2837
</MudContainer>
@@ -38,11 +47,20 @@
3847
}
3948
};
4049

41-
private Type[] _availableComponentTypes = new Type[0];
42-
50+
private Dictionary<string, List<Type>> _testComponents = new();
51+
4352
protected override void OnInitialized()
4453
{
45-
_availableComponentTypes = GetTestComponentTypes().ToArray();
54+
var availableComponentTypes = GetTestComponentTypes().ToArray();
55+
56+
57+
foreach (var item in availableComponentTypes)
58+
{
59+
var component = item.Namespace!.Split('.').Last();
60+
61+
if (!_testComponents.TryAdd(component, [item]))
62+
_testComponents[component].Add(item);
63+
}
4664

4765
base.OnInitialized();
4866
}

tests/StaticInput.UnitTests.Viewer/Components/Pages/Index.razor

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,15 +20,16 @@
2020
public string? TestComponent { get; set; } = null;
2121

2222
[CascadingParameter]
23-
public Type[] AvailableComponentTypes { get; set; } = [];
23+
public Dictionary<string, List<Type>> TestComponents { get; set; } = new();
24+
2425

2526
private RenderFragment? RenderFragment { get; set; }
2627

2728
protected override void OnParametersSet()
2829
{
2930
if (string.IsNullOrEmpty(TestComponent)) return;
3031

31-
var selectedType = AvailableComponentTypes.FirstOrDefault(type => type.Name.Contains(TestComponent, StringComparison.OrdinalIgnoreCase));
32+
var selectedType = TestComponents.Values.SelectMany(x => x).FirstOrDefault(type => type.Name.Contains(TestComponent, StringComparison.OrdinalIgnoreCase));
3233

3334
if (selectedType is null) return;
3435

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
<MudPaper Width="250px" Class="py-3" Elevation="0">
2+
<MudText Typo="Typo.h6" Class="px-4">My Application</MudText>
3+
<MudDivider Class="my-2" />
4+
<MudNavMenu>
5+
<MudNavLink Href="/dashboard">Dashboard</MudNavLink>
6+
<MudNavLink Href="/servers">Servers</MudNavLink>
7+
<MudNavLink Href="/billing" Disabled="true">Billing</MudNavLink>
8+
<MudStaticNavGroup Title="Settings" Expanded="true">
9+
<MudNavLink Href="/users">Users</MudNavLink>
10+
<MudNavLink Href="/security">Security</MudNavLink>
11+
</MudStaticNavGroup>
12+
<MudNavLink Href="/about">About</MudNavLink>
13+
</MudNavMenu>
14+
</MudPaper>
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
<MudLayout>
2+
<MudAppBar Elevation="1" Fixed="false">
3+
<MudStaticNavDrawerToggle id="static-left-toggle" DrawerId="static-mini" Icon="@Icons.Material.Filled.KeyboardDoubleArrowRight" Color="Color.Inherit" Edge="Edge.Start" />
4+
<MudSpacer />
5+
<MudStaticNavDrawerToggle id="static-right-toggle" DrawerId="static-persistent" Icon="@Icons.Material.Filled.KeyboardDoubleArrowLeft" Color="Color.Inherit" Edge="Edge.End" />
6+
</MudAppBar>
7+
<MudPaper Class="d-flex justify-center" Style="height:200px; overflow:hidden; position:relative;">
8+
<MudDrawer id="static-mini" Fixed="false" Elevation="1" Anchor="Anchor.Start" Variant="@DrawerVariant.Mini" ClipMode="DrawerClipMode.Always">
9+
<MudNavMenu>
10+
<MudNavLink Match="NavLinkMatch.All" Icon="@Icons.Material.Filled.Store">Store</MudNavLink>
11+
<MudNavLink Match="NavLinkMatch.All" Icon="@Icons.Material.Filled.LibraryBooks">Library</MudNavLink>
12+
<MudNavLink Match="NavLinkMatch.All" Icon="@Icons.Material.Filled.Group">Community</MudNavLink>
13+
</MudNavMenu>
14+
</MudDrawer>
15+
<MudAlert Class="absolute align-self-center" Severity="Severity.Success">Text inside MudContainer</MudAlert>
16+
<MudDrawerContainer Class="mud-height-full" Style="overflow:hidden">
17+
<MudDrawer id="static-persistent" Elevation="1" Anchor="Anchor.End" Variant="@DrawerVariant.Persistent" ClipMode="DrawerClipMode.Always">
18+
<MudDrawerHeader>
19+
<MudText Typo="Typo.h6">Persistent</MudText>
20+
</MudDrawerHeader>
21+
<MudNavMenu>
22+
<MudNavLink Match="NavLinkMatch.All">Store</MudNavLink>
23+
<MudNavLink Match="NavLinkMatch.All">Library</MudNavLink>
24+
<MudNavLink Match="NavLinkMatch.All">Community</MudNavLink>
25+
</MudNavMenu>
26+
</MudDrawer>
27+
</MudDrawerContainer>
28+
</MudPaper>
29+
</MudLayout>
Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
using FluentAssertions;
2+
using StaticInput.UnitTests.Fixtures;
3+
using StaticInput.UnitTests.Viewer.Components.Tests.NavMenu;
4+
5+
namespace StaticInput.UnitTests.Components
6+
{
7+
public partial class NavMenuTests(ContextFixture contextFixture) : BaseComponentTest(contextFixture)
8+
{
9+
[Fact]
10+
public async Task Group_Collapses_Expands_On_Click()
11+
{
12+
var url = typeof(NavMenuCollapseExpandTest).ToQueryString();
13+
14+
await Page.GotoAsync(url);
15+
16+
var button = Page.Locator("nav button");
17+
var menuGroup = Page.Locator(".mud-collapse-container");
18+
19+
var menuClasses = await menuGroup.GetAttributeAsync("class");
20+
var ariaValue = await menuGroup.GetAttributeAsync("aria-hidden");
21+
22+
menuClasses.Should().NotBeNullOrEmpty();
23+
menuClasses.Should().Contain("mud-collapse-entering");
24+
ariaValue.Should().Be("false");
25+
26+
await button.ClickAsync();
27+
28+
menuClasses = await menuGroup.GetAttributeAsync("class");
29+
menuClasses.Should().NotContain("mud-collapse-entered").And.NotContain("mud-collapse-entering");
30+
31+
ariaValue = await menuGroup.GetAttributeAsync("aria-hidden");
32+
ariaValue.Should().Be("true");
33+
34+
await button.ClickAsync();
35+
36+
menuClasses = await menuGroup.GetAttributeAsync("class");
37+
menuClasses.Should().Contain("mud-collapse-entered");
38+
39+
ariaValue = await menuGroup.GetAttributeAsync("aria-hidden");
40+
ariaValue.Should().Be("false");
41+
}
42+
43+
[Fact]
44+
public async Task Toggle_MudDrawer()
45+
{
46+
var url = typeof(NavMenuDrawerToggleTest).ToQueryString();
47+
48+
await Page.GotoAsync(url);
49+
50+
var leftToggle = Page.Locator("#static-left-toggle");
51+
var rightToggle = Page.Locator("#static-right-toggle");
52+
var miniDawer = Page.Locator("#static-mini");
53+
var persistentDawer = Page.Locator("#static-persistent");
54+
55+
var miniClasses = await miniDawer.GetAttributeAsync("class");
56+
miniClasses.Should().NotBeNullOrEmpty();
57+
miniClasses.Should().Contain("mud-drawer--closed");
58+
59+
var persistentClasses = await persistentDawer.GetAttributeAsync("class");
60+
persistentClasses.Should().NotBeNullOrEmpty();
61+
persistentClasses.Should().Contain("mud-drawer--closed");
62+
63+
await leftToggle.ClickAsync();
64+
miniClasses = await miniDawer.GetAttributeAsync("class");
65+
miniClasses.Should().Contain("mud-drawer--open");
66+
67+
await rightToggle.ClickAsync();
68+
persistentClasses = await persistentDawer.GetAttributeAsync("class");
69+
persistentClasses.Should().Contain("mud-drawer--open");
70+
71+
await rightToggle.ClickAsync();
72+
persistentClasses = await persistentDawer.GetAttributeAsync("class");
73+
persistentClasses.Should().Contain("mud-drawer--closed");
74+
75+
await leftToggle.ClickAsync();
76+
miniClasses = await miniDawer.GetAttributeAsync("class");
77+
miniClasses.Should().Contain("mud-drawer--closed");
78+
}
79+
}
80+
}

0 commit comments

Comments
 (0)