Skip to content

Commit 18a4659

Browse files
committed
!3765 test(#I6AM2M): add unit test for ListView
* refactor: 更新 CollapseItem Key 值 * test: 增加 Items 单元测试 * test: 增加 CollapsedGroupCallback 单元测试 * test: 增加 OnCollapseChanged 单元测试 * test: 增加 IsAccordion 单元测试 * test: 增加 Collapsable 单元测试
1 parent b035872 commit 18a4659

2 files changed

Lines changed: 155 additions & 1 deletion

File tree

src/BootstrapBlazor/Components/ListView/ListView.razor

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@
2929
var index = 0;
3030
foreach (var key in Rows.GroupBy(GroupName).OrderBy(k => k.Key))
3131
{
32-
<CollapseItem @key="@key.Key" Text="@key.Key?.ToString()" IsCollapsed="IsCollapsed(index++, key.Key)">
32+
<CollapseItem @key="@key" Text="@key.Key?.ToString()" IsCollapsed="IsCollapsed(index++, key.Key)">
3333
@foreach (var item in key)
3434
{
3535
<div class="listview-item" @onclick="@(e => OnClick(item))">

test/UnitTest/Components/ListViewTest.cs

Lines changed: 154 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,16 @@ namespace UnitTest.Components;
66

77
public 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

Comments
 (0)