@@ -8,123 +8,92 @@ namespace UnitTest.Components;
88public class TableDateTimeFilterTest : BootstrapBlazorTestBase
99{
1010 [ Fact ]
11- public void Reset_Ok ( )
11+ public async Task OnFilterAsync_Ok ( )
1212 {
13- var cut = Context . RenderComponent < DateTimeFilter > ( ) ;
14-
15- var filter = cut . Instance ;
16- cut . InvokeAsync ( ( ) => filter . Reset ( ) ) ;
17- }
18-
19- [ Fact ]
20- public void GetFilterConditions_Ok ( )
21- {
22- var cut = Context . RenderComponent < DateTimeFilter > ( ) ;
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+ } ) ;
2319
24- var filter = cut . Instance . GetFilterConditions ( ) ;
25- Assert . NotNull ( filter . Filters ) ;
26- Assert . Empty ( filter . Filters ) ;
20+ var button = cut . Find ( ".is-now" ) ;
21+ await cut . InvokeAsync ( ( ) => button . Click ( ) ) ;
2722
28- // Set Value
29- var dt = cut . FindComponent < DateTimePicker < DateTime ? > > ( ) ;
30- cut . InvokeAsync ( ( ) => dt . Instance . SetValue ( DateTime . Now ) ) ;
31- filter = cut . Instance . GetFilterConditions ( ) ;
32- Assert . NotNull ( filter . Filters ) ;
33- Assert . Single ( filter . Filters ) ;
23+ var action = cut . Find ( ".dropdown-item" ) ;
24+ await cut . InvokeAsync ( ( ) => action . Click ( ) ) ;
3425 }
3526
3627 [ Fact ]
37- public void Count_Ok ( )
28+ public async Task FilterAction_Ok ( )
3829 {
3930 var cut = Context . RenderComponent < DateTimeFilter > ( ) ;
31+ var filter = cut . Instance ;
4032
41- var logic = cut . FindComponent < FilterLogicItem > ( ) ;
42- Assert . NotNull ( logic ) ;
43-
44- var filter = cut . Instance . GetFilterConditions ( ) ;
45- Assert . NotNull ( filter . Filters ) ;
46- Assert . Empty ( filter . Filters ) ;
47-
48- var dt = cut . FindComponent < DateTimePicker < DateTime ? > > ( ) . Instance ;
49- cut . InvokeAsync ( ( ) => dt . SetValue ( DateTime . Now ) ) ;
50-
51- filter = cut . Instance . GetFilterConditions ( ) ;
52- Assert . NotNull ( filter . Filters ) ;
53- Assert . Single ( filter . Filters ) ;
54-
55- dt = cut . FindComponents < DateTimePicker < DateTime ? > > ( ) [ 1 ] . Instance ;
56- cut . InvokeAsync ( ( ) => dt . SetValue ( DateTime . Now ) ) ;
33+ var newConditions = new FilterKeyValueAction ( )
34+ {
35+ Filters =
36+ [
37+ new FilterKeyValueAction ( ) { FieldValue = DateTime . Now } ,
38+ new FilterKeyValueAction ( ) { FieldValue = DateTime . Now }
39+ ]
40+ } ;
41+ await cut . InvokeAsync ( ( ) => filter . SetFilterConditionsAsync ( newConditions ) ) ;
42+ var conditions = filter . GetFilterConditions ( ) ;
43+ Assert . Equal ( 2 , conditions . Filters . Count ) ;
5744
58- filter = cut . Instance . GetFilterConditions ( ) ;
59- Assert . NotNull ( filter . Filters ) ;
60- Assert . Equal ( 2 , filter . Filters . Count ) ;
61- }
45+ await cut . InvokeAsync ( ( ) => filter . Reset ( ) ) ;
46+ conditions = filter . GetFilterConditions ( ) ;
47+ Assert . Empty ( conditions . Filters ) ;
6248
63- [ Fact ]
64- public void IsHeaderRow_OnSelectedItemChanged ( )
65- {
66- var cut = Context . RenderComponent < BootstrapBlazorRoot > ( pb =>
49+ // Improve test coverage
50+ newConditions = new FilterKeyValueAction ( )
6751 {
68- pb . AddChildContent < Table < Foo > > ( pb =>
69- {
70- pb . Add ( a => a . Items , new List < Foo > ( ) { new ( ) } ) ;
71- pb . Add ( a => a . RenderMode , TableRenderMode . Table ) ;
72- pb . Add ( a => a . ShowFilterHeader , true ) ;
73- pb . Add ( a => a . TableColumns , new RenderFragment < Foo > ( foo => builder =>
74- {
75- var index = 0 ;
76- builder . OpenComponent < TableColumn < Foo , DateTime ? > > ( index ++ ) ;
77- builder . AddAttribute ( index ++ , nameof ( TableColumn < Foo , DateTime ? > . Field ) , foo . DateTime ) ;
78- builder . AddAttribute ( index ++ , nameof ( TableColumn < Foo , DateTime ? > . FieldExpression ) , foo . GenerateValueExpression ( nameof ( Foo . DateTime ) , typeof ( DateTime ? ) ) ) ;
79- builder . AddAttribute ( index ++ , nameof ( TableColumn < Foo , DateTime ? > . Filterable ) , true ) ;
80- builder . CloseComponent ( ) ;
81- } ) ) ;
82- } ) ;
83- } ) ;
52+ Filters =
53+ [
54+ new FilterKeyValueAction ( ) { FieldValue = null } ,
55+ new FilterKeyValueAction ( ) { FieldValue = null }
56+ ]
57+ } ;
58+ await cut . InvokeAsync ( ( ) => filter . SetFilterConditionsAsync ( newConditions ) ) ;
59+ conditions = filter . GetFilterConditions ( ) ;
60+ Assert . Empty ( conditions . Filters ) ;
8461
85- // 选择时间
86- var btn = cut . Find ( ".picker-panel-link-btn.is-now" ) ;
87- cut . InvokeAsync ( ( ) => btn . Click ( ) ) ;
62+ newConditions = new FilterKeyValueAction ( )
63+ {
64+ Filters =
65+ [
66+ new FilterKeyValueAction ( ) { FieldValue = true } ,
67+ new FilterKeyValueAction ( ) { FieldValue = false }
68+ ]
69+ } ;
70+ await cut . InvokeAsync ( ( ) => filter . SetFilterConditionsAsync ( newConditions ) ) ;
71+ conditions = filter . GetFilterConditions ( ) ;
72+ Assert . Empty ( conditions . Filters ) ;
8873
89- // 选择小于等于条件
90- var items = cut . FindAll ( ".dropdown-item" ) ;
91- cut . InvokeAsync ( ( ) => items [ 1 ] . Click ( ) ) ;
92- var filter = cut . FindComponent < DateTimeFilter > ( ) . Instance . GetFilterConditions ( ) ;
93- Assert . NotNull ( filter . Filters ) ;
94- Assert . Single ( filter . Filters ) ;
74+ newConditions = new FilterKeyValueAction ( ) { FieldValue = "1" } ;
75+ await cut . InvokeAsync ( ( ) => filter . SetFilterConditionsAsync ( newConditions ) ) ;
76+ conditions = filter . GetFilterConditions ( ) ;
77+ Assert . Empty ( conditions . Filters ) ;
9578 }
9679
97- [ Fact ]
98- public void SetFilterConditions_Ok ( )
80+ class MockTable : ITable
9981 {
100- var cut = Context . RenderComponent < DateTimeFilter > ( ) ;
101- var filter = cut . Instance ;
102- var conditions = filter . GetFilterConditions ( ) ;
103- Assert . NotNull ( conditions . Filters ) ;
104- Assert . Empty ( conditions . Filters ) ;
82+ public Dictionary < string , IFilterAction > Filters { get ; set ; } = [ ] ;
10583
106- var newConditions = new FilterKeyValueAction ( ) { Filters = [ ] } ;
107- DateTime now = DateTime . Now ;
108- newConditions . Filters . Add ( new FilterKeyValueAction ( ) { FieldValue = now } ) ;
109- newConditions . Filters . Add ( new FilterKeyValueAction ( ) { FieldValue = now } ) ;
110- cut . InvokeAsync ( ( ) => filter . SetFilterConditionsAsync ( newConditions ) ) ;
111- conditions = filter . GetFilterConditions ( ) ;
84+ public Func < Task > ? OnFilterAsync { get ; set ; }
11285
113- Assert . NotNull ( conditions . Filters ) ;
114- Assert . Equal ( 2 , conditions . Filters . Count ) ;
86+ public List < ITableColumn > Columns => [ ] ;
11587
116- newConditions . Filters . Clear ( ) ;
117- newConditions . Filters . Add ( new FilterKeyValueAction ( ) { FieldValue = null } ) ;
118- newConditions . Filters . Add ( new FilterKeyValueAction ( ) { FieldValue = null } ) ;
119- cut . InvokeAsync ( ( ) => filter . SetFilterConditionsAsync ( newConditions ) ) ;
120- conditions = filter . GetFilterConditions ( ) ;
121- Assert . NotNull ( conditions . Filters ) ;
122- Assert . Empty ( conditions . Filters ) ;
88+ public IEnumerable < ITableColumn > GetVisibleColumns ( ) => Columns ;
89+ }
12390
124- newConditions = new FilterKeyValueAction ( ) { FieldValue = now } ;
125- cut . InvokeAsync ( ( ) => filter . SetFilterConditionsAsync ( newConditions ) ) ;
126- conditions = filter . GetFilterConditions ( ) ;
127- Assert . NotNull ( conditions . Filters ) ;
128- Assert . Single ( conditions . Filters ) ;
91+ class MockColumn : TableColumn < Foo , DateTime >
92+ {
93+ public MockColumn ( )
94+ {
95+ PropertyType = typeof ( DateTime ) ;
96+ FieldName = "DateTime" ;
97+ }
12998 }
13099}
0 commit comments