Skip to content

Commit c65affa

Browse files
committed
test: 增加 DateTimeFilter 单元测试
1 parent f33a8a8 commit c65affa

File tree

2 files changed

+69
-100
lines changed

2 files changed

+69
-100
lines changed

src/BootstrapBlazor/Components/Filters/DateTimeFilter.razor.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ public override void Reset()
6363
/// <returns></returns>
6464
public override FilterKeyValueAction GetFilterConditions()
6565
{
66-
var filter = new FilterKeyValueAction() { Filters = [] };
66+
var filter = new FilterKeyValueAction();
6767
if (_value1 != null)
6868
{
6969
filter.Filters.Add(new FilterKeyValueAction()
@@ -92,7 +92,7 @@ public override FilterKeyValueAction GetFilterConditions()
9292
/// </summary>
9393
public override async Task SetFilterConditionsAsync(FilterKeyValueAction filter)
9494
{
95-
var first = filter.Filters?.FirstOrDefault() ?? filter;
95+
var first = filter.Filters.FirstOrDefault() ?? filter;
9696
if (first.FieldValue is DateTime value)
9797
{
9898
_value1 = value;
@@ -103,7 +103,7 @@ public override async Task SetFilterConditionsAsync(FilterKeyValueAction filter)
103103
}
104104
_action1 = first.FilterAction;
105105

106-
if (filter.Filters is { Count: 2 })
106+
if (filter.Filters.Count > 1)
107107
{
108108
Count = 1;
109109
FilterKeyValueAction second = filter.Filters[1];

test/UnitTest/Components/TableDateTimeFilterTest.cs

Lines changed: 66 additions & 97 deletions
Original file line numberDiff line numberDiff line change
@@ -8,123 +8,92 @@ namespace UnitTest.Components;
88
public 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

Comments
 (0)