Skip to content

Commit 119e170

Browse files
committed
test: 更新 EnumFilter 单元测试
1 parent fbe163b commit 119e170

File tree

4 files changed

+47
-154
lines changed

4 files changed

+47
-154
lines changed

src/BootstrapBlazor/Components/Filters/EnumFilter.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 (!string.IsNullOrEmpty(_value1) && Enum.TryParse(EnumType, _value1, out var val))
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
var type = Nullable.GetUnderlyingType(Type) ?? Type;
9797
if (first.FieldValue != null && first.FieldValue.GetType() == type)
9898
{
@@ -103,7 +103,7 @@ public override async Task SetFilterConditionsAsync(FilterKeyValueAction filter)
103103
_value1 = null;
104104
}
105105

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

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,7 @@ public override FilterKeyValueAction GetFilterConditions()
100100
/// </summary>
101101
public override async Task SetFilterConditionsAsync(FilterKeyValueAction filter)
102102
{
103-
FilterKeyValueAction first = filter.Filters?.FirstOrDefault() ?? filter;
103+
FilterKeyValueAction first = filter.Filters.FirstOrDefault() ?? filter;
104104
if (first.FieldValue is string value)
105105
{
106106
_value1 = value;
@@ -111,7 +111,7 @@ public override async Task SetFilterConditionsAsync(FilterKeyValueAction filter)
111111
}
112112
_action1 = first.FilterAction;
113113

114-
if (filter.Filters is { Count: 2 })
114+
if (filter.Filters.Count > 1)
115115
{
116116
Count = 1;
117117
FilterKeyValueAction second = filter.Filters[1];

test/UnitTest/Components/TableEnumFilterTest.cs

Lines changed: 42 additions & 144 deletions
Original file line numberDiff line numberDiff line change
@@ -8,182 +8,80 @@ namespace UnitTest.Components;
88
public class TableEnumFilterTest : BootstrapBlazorTestBase
99
{
1010
[Fact]
11-
public void Reset_Ok()
11+
public void Type_Ok()
1212
{
13-
var cut = Context.RenderComponent<EnumFilter>(pb =>
14-
{
15-
pb.Add(a => a.Type, typeof(EnumEducation));
16-
});
17-
18-
var filter = cut.Instance;
19-
cut.InvokeAsync(() => filter.Reset());
20-
}
21-
22-
[Fact]
23-
public void GetFilterConditions_Ok()
24-
{
25-
var cut = Context.RenderComponent<EnumFilter>(pb =>
26-
{
27-
pb.Add(a => a.Type, typeof(EnumEducation));
28-
});
29-
30-
var filter = cut.Instance;
31-
var conditions = filter.GetFilterConditions();
32-
Assert.NotNull(conditions.Filters);
33-
Assert.Empty(conditions.Filters);
34-
35-
// Set Value
36-
var items = cut.FindAll(".dropdown-item");
37-
cut.InvokeAsync(() => items[1].Click());
38-
conditions = filter.GetFilterConditions();
39-
Assert.NotNull(conditions.Filters);
40-
Assert.Single(conditions.Filters);
41-
}
13+
Assert.ThrowsAny<InvalidOperationException>(() => Context.RenderComponent<EnumFilter>());
4214

43-
[Fact]
44-
public async Task Count_Ok()
45-
{
46-
var cut = Context.RenderComponent<EnumFilter>(pb =>
15+
var cut = Context.RenderComponent<TableColumnFilter>(pb =>
4716
{
48-
pb.Add(a => a.Type, typeof(EnumEducation));
17+
pb.Add(a => a.Column, new MockColumn());
4918
});
50-
51-
var logic = cut.FindComponent<FilterLogicItem>();
52-
Assert.NotNull(logic);
53-
54-
var filter = cut.Instance.GetFilterConditions();
55-
Assert.NotNull(filter.Filters);
56-
Assert.Empty(filter.Filters);
57-
58-
var com = cut.FindComponent<Select<string?>>().Instance;
59-
await cut.InvokeAsync(() => com.SetValue("Middle"));
60-
61-
filter = cut.Instance.GetFilterConditions();
62-
Assert.NotNull(filter.Filters);
63-
Assert.Single(filter.Filters);
64-
65-
com = cut.FindComponents<Select<string?>>()[1].Instance;
66-
await cut.InvokeAsync(() => com.SetValue("Primary"));
67-
68-
filter = cut.Instance.GetFilterConditions();
69-
Assert.NotNull(filter.Filters);
70-
Assert.Equal(2, filter.Filters.Count);
71-
}
72-
73-
[Fact]
74-
public void InvalidOperationException_Exception()
75-
{
76-
Assert.ThrowsAny<InvalidOperationException>(() => Context.RenderComponent<EnumFilter>());
19+
var filter = cut.FindComponent<EnumFilter>();
20+
Assert.Equal(typeof(EnumEducation), filter.Instance.Type);
7721
}
7822

7923
[Fact]
80-
public void SetFilterConditions_Ok()
24+
public async Task FilterAction_Ok()
8125
{
8226
var cut = Context.RenderComponent<EnumFilter>(pb =>
8327
{
8428
pb.Add(a => a.Type, typeof(EnumEducation));
8529
});
8630
var filter = cut.Instance;
87-
var conditions = filter.GetFilterConditions();
88-
Assert.NotNull(conditions.Filters);
89-
Assert.Empty(conditions.Filters);
9031

9132
var newConditions = new FilterKeyValueAction()
9233
{
93-
Filters = [new FilterKeyValueAction() { FieldValue = EnumEducation.Middle }]
34+
Filters =
35+
[
36+
new FilterKeyValueAction() { FieldValue = EnumEducation.Primary },
37+
new FilterKeyValueAction() { FieldValue = EnumEducation.Middle }
38+
]
9439
};
95-
cut.InvokeAsync(() => filter.SetFilterConditionsAsync(newConditions));
40+
await cut.InvokeAsync(() => filter.SetFilterConditionsAsync(newConditions));
41+
var conditions = filter.GetFilterConditions();
42+
Assert.Equal(2, conditions.Filters.Count);
9643

44+
await cut.InvokeAsync(() => filter.Reset());
9745
conditions = filter.GetFilterConditions();
98-
Assert.NotNull(conditions.Filters);
99-
Assert.Equal(EnumEducation.Middle, conditions.Filters.First().FieldValue);
46+
Assert.Empty(conditions.Filters);
10047

48+
// Improve test coverage
10149
newConditions = new FilterKeyValueAction()
10250
{
103-
Filters = [new FilterKeyValueAction() { FieldValue = null }]
51+
Filters =
52+
[
53+
new FilterKeyValueAction() { FieldValue = null },
54+
new FilterKeyValueAction() { FieldValue = null }
55+
]
10456
};
105-
cut.InvokeAsync(() => filter.SetFilterConditionsAsync(newConditions));
57+
await cut.InvokeAsync(() => filter.SetFilterConditionsAsync(newConditions));
10658
conditions = filter.GetFilterConditions();
107-
Assert.NotNull(conditions.Filters);
10859
Assert.Empty(conditions.Filters);
10960

110-
newConditions = new FilterKeyValueAction() { FieldValue = EnumEducation.Middle };
111-
cut.InvokeAsync(() => filter.SetFilterConditionsAsync(newConditions));
112-
conditions = filter.GetFilterConditions();
113-
Assert.NotNull(conditions.Filters);
114-
Assert.Single(conditions.Filters);
115-
116-
newConditions = new FilterKeyValueAction() { Filters = [], FilterLogic = FilterLogic.Or };
117-
newConditions.Filters.Add(new FilterKeyValueAction() { FieldValue = EnumEducation.Primary });
118-
newConditions.Filters.Add(new FilterKeyValueAction() { FieldValue = EnumEducation.Middle });
119-
cut.InvokeAsync(() => filter.SetFilterConditionsAsync(newConditions));
120-
cut.Render();
121-
122-
// 检查 UI
123-
var comps = cut.FindComponents<Select<string?>>();
124-
Assert.Equal("Primary", comps[0].Instance.Value);
125-
Assert.Equal("Middle", comps[1].Instance.Value);
126-
127-
newConditions = new FilterKeyValueAction() { Filters = [], FilterLogic = FilterLogic.Or };
128-
newConditions.Filters.Add(new FilterKeyValueAction() { FieldValue = EnumEducation.Primary });
129-
newConditions.Filters.Add(new FilterKeyValueAction() { FieldValue = null });
130-
cut.InvokeAsync(() => filter.SetFilterConditionsAsync(newConditions));
131-
cut.Render();
132-
comps = cut.FindComponents<Select<string?>>();
133-
Assert.Equal("Primary", comps[0].Instance.Value);
134-
Assert.Equal("", comps[1].Instance.Value);
135-
}
136-
137-
[Fact]
138-
public void TableFilter_On()
139-
{
140-
var cut = Context.RenderComponent<BootstrapBlazorRoot>(pb =>
141-
{
142-
pb.AddChildContent<Table<Foo>>(pb =>
143-
{
144-
pb.Add(a => a.Items, new List<Foo>() { new() });
145-
pb.Add(a => a.RenderMode, TableRenderMode.Table);
146-
pb.Add(a => a.TableColumns, new RenderFragment<Foo>(foo => builder =>
147-
{
148-
var index = 0;
149-
builder.OpenComponent<TableColumn<Foo, int>>(index++);
150-
builder.AddAttribute(index++, nameof(TableColumn<Foo, int>.Field), foo.Count);
151-
builder.AddAttribute(index++, nameof(TableColumn<Foo, int>.FieldExpression), foo.GenerateValueExpression(nameof(Foo.Count), typeof(int)));
152-
builder.AddAttribute(index++, nameof(TableColumn<Foo, int>.Filterable), true);
153-
builder.AddAttribute(index++, nameof(TableColumn<Foo, int>.FilterTemplate), new RenderFragment(builder =>
154-
{
155-
builder.OpenComponent<MockFilter>(0);
156-
builder.CloseComponent();
157-
}));
158-
builder.CloseComponent();
159-
}));
160-
});
161-
});
162-
163-
// 测试 filter.Filters?.Count > 1 TableFilter 表达式
164-
var filter = cut.FindComponent<MockFilter>();
165-
cut.InvokeAsync(() => filter.Instance.SetFilterConditionsAsync(new FilterKeyValueAction()
61+
newConditions = new FilterKeyValueAction()
16662
{
167-
FieldValue = 1
168-
}));
169-
filter.Instance.Reset();
63+
Filters =
64+
[
65+
new FilterKeyValueAction() { FieldValue = true },
66+
new FilterKeyValueAction() { FieldValue = false }
67+
]
68+
};
69+
await cut.InvokeAsync(() => filter.SetFilterConditionsAsync(newConditions));
70+
conditions = filter.GetFilterConditions();
71+
Assert.Empty(conditions.Filters);
17072

171-
var tableFilter = cut.FindComponent<TableFilter>();
172-
tableFilter.Render();
73+
newConditions = new FilterKeyValueAction() { FieldValue = "1" };
74+
await cut.InvokeAsync(() => filter.SetFilterConditionsAsync(newConditions));
75+
conditions = filter.GetFilterConditions();
76+
Assert.Empty(conditions.Filters);
17377
}
17478

175-
class MockFilter : FilterBase
79+
class MockColumn : TableColumn<Foo, EnumEducation>
17680
{
177-
private List<FilterKeyValueAction>? _filters = [new FilterKeyValueAction() { FieldValue = 1 }, new FilterKeyValueAction() { FieldValue = 2 }];
178-
179-
public override FilterKeyValueAction GetFilterConditions()
180-
{
181-
return new FilterKeyValueAction() { Filters = _filters };
182-
}
183-
184-
public override void Reset()
81+
public MockColumn()
18582
{
186-
_filters = null;
83+
PropertyType = typeof(EnumEducation);
84+
FieldName = "Education";
18785
}
18886
}
18987
}

test/UnitTest/Components/TableStringFilterTest.cs

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,6 @@ await cut.InvokeAsync(() =>
3838
items[1].Click();
3939
});
4040
var conditions = cut.FindComponent<StringFilter>().Instance.GetFilterConditions();
41-
Assert.NotNull(conditions.Filters);
4241
Assert.Single(conditions.Filters);
4342
}
4443

