mirror of
https://github.com/dotnetcore/BootstrapBlazor.git
synced 2025-12-20 10:26:41 +08:00
test(Table): add unit test improve code coverage (#2439)
* test: 增加 Table 持久化列宽单元测试 * test: 精简代码 * refactor: 精简代码 * refactor: 格式化代码 * test: 增加单元测试 * test: 精简代码 * test: 增加单元测试 * test: 更新单元测试
This commit is contained in:
@@ -156,10 +156,7 @@ public partial class TableFilter : IFilter
|
||||
FieldKey = Column.GetFieldName();
|
||||
Column.Filter = this;
|
||||
|
||||
_lookup = new(() => Column.Lookup ?? (!string.IsNullOrEmpty(Column.LookupServiceKey)
|
||||
? LookupService.GetItemsByKey(Column.LookupServiceKey)
|
||||
: null)
|
||||
);
|
||||
_lookup = new(() => Column.Lookup ?? LookupService.GetItemsByKey(Column.LookupServiceKey));
|
||||
_step = Column.Step?.ToString();
|
||||
}
|
||||
|
||||
|
||||
@@ -11,6 +11,7 @@ public class ImageTest : BootstrapBlazorTestBase
|
||||
{
|
||||
var cut = Context.RenderComponent<ImageViewer>(pb =>
|
||||
{
|
||||
pb.Add(a => a.PreviewIndex, 0);
|
||||
pb.Add(a => a.Url, "https://www.blazor.zone/images/logo.png");
|
||||
pb.Add(a => a.ZIndex, 2000);
|
||||
pb.Add(a => a.FitMode, ObjectFitMode.Fill);
|
||||
|
||||
@@ -70,7 +70,7 @@ public class TableFilterTest : BootstrapBlazorTestBase
|
||||
{
|
||||
pb.Add(a => a.Items, new List<Cat>
|
||||
{
|
||||
new Cat()
|
||||
new()
|
||||
});
|
||||
pb.Add(a => a.RenderMode, TableRenderMode.Table);
|
||||
pb.Add(a => a.TableColumns, CreateCatTableColumns());
|
||||
@@ -102,7 +102,7 @@ public class TableFilterTest : BootstrapBlazorTestBase
|
||||
{
|
||||
pb.AddChildContent<Table<Foo>>(pb =>
|
||||
{
|
||||
pb.Add(a => a.Items, new List<Foo>() { new Foo() });
|
||||
pb.Add(a => a.Items, new List<Foo>() { new() });
|
||||
pb.Add(a => a.RenderMode, TableRenderMode.Table);
|
||||
pb.Add(a => a.ShowFilterHeader, true);
|
||||
pb.Add(a => a.TableColumns, new RenderFragment<Foo>(foo => builder =>
|
||||
@@ -158,12 +158,19 @@ public class TableFilterTest : BootstrapBlazorTestBase
|
||||
builder.AddAttribute(index++, nameof(TableColumn<Foo, IEnumerable<string>>.Field), foo.Hobby);
|
||||
builder.AddAttribute(index++, nameof(TableColumn<Foo, IEnumerable<string>>.Lookup), new List<SelectedItem>()
|
||||
{
|
||||
new SelectedItem("1", "Test1"),
|
||||
new SelectedItem("2", "Test2"),
|
||||
new("1", "Test1"),
|
||||
new("2", "Test2"),
|
||||
});
|
||||
builder.AddAttribute(index++, nameof(TableColumn<Foo, IEnumerable<string>>.FieldExpression), foo.GenerateValueExpression(nameof(Foo.Hobby), typeof(IEnumerable<string>)));
|
||||
builder.AddAttribute(index++, nameof(TableColumn<Foo, IEnumerable<string>>.Filterable), true);
|
||||
builder.CloseComponent();
|
||||
|
||||
builder.OpenComponent<TableColumn<Foo, int>>(index++);
|
||||
builder.AddAttribute(index++, nameof(TableColumn<Foo, int>.Field), foo.Id);
|
||||
builder.AddAttribute(index++, nameof(TableColumn<Foo, int>.LookupServiceKey), "FooLookup");
|
||||
builder.AddAttribute(index++, nameof(TableColumn<Foo, int>.FieldExpression), foo.GenerateValueExpression(nameof(Foo.Id), typeof(int)));
|
||||
builder.AddAttribute(index++, nameof(TableColumn<Foo, int>.Filterable), true);
|
||||
builder.CloseComponent();
|
||||
};
|
||||
|
||||
private static RenderFragment<Cat> CreateCatTableColumns() => cat => builder =>
|
||||
|
||||
@@ -14,8 +14,8 @@ public class TableLookupFilterTest : BootstrapBlazorTestBase
|
||||
pb.Add(a => a.Type, typeof(string));
|
||||
pb.Add(a => a.Lookup, new List<SelectedItem>()
|
||||
{
|
||||
new SelectedItem("true", "True"),
|
||||
new SelectedItem("false", "False")
|
||||
new("true", "True"),
|
||||
new("false", "False")
|
||||
});
|
||||
});
|
||||
|
||||
@@ -31,8 +31,8 @@ public class TableLookupFilterTest : BootstrapBlazorTestBase
|
||||
pb.Add(a => a.Type, typeof(string));
|
||||
pb.Add(a => a.Lookup, new List<SelectedItem>()
|
||||
{
|
||||
new SelectedItem("true", "True"),
|
||||
new SelectedItem("false", "False")
|
||||
new("true", "True"),
|
||||
new("false", "False")
|
||||
});
|
||||
});
|
||||
|
||||
@@ -66,7 +66,7 @@ public class TableLookupFilterTest : BootstrapBlazorTestBase
|
||||
{
|
||||
pb.AddChildContent<Table<Foo>>(pb =>
|
||||
{
|
||||
pb.Add(a => a.Items, new List<Foo>() { new Foo() });
|
||||
pb.Add(a => a.Items, new List<Foo>() { new() });
|
||||
pb.Add(a => a.RenderMode, TableRenderMode.Table);
|
||||
pb.Add(a => a.ShowFilterHeader, true);
|
||||
pb.Add(a => a.TableColumns, new RenderFragment<Foo>(foo => builder =>
|
||||
@@ -79,8 +79,8 @@ public class TableLookupFilterTest : BootstrapBlazorTestBase
|
||||
builder.AddAttribute(index++, nameof(TableColumn<Foo, bool>.LookupStringComparison), StringComparison.OrdinalIgnoreCase);
|
||||
builder.AddAttribute(index++, nameof(TableColumn<Foo, bool>.Lookup), new List<SelectedItem>()
|
||||
{
|
||||
new SelectedItem("true", "True"),
|
||||
new SelectedItem("false", "False")
|
||||
new("true", "True"),
|
||||
new("false", "False")
|
||||
});
|
||||
builder.CloseComponent();
|
||||
}));
|
||||
@@ -102,8 +102,8 @@ public class TableLookupFilterTest : BootstrapBlazorTestBase
|
||||
pb.Add(a => a.Type, typeof(bool));
|
||||
pb.Add(a => a.Lookup, new List<SelectedItem>()
|
||||
{
|
||||
new SelectedItem("true", "True"),
|
||||
new SelectedItem("false", "False")
|
||||
new("true", "True"),
|
||||
new("false", "False")
|
||||
});
|
||||
});
|
||||
|
||||
@@ -114,7 +114,7 @@ public class TableLookupFilterTest : BootstrapBlazorTestBase
|
||||
|
||||
var newConditions = new FilterKeyValueAction()
|
||||
{
|
||||
Filters = new() { new FilterKeyValueAction() { FieldValue = true } }
|
||||
Filters = [new FilterKeyValueAction() { FieldValue = true }]
|
||||
};
|
||||
cut.InvokeAsync(() => filter.SetFilterConditionsAsync(newConditions));
|
||||
conditions = filter.GetFilterConditions();
|
||||
@@ -123,7 +123,7 @@ public class TableLookupFilterTest : BootstrapBlazorTestBase
|
||||
|
||||
newConditions = new FilterKeyValueAction()
|
||||
{
|
||||
Filters = new() { new FilterKeyValueAction() { FieldValue = null } }
|
||||
Filters = [new FilterKeyValueAction() { FieldValue = null }]
|
||||
};
|
||||
cut.InvokeAsync(() => filter.SetFilterConditionsAsync(newConditions));
|
||||
conditions = filter.GetFilterConditions();
|
||||
|
||||
@@ -5111,6 +5111,171 @@ public class TableTest : TableTestBase
|
||||
await cut.InvokeAsync(() => table.Instance.QueryAsync());
|
||||
}
|
||||
|
||||
[Theory]
|
||||
[InlineData(true)]
|
||||
[InlineData(false)]
|
||||
public void ReloadColumnWidth_Ok(bool fixedHeader)
|
||||
{
|
||||
Context.JSInterop.Setup<string>("reloadColumnWidth", "test_table_id", "test_client_name").SetResult("""
|
||||
{
|
||||
"cols": [
|
||||
{ "name": "Name", "width": 20 },
|
||||
{ "name": "Address", "width": 80 }
|
||||
],
|
||||
"table": 100
|
||||
}
|
||||
""");
|
||||
var localizer = Context.Services.GetRequiredService<IStringLocalizer<Foo>>();
|
||||
var items = Foo.GenerateFoo(localizer, 2);
|
||||
var cut = Context.RenderComponent<BootstrapBlazorRoot>(pb =>
|
||||
{
|
||||
pb.AddChildContent<Table<Foo>>(pb =>
|
||||
{
|
||||
pb.Add(a => a.IsFixedHeader, fixedHeader);
|
||||
pb.Add(a => a.RenderMode, TableRenderMode.Table);
|
||||
pb.Add(a => a.ClientTableName, "test_client_name");
|
||||
pb.Add(a => a.Id, "test_table_id");
|
||||
pb.Add(a => a.AllowResizing, true);
|
||||
pb.Add(a => a.Items, items);
|
||||
pb.Add(a => a.TableColumns, foo => builder =>
|
||||
{
|
||||
builder.OpenComponent<TableColumn<Foo, string>>(0);
|
||||
builder.AddAttribute(1, "Field", "Name");
|
||||
builder.AddAttribute(2, "FieldExpression", Utility.GenerateValueExpression(foo, "Name", typeof(string)));
|
||||
builder.CloseComponent();
|
||||
|
||||
builder.OpenComponent<TableColumn<Foo, string>>(0);
|
||||
builder.AddAttribute(1, "Field", "Address");
|
||||
builder.AddAttribute(2, "FieldExpression", Utility.GenerateValueExpression(foo, "Address", typeof(string)));
|
||||
builder.CloseComponent();
|
||||
});
|
||||
});
|
||||
});
|
||||
var table = cut.FindComponent<Table<Foo>>();
|
||||
Assert.Contains("style=\"width: 100px;\"", table.Markup);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void ReloadColumnWidth_TableWidth_Invalid()
|
||||
{
|
||||
Context.JSInterop.Setup<string>("reloadColumnWidth", "test_table_id", "test_client_name").SetResult("""
|
||||
{
|
||||
"cols": [
|
||||
{ "name": "Name", "width": 20 },
|
||||
{ "name": "Address", "width": 80 }
|
||||
],
|
||||
"table": 123.12
|
||||
}
|
||||
""");
|
||||
var localizer = Context.Services.GetRequiredService<IStringLocalizer<Foo>>();
|
||||
var items = Foo.GenerateFoo(localizer, 2);
|
||||
var cut = Context.RenderComponent<BootstrapBlazorRoot>(pb =>
|
||||
{
|
||||
pb.AddChildContent<Table<Foo>>(pb =>
|
||||
{
|
||||
pb.Add(a => a.RenderMode, TableRenderMode.Table);
|
||||
pb.Add(a => a.ClientTableName, "test_client_name");
|
||||
pb.Add(a => a.Id, "test_table_id");
|
||||
pb.Add(a => a.AllowResizing, true);
|
||||
pb.Add(a => a.Items, items);
|
||||
pb.Add(a => a.TableColumns, foo => builder =>
|
||||
{
|
||||
builder.OpenComponent<TableColumn<Foo, string>>(0);
|
||||
builder.AddAttribute(1, "Field", "Name");
|
||||
builder.AddAttribute(2, "FieldExpression", Utility.GenerateValueExpression(foo, "Name", typeof(string)));
|
||||
builder.CloseComponent();
|
||||
|
||||
builder.OpenComponent<TableColumn<Foo, string>>(0);
|
||||
builder.AddAttribute(1, "Field", "Address");
|
||||
builder.AddAttribute(2, "FieldExpression", Utility.GenerateValueExpression(foo, "Address", typeof(string)));
|
||||
builder.CloseComponent();
|
||||
});
|
||||
});
|
||||
});
|
||||
var table = cut.FindComponent<Table<Foo>>();
|
||||
Assert.Contains("<col style=\"width: 20px;\" />", table.Markup);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void ReloadColumnWidth_NoTableElement()
|
||||
{
|
||||
Context.JSInterop.Setup<string>("reloadColumnWidth", "test_table_id", "test_client_name").SetResult("""
|
||||
{
|
||||
"cols": [
|
||||
{ "name": "Name", "width": 20 },
|
||||
{ "name": "Address", "width": 80 }
|
||||
]
|
||||
}
|
||||
""");
|
||||
var localizer = Context.Services.GetRequiredService<IStringLocalizer<Foo>>();
|
||||
var items = Foo.GenerateFoo(localizer, 2);
|
||||
var cut = Context.RenderComponent<BootstrapBlazorRoot>(pb =>
|
||||
{
|
||||
pb.AddChildContent<Table<Foo>>(pb =>
|
||||
{
|
||||
pb.Add(a => a.RenderMode, TableRenderMode.Table);
|
||||
pb.Add(a => a.ClientTableName, "test_client_name");
|
||||
pb.Add(a => a.Id, "test_table_id");
|
||||
pb.Add(a => a.AllowResizing, true);
|
||||
pb.Add(a => a.Items, items);
|
||||
pb.Add(a => a.TableColumns, foo => builder =>
|
||||
{
|
||||
builder.OpenComponent<TableColumn<Foo, string>>(0);
|
||||
builder.AddAttribute(1, "Field", "Name");
|
||||
builder.AddAttribute(2, "FieldExpression", Utility.GenerateValueExpression(foo, "Name", typeof(string)));
|
||||
builder.CloseComponent();
|
||||
|
||||
builder.OpenComponent<TableColumn<Foo, string>>(0);
|
||||
builder.AddAttribute(1, "Field", "Address");
|
||||
builder.AddAttribute(2, "FieldExpression", Utility.GenerateValueExpression(foo, "Address", typeof(string)));
|
||||
builder.CloseComponent();
|
||||
});
|
||||
});
|
||||
});
|
||||
var table = cut.FindComponent<Table<Foo>>();
|
||||
Assert.Contains("<col style=\"width: 20px;\" />", table.Markup);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void ReloadColumnWidth_Columns_Invalid()
|
||||
{
|
||||
Context.JSInterop.Setup<string>("reloadColumnWidth", "test_table_id", "test_client_name").SetResult("""
|
||||
{
|
||||
"cols": {
|
||||
"name": "Name",
|
||||
"name": "Address"
|
||||
}
|
||||
}
|
||||
""");
|
||||
var localizer = Context.Services.GetRequiredService<IStringLocalizer<Foo>>();
|
||||
var items = Foo.GenerateFoo(localizer, 2);
|
||||
var cut = Context.RenderComponent<BootstrapBlazorRoot>(pb =>
|
||||
{
|
||||
pb.AddChildContent<Table<Foo>>(pb =>
|
||||
{
|
||||
pb.Add(a => a.RenderMode, TableRenderMode.Table);
|
||||
pb.Add(a => a.ClientTableName, "test_client_name");
|
||||
pb.Add(a => a.Id, "test_table_id");
|
||||
pb.Add(a => a.AllowResizing, true);
|
||||
pb.Add(a => a.Items, items);
|
||||
pb.Add(a => a.TableColumns, foo => builder =>
|
||||
{
|
||||
builder.OpenComponent<TableColumn<Foo, string>>(0);
|
||||
builder.AddAttribute(1, "Field", "Name");
|
||||
builder.AddAttribute(2, "FieldExpression", Utility.GenerateValueExpression(foo, "Name", typeof(string)));
|
||||
builder.CloseComponent();
|
||||
|
||||
builder.OpenComponent<TableColumn<Foo, string>>(0);
|
||||
builder.AddAttribute(1, "Field", "Address");
|
||||
builder.AddAttribute(2, "FieldExpression", Utility.GenerateValueExpression(foo, "Address", typeof(string)));
|
||||
builder.CloseComponent();
|
||||
});
|
||||
});
|
||||
});
|
||||
var table = cut.FindComponent<Table<Foo>>();
|
||||
Assert.DoesNotContain("<col style=\"width: 20px;\" />", table.Markup);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task Refresh_Ok()
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user