Skip to content

Commit fbe163b

Browse files
committed
test: 增加单元测试
1 parent baa70ea commit fbe163b

File tree

2 files changed

+39
-134
lines changed

2 files changed

+39
-134
lines changed

test/UnitTest/Components/TableFilterTest.cs renamed to test/UnitTest/Components/TableColumnFilterTest.cs

Lines changed: 25 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,14 @@
44
// Maintainer: Argo Zhang([email protected]) Website: https://www.blazor.zone
55

66
using Microsoft.Extensions.Localization;
7+
using System.Threading.Tasks;
78

89
namespace UnitTest.Components;
910

10-
public partial class TableFilterTest : BootstrapBlazorTestBase
11+
public partial class TableColumnFilterTest : BootstrapBlazorTestBase
1112
{
1213
[Fact]
13-
public void TableFilter_Ok()
14+
public void TableColumnFilter_Ok()
1415
{
1516
var localizer = Context.Services.GetRequiredService<IStringLocalizer<Foo>>();
1617
var cut = Context.RenderComponent<BootstrapBlazorRoot>(pb =>
@@ -30,7 +31,7 @@ public void TableFilter_Ok()
3031
pb.Add(a => a.ShowFilterHeader, false);
3132
});
3233

33-
var filterInstance = cut.FindComponent<TableFilter>();
34+
var filterInstance = cut.FindComponent<TableColumnFilter>();
3435

3536
// Reset/Confirm buttons
3637
// ClickReset
@@ -56,7 +57,7 @@ public void TableFilter_Ok()
5657
}
5758

