test(Table): add unit test improve code coverage (#2439)

* test: 增加 Table 持久化列宽单元测试

* test: 精简代码

* refactor: 精简代码

* refactor: 格式化代码

* test: 增加单元测试

* test: 精简代码

* test: 增加单元测试

* test: 更新单元测试
This commit is contained in:
Argo Zhang
2023-11-27 00:27:40 +08:00
committed by GitHub
parent db5fd9357e
commit 5ce80bc76e
5 changed files with 189 additions and 19 deletions

View File

@@ -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();
}

View File

@@ -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);

View File

@@ -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 =>

View File

@@ -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();

View File

@@ -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()
{