@@ -8,19 +8,68 @@ namespace UnitTest.Components;
88public class CascaderTest : BootstrapBlazorTestBase
99{
1010 [ Fact ]
11- public void ValidateForm_OK ( )
11+ public async Task ValidateForm_OK ( )
1212 {
13- var foo = new Foo ( ) ;
13+ var foo = new Foo ( ) { Name = "test1" } ;
14+ var valid = false ;
15+ var invalid = false ;
16+ var items = new List < CascaderItem > ( )
17+ {
18+ new ( ) { Text = "Test1" , Value = "test1" } ,
19+ new ( ) { Text = "Test2" , Value = "test2" }
20+ } ;
1421 var cut = Context . RenderComponent < ValidateForm > ( pb =>
1522 {
23+ pb . Add ( a => a . OnValidSubmit , context =>
24+ {
25+ valid = true ;
26+ return Task . CompletedTask ;
27+ } ) ;
28+ pb . Add ( a => a . OnInvalidSubmit , context =>
29+ {
30+ invalid = true ;
31+ return Task . CompletedTask ;
32+ } ) ;
1633 pb . Add ( a => a . Model , foo ) ;
1734 pb . AddChildContent < Cascader < string > > ( pb =>
1835 {
36+ pb . Add ( a => a . Items , items ) ;
1937 pb . Add ( a => a . DisplayText , "Test_DisplayText" ) ;
2038 pb . Add ( a => a . ShowLabel , true ) ;
39+ pb . Add ( a => a . IsClearable , true ) ;
40+ pb . Add ( a => a . Value , foo . Name ) ;
41+ pb . Add ( a => a . ValueExpression , Utility . GenerateValueExpression ( foo , "Name" , typeof ( string ) ) ) ;
42+ pb . Add ( a => a . OnValueChanged , v =>
43+ {
44+ foo . Name = v ;
45+ return Task . CompletedTask ;
46+ } ) ;
2147 } ) ;
2248 } ) ;
2349 cut . Contains ( "Test_DisplayText" ) ;
50+
51+ await cut . InvokeAsync ( ( ) =>
52+ {
53+ var form = cut . Find ( "form" ) ;
54+ form . Submit ( ) ;
55+ } ) ;
56+ Assert . True ( valid ) ;
57+
58+ var span = cut . Find ( ".clear-icon" ) ;
59+ Assert . True ( span . ClassList . Contains ( "text-success" ) ) ;
60+
61+ foo . Name = null ;
62+ var cascader = cut . FindComponent < Cascader < string > > ( ) ;
63+ cascader . SetParametersAndRender ( ) ;
64+ await cut . InvokeAsync ( ( ) =>
65+ {
66+ var form = cut . Find ( "form" ) ;
67+ form . Submit ( ) ;
68+ } ) ;
69+ Assert . True ( invalid ) ;
70+
71+ span = cut . Find ( ".clear-icon" ) ;
72+ Assert . True ( span . ClassList . Contains ( "text-danger" ) ) ;
2473 }
2574
2675 [ Fact ]
@@ -29,8 +78,12 @@ public void Color_Ok()
2978 var cut = Context . RenderComponent < Cascader < string > > ( pb =>
3079 {
3180 pb . Add ( a => a . Color , Color . Success ) ;
81+ pb . Add ( a => a . IsClearable , true ) ;
3282 } ) ;
3383 cut . Contains ( "border-success" ) ;
84+
85+ var span = cut . Find ( ".clear-icon" ) ;
86+ Assert . True ( span . ClassList . Contains ( "text-success" ) ) ;
3487 }
3588
3689 [ Fact ]
@@ -129,12 +182,32 @@ public void IsDisabled_Ok()
129182 var cut = Context . RenderComponent < Cascader < string > > ( pb =>
130183 {
131184 pb . Add ( a => a . IsDisabled , true ) ;
185+ pb . Add ( a => a . IsClearable , true ) ;
132186 } ) ;
133187
134188 var input = cut . Find ( ".dropdown > input" ) ;
135189 Assert . True ( input . HasAttribute ( "disabled" ) ) ;
136190 }
137191
192+ [ Fact ]
193+ public async Task IsClearable_Ok ( )
194+ {
195+ var isClear = false ;
196+ var cut = Context . RenderComponent < Cascader < string > > ( pb =>
197+ {
198+ pb . Add ( a => a . IsClearable , true ) ;
199+ pb . Add ( a => a . OnClearAsync , ( ) =>
200+ {
201+ isClear = true ;
202+ return Task . CompletedTask ;
203+ } ) ;
204+ } ) ;
205+
206+ var clearButton = cut . Find ( ".clear-icon" ) ;
207+ await cut . InvokeAsync ( ( ) => clearButton . Click ( ) ) ;
208+ Assert . True ( isClear ) ;
209+ }
210+
138211 [ Fact ]
139212 public void SubCascader_NullItems ( )
140213 {
0 commit comments