@@ -6,6 +6,16 @@ namespace UnitTest.Components;
66
77public class ListViewTest : BootstrapBlazorTestBase
88{
9+ [ Fact ]
10+ public void Items_Ok ( )
11+ {
12+ var cut = Context . RenderComponent < ListView < Product > > ( pb =>
13+ {
14+ pb . Add ( a => a . BodyTemplate , p => builder => builder . AddContent ( 0 , $ "{ p . ImageUrl } -{ p . Description } -{ p . Category } ") ) ;
15+ } ) ;
16+ cut . Markup . Contains ( "listview-body" ) ;
17+ }
18+
919 [ Fact ]
1020 public async Task ListView_Ok ( )
1121 {
@@ -109,6 +119,150 @@ public void QueryAsync_Ok()
109119 Assert . True ( query ) ;
110120 }
111121
122+ [ Fact ]
123+ public void Collapsable_Ok ( )
124+ {
125+ var clicked = false ;
126+ var items = Enumerable . Range ( 1 , 6 ) . Select ( i => new Product ( )
127+ {
128+ ImageUrl = $ "images/Pic{ i } .jpg",
129+ Description = $ "Pic{ i } .jpg",
130+ Category = $ "Group{ ( i % 4 ) + 1 } "
131+ } ) ;
132+ var cut = Context . RenderComponent < ListView < Product > > ( pb =>
133+ {
134+ pb . Add ( a => a . Collapsable , true ) ;
135+ pb . Add ( a => a . GroupName , p => p . Category ) ;
136+ pb . Add ( a => a . BodyTemplate , p => builder => builder . AddContent ( 0 , $ "{ p . ImageUrl } -{ p . Description } -{ p . Category } ") ) ;
137+ pb . Add ( a => a . OnQueryAsync , option =>
138+ {
139+ var ret = new QueryData < Product > ( )
140+ {
141+ Items = items ,
142+ TotalCount = 6
143+ } ;
144+ return Task . FromResult ( ret ) ;
145+ } ) ;
146+ pb . Add ( a => a . Pageable , true ) ;
147+ pb . Add ( a => a . PageItems , 2 ) ;
148+ pb . Add ( a => a . OnListViewItemClick , p =>
149+ {
150+ clicked = true ;
151+ return Task . CompletedTask ;
152+ } ) ;
153+ } ) ;
154+ var collapse = cut . FindComponent < Collapse > ( ) ;
155+ Assert . NotNull ( collapse ) ;
156+
157+ var item = cut . Find ( ".listview-item" ) ;
158+ cut . InvokeAsync ( ( ) => item . Click ( ) ) ;
159+ Assert . True ( clicked ) ;
160+ }
161+
162+ [ Fact ]
163+ public void IsAccordion_Ok ( )
164+ {
165+ var items = Enumerable . Range ( 1 , 6 ) . Select ( i => new Product ( )
166+ {
167+ ImageUrl = $ "images/Pic{ i } .jpg",
168+ Description = $ "Pic{ i } .jpg",
169+ Category = $ "Group{ ( i % 4 ) + 1 } "
170+ } ) ;
171+ var cut = Context . RenderComponent < ListView < Product > > ( pb =>
172+ {
173+ pb . Add ( a => a . Collapsable , true ) ;
174+ pb . Add ( a => a . IsAccordion , true ) ;
175+ pb . Add ( a => a . GroupName , p => p . Category ) ;
176+ pb . Add ( a => a . BodyTemplate , p => builder => builder . AddContent ( 0 , $ "{ p . ImageUrl } -{ p . Description } -{ p . Category } ") ) ;
177+ pb . Add ( a => a . OnQueryAsync , option =>
178+ {
179+ var ret = new QueryData < Product > ( )
180+ {
181+ Items = items ,
182+ TotalCount = 6
183+ } ;
184+ return Task . FromResult ( ret ) ;
185+ } ) ;
186+ pb . Add ( a => a . Pageable , true ) ;
187+ pb . Add ( a => a . PageItems , 2 ) ;
188+ } ) ;
189+ var collapse = cut . FindComponent < Collapse > ( ) ;
190+ Assert . NotNull ( collapse ) ;
191+ }
192+
193+ [ Fact ]
194+ public void CollapsedGroupCallback_Ok ( )
195+ {
196+ var callback = false ;
197+ var items = Enumerable . Range ( 1 , 6 ) . Select ( i => new Product ( )
198+ {
199+ ImageUrl = $ "images/Pic{ i } .jpg",
200+ Description = $ "Pic{ i } .jpg",
201+ Category = $ "Group{ ( i % 4 ) + 1 } "
202+ } ) ;
203+ var cut = Context . RenderComponent < ListView < Product > > ( pb =>
204+ {
205+ pb . Add ( a => a . Collapsable , true ) ;
206+ pb . Add ( a => a . IsAccordion , true ) ;
207+ pb . Add ( a => a . GroupName , p => p . Category ) ;
208+ pb . Add ( a => a . BodyTemplate , p => builder => builder . AddContent ( 0 , $ "{ p . ImageUrl } -{ p . Description } -{ p . Category } ") ) ;
209+ pb . Add ( a => a . CollapsedGroupCallback , p =>
210+ {
211+ callback = true ;
212+ return p ? . ToString ( ) != "Group1" ;
213+ } ) ;
214+ pb . Add ( a => a . OnQueryAsync , option =>
215+ {
216+ var ret = new QueryData < Product > ( )
217+ {
218+ Items = items ,
219+ TotalCount = 6
220+ } ;
221+ return Task . FromResult ( ret ) ;
222+ } ) ;
223+ pb . Add ( a => a . Pageable , true ) ;
224+ pb . Add ( a => a . PageItems , 2 ) ;
225+ } ) ;
226+ Assert . True ( callback ) ;
227+ }
228+
229+ [ Fact ]
230+ public void OnCollapseChanged_Ok ( )
231+ {
232+ CollapseItem ? expect = null ;
233+ var items = Enumerable . Range ( 1 , 6 ) . Select ( i => new Product ( )
234+ {
235+ ImageUrl = $ "images/Pic{ i } .jpg",
236+ Description = $ "Pic{ i } .jpg",
237+ Category = $ "Group{ ( i % 4 ) + 1 } "
238+ } ) ;
239+ var cut = Context . RenderComponent < ListView < Product > > ( pb =>
240+ {
241+ pb . Add ( a => a . Collapsable , true ) ;
242+ pb . Add ( a => a . GroupName , p => p . Category ) ;
243+ pb . Add ( a => a . BodyTemplate , p => builder => builder . AddContent ( 0 , $ "{ p . ImageUrl } -{ p . Description } -{ p . Category } ") ) ;
244+ pb . Add ( a => a . OnQueryAsync , option =>
245+ {
246+ var ret = new QueryData < Product > ( )
247+ {
248+ Items = items ,
249+ TotalCount = 6
250+ } ;
251+ return Task . FromResult ( ret ) ;
252+ } ) ;
253+ pb . Add ( a => a . OnCollapseChanged , item =>
254+ {
255+ expect = item ;
256+ return Task . CompletedTask ;
257+ } ) ;
258+ pb . Add ( a => a . Pageable , true ) ;
259+ pb . Add ( a => a . PageItems , 2 ) ;
260+ } ) ;
261+ var button = cut . Find ( ".accordion-button" ) ;
262+ cut . InvokeAsync ( ( ) => button . Click ( ) ) ;
263+ Assert . NotNull ( expect ) ;
264+ }
265+
112266 private class Product
113267 {
114268 public string ? ImageUrl { get ; set ; }
0 commit comments