Skip to content

Commit 8c4d96d

Browse files
committed
test: 增加单元测试
1 parent 7299c52 commit 8c4d96d

File tree

1 file changed

+140
-0
lines changed

1 file changed

+140
-0
lines changed
Lines changed: 140 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,140 @@
1+
// Licensed to the .NET Foundation under one or more agreements.
2+
// The .NET Foundation licenses this file to you under the Apache 2.0 License
3+
// See the LICENSE file in the project root for more information.
4+
// Maintainer: Argo Zhang([email protected]) Website: https://www.blazor.zone
5+
6+
namespace UnitTest.Components;
7+
8+
public class TableMultiSelectFilterTest : BootstrapBlazorTestBase
9+
{
10+
[Fact]
11+
public void IsHeaderRow_Ok()
12+
{
13+
var cut = Context.RenderComponent<TableColumnFilter>(pb =>
14+
{
15+
pb.Add(a => a.Table, new MockTable());
16+
pb.Add(a => a.Column, new MockColumn());
17+
pb.Add(a => a.IsHeaderRow, true);
18+
});
19+
cut.Contains("filter-row");
20+
}
21+
[Fact]
22+
public async Task OnFilterAsync_Ok()
23+
{
24+
var cut = Context.RenderComponent<TableColumnFilter>(pb =>
25+
{
26+
pb.Add(a => a.Table, new MockTable());
27+
pb.Add(a => a.Column, new MockColumn());
28+
pb.Add(a => a.IsHeaderRow, false);
29+
});
30+
var item = cut.Find(".dropdown-menu .dropdown-item");
31+
await cut.InvokeAsync(() => item.Click());
32+
33+
var filter = cut.FindComponent<MultiSelectFilter<string>>();
34+
var conditions = filter.Instance.GetFilterConditions();
35+
36+
Assert.Single(conditions.Filters);
37+
38+
await cut.InvokeAsync(() => filter.Instance.Reset());
39+
conditions = filter.Instance.GetFilterConditions();
40+
Assert.Empty(conditions.Filters);
41+
42+
await cut.InvokeAsync(() => filter.Instance.SetFilterConditionsAsync(new FilterKeyValueAction()
43+
{
44+
FieldValue = "v1,v2",
45+
}));
46+
conditions = filter.Instance.GetFilterConditions();
47+
Assert.Equal(2, conditions.Filters.Count);
48+
49+
await cut.InvokeAsync(() => filter.Instance.SetFilterConditionsAsync(new FilterKeyValueAction()
50+
{
51+
FieldValue = true,
52+
}));
53+
conditions = filter.Instance.GetFilterConditions();
54+
Assert.Empty(conditions.Filters);
55+
}
56+
57+
[Fact]
58+
public async Task OnFilterAsync_List()
59+
{
60+
var cut = Context.RenderComponent<TableColumnFilter>(pb =>
61+
{
62+
pb.Add(a => a.Table, new MockTable());
63+
pb.Add(a => a.Column, new MockColumnList());
64+
pb.Add(a => a.IsHeaderRow, false);
65+
});
66+
var item = cut.Find(".dropdown-menu .dropdown-item");
67+
await cut.InvokeAsync(() => item.Click());
68+
69+
var filter = cut.FindComponent<MultiSelectFilter<List<string>>>();
70+
var conditions = filter.Instance.GetFilterConditions();
71+
72+
Assert.Single(conditions.Filters);
73+
74+
await cut.InvokeAsync(() => filter.Instance.Reset());
75+
conditions = filter.Instance.GetFilterConditions();
76+
Assert.Empty(conditions.Filters);
77+
}
78+
79+
class MockTable : ITable
80+
{
81+
public Dictionary<string, IFilterAction> Filters { get; set; } = [];
82+
83+
public Func<Task>? OnFilterAsync { get; set; }
84+
85+
public List<ITableColumn> Columns => [];
86+
87+
public IEnumerable<ITableColumn> GetVisibleColumns() => Columns;
88+
}
89+
90+
class MockColumn : TableColumn<Foo, string>
91+
{
92+
public MockColumn()
93+
{
94+
PropertyType = typeof(string);
95+
FieldName = "MultiSelect";
96+
97+
FilterTemplate = new RenderFragment(builder =>
98+
{
99+
builder.OpenComponent<FilterProvider>(0);
100+
builder.AddAttribute(1, nameof(FilterProvider.ChildContent), new RenderFragment(builder =>
101+
{
102+
builder.OpenComponent<MultiSelectFilter<string>>(2);
103+
builder.AddAttribute(3, nameof(MultiSelectFilter<string>.Items), new List<SelectedItem>
104+
{
105+
new("v1", "Test-1"),
106+
new("v2", "Test-2")
107+
});
108+
builder.CloseComponent();
109+
}));
110+
builder.CloseComponent();
111+
});
112+
}
113+
}
114+
115+
class MockColumnList : TableColumn<Foo, List<string>>
116+
{
117+
public MockColumnList()
118+
{
119+
PropertyType = typeof(List<string>);
120+
FieldName = "MultiSelect";
121+
122+
FilterTemplate = new RenderFragment(builder =>
123+
{
124+
builder.OpenComponent<FilterProvider>(0);
125+
builder.AddAttribute(1, nameof(FilterProvider.ChildContent), new RenderFragment(builder =>
126+
{
127+
builder.OpenComponent<MultiSelectFilter<List<string>>>(2);
128+
builder.AddAttribute(3, nameof(MultiSelectFilter<List<string>>.Items), new List<SelectedItem>
129+
{
130+
new("v1", "Test-1"),
131+
new("v2", "Test-2")
132+
});
133+
builder.CloseComponent();
134+
}));
135+
builder.CloseComponent();
136+
});
137+
}
138+
}
139+
140+
}

0 commit comments

Comments
 (0)