@@ -8,135 +8,45 @@ namespace UnitTest.Components;
88public class TableNumberFilterTest : BootstrapBlazorTestBase
99{
1010 [ Fact ]
11- public void Reset_Ok ( )
12- {
13- var cut = Context . RenderComponent < NumberFilter < int > > ( ) ;
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 < NumberFilter < int ? > > ( ) ;
23-
24- var filter = cut . Instance ;
25- var conditions = filter . GetFilterConditions ( ) ;
26- Assert . NotNull ( conditions . Filters ) ;
27- Assert . Empty ( conditions . Filters ) ;
28-
29- // Set Value
30- var dt = cut . FindComponent < BootstrapInputNumber < int ? > > ( ) ;
31- cut . InvokeAsync ( ( ) => dt . Instance . SetValue ( 10 ) ) ;
32- conditions = filter . GetFilterConditions ( ) ;
33- Assert . NotNull ( conditions . Filters ) ;
34- Assert . Single ( conditions . Filters ) ;
35- }
36-
37- [ Fact ]
38- public async Task Misc_Ok ( )
39- {
40- var cut = Context . RenderComponent < BootstrapBlazorRoot > ( pb =>
41- {
42- pb . AddChildContent < Table < Foo > > ( pb =>
43- {
44- pb . Add ( a => a . Items , new List < Foo > ( ) { new ( ) } ) ;
45- pb . Add ( a => a . RenderMode , TableRenderMode . Table ) ;
46- pb . Add ( a => a . ShowFilterHeader , true ) ;
47- pb . Add ( a => a . TableColumns , new RenderFragment < Foo > ( foo => builder =>
48- {
49- var index = 0 ;
50- builder . OpenComponent < TableColumn < Foo , int > > ( index ++ ) ;
51- builder . AddAttribute ( index ++ , nameof ( TableColumn < Foo , int > . Field ) , foo . Count ) ;
52- builder . AddAttribute ( index ++ , nameof ( TableColumn < Foo , int > . FieldExpression ) , foo . GenerateValueExpression ( nameof ( Foo . Count ) , typeof ( int ) ) ) ;
53- builder . AddAttribute ( index ++ , nameof ( TableColumn < Foo , int > . Filterable ) , true ) ;
54- builder . CloseComponent ( ) ;
55- } ) ) ;
56- } ) ;
57- } ) ;
58- var filter = cut . FindComponent < NumberFilter < int ? > > ( ) ;
59- var input = filter . FindComponent < BootstrapInputNumber < int ? > > ( ) ;
60-
61- // Click ToDay Cell
62- await cut . InvokeAsync ( ( ) =>
63- {
64- input . Instance . SetValue ( 10 ) ;
65- } ) ;
66-
67- var filterButton = cut . FindComponent < FilterButton < FilterAction > > ( ) ;
68- await cut . InvokeAsync ( ( ) =>
69- {
70- // OnFilterValueChanged
71- var logics = filterButton . FindAll ( ".dropdown-item" ) ;
72- Assert . Equal ( 6 , logics . Count ) ;
73-
74- logics [ 1 ] . Click ( ) ;
75- } ) ;
76- var conditions = filter . Instance . GetFilterConditions ( ) ;
77- Assert . NotNull ( conditions . Filters ) ;
78- Assert . Single ( conditions . Filters ) ;
79- Assert . Equal ( 10 , conditions . Filters [ 0 ] . FieldValue ) ;
80- Assert . Equal ( FilterAction . LessThanOrEqual , conditions . Filters [ 0 ] . FilterAction ) ;
81-
82- // OnClearFilter
83- await cut . InvokeAsync ( ( ) =>
84- {
85- filterButton . Find ( ".fa-ban" ) . Click ( ) ;
86- } ) ;
87- conditions = filter . Instance . GetFilterConditions ( ) ;
88- Assert . NotNull ( conditions . Filters ) ;
89- Assert . Empty ( conditions . Filters ) ;
90- }
91-
92- [ Fact ]
93- public void NotNumberType_OnFilterValueChanged ( )
11+ public async Task OnFilterAsync_Ok ( )
9412 {
9513 var cut = Context . RenderComponent < TableColumnFilter > ( pb =>
9614 {
97- var foo = new Foo ( ) ;
98- var column = new TableColumn < Foo , string > ( ) ;
99- column . SetParametersAsync ( ParameterView . FromDictionary ( new Dictionary < string , object ? > ( )
100- {
101- [ nameof ( TableColumn < Foo , string > . Field ) ] = foo . Name ,
102- [ nameof ( TableColumn < Foo , string > . FieldExpression ) ] = foo . GenerateValueExpression ( ) ,
103- [ nameof ( TableColumn < Foo , string > . FilterTemplate ) ] = new RenderFragment ( builder =>
104- {
105- builder . OpenComponent < NumberFilter < string > > ( 0 ) ;
106- builder . CloseComponent ( ) ;
107- } )
108- } ) ) ;
15+ pb . Add ( a => a . Table , new MockTable ( ) ) ;
16+ pb . Add ( a => a . Column , new MockColumn ( ) ) ;
10917 pb . Add ( a => a . IsHeaderRow , true ) ;
110- pb . Add ( a => a . Column , column ) ;
11118 } ) ;
11219
113- // InHeaderRow 非数字类型过滤器测试
114- var input = cut . FindComponent < BootstrapInput < string > > ( ) . Instance ;
115- cut . InvokeAsync ( ( ) => input . SetValue ( "10" ) ) ;
20+ var input = cut . Find ( "[type=\" number\" ]" ) ;
21+ await cut . InvokeAsync ( ( ) => input . Change ( "1" ) ) ;
22+
23+ var action = cut . Find ( ".dropdown-item" ) ;
24+ await cut . InvokeAsync ( ( ) => action . Click ( ) ) ;
11625 }
11726
11827 [ Fact ]
119- public void SetFilterConditions_Ok ( )
28+ public async Task FilterAction_Ok ( )
12029 {
121- var cut = Context . RenderComponent < NumberFilter < int ? > > ( ) ;
30+ var cut = Context . RenderComponent < NumberFilter < double ? > > ( ) ;
12231 var filter = cut . Instance ;
123- var conditions = filter . GetFilterConditions ( ) ;
124- Assert . NotNull ( conditions . Filters ) ;
125- Assert . Empty ( conditions . Filters ) ;
12632
12733 var newConditions = new FilterKeyValueAction ( )
12834 {
12935 Filters =
13036 [
131- new FilterKeyValueAction ( ) { FieldValue = 1 } ,
132- new FilterKeyValueAction ( ) { FieldValue = 2 }
37+ new FilterKeyValueAction ( ) { FieldValue = 0.1d } ,
38+ new FilterKeyValueAction ( ) { FieldValue = 0.2d }
13339 ]
13440 } ;
135- cut . InvokeAsync ( ( ) => filter . SetFilterConditionsAsync ( newConditions ) ) ;
136- conditions = filter . GetFilterConditions ( ) ;
137- Assert . NotNull ( conditions . Filters ) ;
41+ await cut . InvokeAsync ( ( ) => filter . SetFilterConditionsAsync ( newConditions ) ) ;
42+ var conditions = filter . GetFilterConditions ( ) ;
13843 Assert . Equal ( 2 , conditions . Filters . Count ) ;
13944
45+ await cut . InvokeAsync ( ( ) => filter . Reset ( ) ) ;
46+ conditions = filter . GetFilterConditions ( ) ;
47+ Assert . Empty ( conditions . Filters ) ;
48+
49+ // Improve test coverage
14050 newConditions = new FilterKeyValueAction ( )
14151 {
14252 Filters =
@@ -145,15 +55,45 @@ public void SetFilterConditions_Ok()
14555 new FilterKeyValueAction ( ) { FieldValue = null }
14656 ]
14757 } ;
148- cut . InvokeAsync ( ( ) => filter . SetFilterConditionsAsync ( newConditions ) ) ;
58+ await cut . InvokeAsync ( ( ) => filter . SetFilterConditionsAsync ( newConditions ) ) ;
59+ conditions = filter . GetFilterConditions ( ) ;
60+ Assert . Empty ( conditions . Filters ) ;
61+
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 ) ) ;
14971 conditions = filter . GetFilterConditions ( ) ;
150- Assert . NotNull ( conditions . Filters ) ;
15172 Assert . Empty ( conditions . Filters ) ;
15273
153- newConditions = new FilterKeyValueAction ( ) { FieldValue = 1 } ;
154- cut . InvokeAsync ( ( ) => filter . SetFilterConditionsAsync ( newConditions ) ) ;
74+ newConditions = new FilterKeyValueAction ( ) { FieldValue = "1" } ;
75+ await cut . InvokeAsync ( ( ) => filter . SetFilterConditionsAsync ( newConditions ) ) ;
15576 conditions = filter . GetFilterConditions ( ) ;
156- Assert . NotNull ( conditions . Filters ) ;
157- Assert . Single ( conditions . Filters ) ;
77+ Assert . Empty ( conditions . Filters ) ;
78+ }
79+
80+ class MockTable : ITable
81+ {
82+ public Dictionary < string , IFilterAction > Filters { get ; set ; } = [ ] ;
83+
84+ public Func < Task > ? OnFilterAsync { get ; set ; }
85+
86+ public List < ITableColumn > Columns => [ ] ;
87+
88+ public IEnumerable < ITableColumn > GetVisibleColumns ( ) => Columns ;
89+ }
90+
91+ class MockColumn : TableColumn < Foo , double ? >
92+ {
93+ public MockColumn ( )
94+ {
95+ PropertyType = typeof ( double ? ) ;
96+ FieldName = "Double" ;
97+ }
15898 }
15999}
0 commit comments