@@ -63,7 +62,6 @@ public async Task FilterAction_Ok()
6362

6463
await cut.InvokeAsync(() => filter.Reset());
6564
conditions = filter.GetFilterConditions();
66-
Assert.NotNull(conditions.Filters);
6765
Assert.Empty(conditions.Filters);
6866

6967
// Improve test coverage
@@ -77,7 +75,6 @@ public async Task FilterAction_Ok()
7775
};
7876
await cut.InvokeAsync(() => filter.SetFilterConditionsAsync(newConditions));
7977
conditions = filter.GetFilterConditions();
80-
Assert.NotNull(conditions.Filters);
8178
Assert.Empty(conditions.Filters);
8279

8380
newConditions = new FilterKeyValueAction()
@@ -90,13 +87,11 @@ public async Task FilterAction_Ok()
9087
};
9188
await cut.InvokeAsync(() => filter.SetFilterConditionsAsync(newConditions));
9289
conditions = filter.GetFilterConditions();
93-
Assert.NotNull(conditions.Filters);
9490
Assert.Empty(conditions.Filters);
9591

9692
newConditions = new FilterKeyValueAction() { FieldValue = "1" };
9793
await cut.InvokeAsync(() => filter.SetFilterConditionsAsync(newConditions));
9894
conditions = filter.GetFilterConditions();
99-
Assert.NotNull(conditions.Filters);
10095
Assert.Single(conditions.Filters);
10196
}
10297
}

0 commit comments

Comments
 (0)