5859
[Fact]
59-
public void FilterTemplate_Ok()
60+
public void Filter_Ok()
6061
{
6162
var cut = Context.RenderComponent<BootstrapBlazorRoot>(pb =>
6263
{
@@ -73,48 +74,32 @@ public void FilterTemplate_Ok()
7374
}
7475

7576
[Fact]
76-
public async Task BoolFilter_Ok()
77+
public async Task OnFilterAsync_Ok()
7778
{
78-
var cut = Context.RenderComponent<TableFilter>(pb =>
79+
var cut = Context.RenderComponent<TableColumnFilter>(pb =>
7980
{
8081
pb.Add(a => a.Table, new MockTable());
81-
pb.Add(a => a.Column, new MockColumn<bool>());
82+
pb.Add(a => a.Column, new MockColumn<string>());
8283
});
83-
var boolFilter = cut.FindComponent<BoolFilter>().Instance;
8484

85-
// SetFilterConditionsAsync
86-
var newConditions = new FilterKeyValueAction();
87-
await cut.InvokeAsync(() => boolFilter.SetFilterConditionsAsync(newConditions));
85+
var filter = cut.Instance;
86+
await cut.InvokeAsync(() => filter.OnFilterAsync());
8887

89-
newConditions = new FilterKeyValueAction
90-
{
91-
Filters = [new FilterKeyValueAction() { FieldValue = true }]
92-
};
93-
await cut.InvokeAsync(() => boolFilter.SetFilterConditionsAsync(newConditions));
94-
95-
newConditions = new FilterKeyValueAction
96-
{
97-
Filters = [new FilterKeyValueAction() { FieldValue = false }]
98-
};
99-
await cut.InvokeAsync(() => boolFilter.SetFilterConditionsAsync(newConditions));
100-
101-
// GetFilterConditions
102-
var filter = boolFilter.GetFilterConditions();
103-
Assert.NotNull(filter.Filters);
104-
Assert.Single(filter.Filters);
105-
106-
// Reset
107-
await cut.InvokeAsync(() => boolFilter.Reset());
108-
109-
// IsHeaderRow
11088
cut.SetParametersAndRender(pb =>
11189
{
112-
pb.Add(a => a.IsHeaderRow, true);
90+
pb.Add(a => a.Table, new MockTable() { OnFilterAsync = () => Task.CompletedTask });
11391
});
114-
var select = cut.FindComponent<Select<string>>();
115-
var items = cut.FindAll(".dropdown-item");
116-
Assert.Equal(3, items.Count);
117-
await cut.InvokeAsync(() => items[1].Click());
92+
await cut.InvokeAsync(() => filter.OnFilterAsync());
93+
94+
var f = cut.FindComponent<StringFilter>();
95+
await cut.InvokeAsync(() => f.Instance.SetFilterConditionsAsync(new FilterKeyValueAction()
96+
{
97+
Filters =
98+
[
99+
new() { FieldValue = "test" }
100+
]
101+
}));
102+
await cut.InvokeAsync(() => filter.OnFilterAsync());
118103
}
119104

120105
private static RenderFragment<Foo> CreateTableColumns() => foo => builder =>
@@ -242,9 +227,9 @@ private class Cat
242227

243228
private class MockTable : ITable
244229
{
245-
public Dictionary<string, IFilterAction> Filters => [];
230+
public Dictionary<string, IFilterAction> Filters { get; set; } = [];
246231

247-
public Func<Task>? OnFilterAsync { get; }
232+
public Func<Task>? OnFilterAsync { get; set; }
248233

249234
public List<ITableColumn> Columns => [];
250235

@@ -256,6 +241,7 @@ private class MockColumn<TType> : TableColumn<Foo, TType>
256241
public MockColumn()
257242
{
258243
PropertyType = typeof(TType);
244+
FieldName = "Name";
259245
}
260246
}
261247
}

test/UnitTest/Components/TableStringFilterTest.cs

Lines changed: 14 additions & 95 deletions
Original file line numberDiff line numberDiff line change
@@ -8,40 +8,7 @@ namespace UnitTest.Components;
88
public class TableStringFilterTest : BootstrapBlazorTestBase
99
{
1010
[Fact]
11-
public void Count_Ok()
12-
{
13-
var cut = Context.RenderComponent<StringFilter>();
14-
15-
var logic = cut.FindComponent<FilterLogicItem>();
16-
Assert.NotNull(logic);
17-
18-
var conditions = cut.Instance.GetFilterConditions();
19-
Assert.NotNull(conditions.Filters);
20-
Assert.Empty(conditions.Filters);
21-
22-
var dt = cut.FindComponent<BootstrapInput<string>>().Instance;
23-
cut.InvokeAsync(() => dt.SetValue("Test"));
24-
25-
conditions = cut.Instance.GetFilterConditions();
26-
Assert.NotNull(conditions.Filters);
27-
Assert.Single(conditions.Filters);
28-
29-
dt = cut.FindComponents<BootstrapInput<string>>()[1].Instance;
30-
cut.InvokeAsync(() => dt.SetValue("Test"));
31-
32-
conditions = cut.Instance.GetFilterConditions();
33-
Assert.NotNull(conditions.Filters);
34-
Assert.Equal(2, conditions.Filters.Count);
35-
36-
// 测试 FilterLogicItem LogicChanged 代码覆盖率
37-
var logicItem = cut.FindComponent<FilterLogicItem>();
38-
var item = logicItem.FindAll(".dropdown-item")[0];
39-
cut.InvokeAsync(() => item.Click());
40-
Assert.Equal(FilterLogic.And, logicItem.Instance.Logic);
41-
}
42-
43-
[Fact]
44-
public void IsHeaderRow_OnFilterValueChanged()
11+
public async Task OnFilterAsync_Ok()
4512
{
4613
var cut = Context.RenderComponent<BootstrapBlazorRoot>(pb =>
4714
{
@@ -62,7 +29,7 @@ public void IsHeaderRow_OnFilterValueChanged()
6229
});
6330
});
6431

65-
cut.InvokeAsync(() =>
32+
await cut.InvokeAsync(() =>
6633
{
6734
var filter = cut.FindComponent<BootstrapInput<string>>().Instance;
6835
filter.SetValue("test");
@@ -76,51 +43,10 @@ public void IsHeaderRow_OnFilterValueChanged()
7643
}
7744

7845
[Fact]
79-
public void SearchFilterAction_Ok()
80-
{
81-
var searchFilterAction = new SearchFilterAction("Test-Search", "1", FilterAction.NotEqual);
82-
83-
var conditions = searchFilterAction.GetFilterConditions();
84-
Assert.NotNull(conditions);
85-
Assert.Null(conditions.Filters);
86-
Assert.Equal("Test-Search", conditions.FieldKey);
87-
Assert.Equal("1", conditions.FieldValue);
88-
Assert.Equal(FilterAction.NotEqual, conditions.FilterAction);
89-
Assert.Equal(FilterLogic.And, conditions.FilterLogic);
90-
91-
searchFilterAction.Reset();
92-
Assert.Null(searchFilterAction.Value);
93-
94-
searchFilterAction.SetFilterConditionsAsync(new FilterKeyValueAction()
95-
{
96-
Filters =
97-
[
98-
new FilterKeyValueAction()
99-
{
100-
FieldKey = "Test-Search",
101-
FieldValue = "test"
102-
}
103-
]
104-
});
105-
Assert.Equal("test", searchFilterAction.Value);
106-
107-
searchFilterAction.SetFilterConditionsAsync(new FilterKeyValueAction()
108-
{
109-
FieldKey = "Test-Search",
110-
FieldValue = "test",
111-
FilterAction = FilterAction.NotEqual
112-
});
113-
Assert.Equal("test", searchFilterAction.Value);
114-
}
115-
116-
[Fact]
117-
public void SetFilterConditions_Ok()
46+
public async Task FilterAction_Ok()
11847
{
11948
var cut = Context.RenderComponent<StringFilter>();
12049
var filter = cut.Instance;
121-
var conditions = filter.GetFilterConditions();
122-
Assert.NotNull(conditions.Filters);
123-
Assert.Empty(conditions.Filters);
12450

12551
var newConditions = new FilterKeyValueAction()
12652
{
@@ -130,11 +56,17 @@ public void SetFilterConditions_Ok()
13056
new FilterKeyValueAction() { FieldValue = "test2" }
13157
]
13258
};
133-
cut.InvokeAsync(() => filter.SetFilterConditionsAsync(newConditions));
134-
conditions = filter.GetFilterConditions();
59+
await cut.InvokeAsync(() => filter.SetFilterConditionsAsync(newConditions));
60+
var conditions = filter.GetFilterConditions();
13561
Assert.NotNull(conditions.Filters);
13662
Assert.Equal(2, conditions.Filters.Count);
13763

64+
await cut.InvokeAsync(() => filter.Reset());
65+
conditions = filter.GetFilterConditions();
66+
Assert.NotNull(conditions.Filters);
67+
Assert.Empty(conditions.Filters);
68+
69+
// Improve test coverage
13870
newConditions = new FilterKeyValueAction()
13971
{
14072
Filters =
@@ -143,7 +75,7 @@ public void SetFilterConditions_Ok()
14375
new FilterKeyValueAction() { FieldValue = false }
14476
]
14577
};
146-
cut.InvokeAsync(() => filter.SetFilterConditionsAsync(newConditions));
78+
await cut.InvokeAsync(() => filter.SetFilterConditionsAsync(newConditions));
14779
conditions = filter.GetFilterConditions();
14880
Assert.NotNull(conditions.Filters);
14981
Assert.Empty(conditions.Filters);
@@ -156,28 +88,15 @@ public void SetFilterConditions_Ok()
15688
new FilterKeyValueAction() { FieldValue = "" }
15789
]
15890
};
159-
cut.InvokeAsync(() => filter.SetFilterConditionsAsync(newConditions));
91+
await cut.InvokeAsync(() => filter.SetFilterConditionsAsync(newConditions));
16092
conditions = filter.GetFilterConditions();
16193
Assert.NotNull(conditions.Filters);
16294
Assert.Empty(conditions.Filters);
16395

16496
newConditions = new FilterKeyValueAction() { FieldValue = "1" };
165-
cut.InvokeAsync(() => filter.SetFilterConditionsAsync(newConditions));
97+
await cut.InvokeAsync(() => filter.SetFilterConditionsAsync(newConditions));
16698
conditions = filter.GetFilterConditions();
16799
Assert.NotNull(conditions.Filters);
168100
Assert.Single(conditions.Filters);
169101
}
170-
171-
[Fact]
172-
public void HasFilter_Ok()
173-
{
174-
var cut = Context.RenderComponent<MockStringFilter>();
175-
var filter = cut.Instance;
176-
Assert.False(filter.HasFilterTest());
177-
}
178-
179-
private class MockStringFilter : StringFilter
180-
{
181-
public bool HasFilterTest() => true;
182-
}
183102
}

0 commit comments

Comments
 (0)