Skip to content

Commit

Permalink
fix(ValidateBase): should Render UI after validate (#4255)
Browse files Browse the repository at this point in the history
* fix: 调用刷新同步组件状态

* test: 更新单元测试
  • Loading branch information
ArgoZhang authored Sep 10, 2024
1 parent 0de6cc8 commit 4dc4e05
Show file tree
Hide file tree
Showing 2 changed files with 9 additions and 19 deletions.
14 changes: 2 additions & 12 deletions src/BootstrapBlazor/Components/Validate/ValidateBase.cs
Original file line number Diff line number Diff line change
Expand Up @@ -356,11 +356,6 @@ public virtual bool IsComplexValue(object? value) => value != null
&& !value.GetType().IsAssignableTo(typeof(System.Collections.IEnumerable))
&& value.GetType().IsClass;

/// <summary>
/// 获得/设置 是否执行了自定义异步验证
/// </summary>
protected bool IsAsyncValidate { get; set; }

/// <summary>
/// 属性验证方法
/// </summary>
Expand All @@ -383,7 +378,6 @@ public async Task ValidatePropertyAsync(object? propertyValue, ValidationContext
if (validator is IValidatorAsync v)
{
await v.ValidateAsync(propertyValue, context, results);
IsAsyncValidate = true;
}
else
{
Expand All @@ -404,7 +398,6 @@ public async Task ValidatePropertyAsync(object? propertyValue, ValidationContext
if (validator is IValidatorAsync v)
{
await v.ValidateAsync(propertyValue, context, results);
IsAsyncValidate = true;
}
else
{
Expand Down Expand Up @@ -460,11 +453,8 @@ public virtual void ToggleMessage(IEnumerable<ValidationResult> results)
OnValidate(IsValid);
}

if (IsAsyncValidate)
{
IsAsyncValidate = false;
StateHasChanged();
}
// 必须刷新一次 UI 保证状态正确
StateHasChanged();
}

private JSModule? ValidateModule { get; set; }
Expand Down
14 changes: 7 additions & 7 deletions test/UnitTest/Components/ValidateFormTest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -162,7 +162,7 @@ public void ShowLabel_Ok()
}

[Fact]
public void SetError_Ok()
public async Task SetError_Ok()
{
var foo = new Foo();
var dummy = new Dummy();
Expand All @@ -180,9 +180,9 @@ public void SetError_Ok()
pb.Add(a => a.ValueExpression, Utility.GenerateValueExpression(dummy, "Value", typeof(DateTime?)));
});
});
cut.Instance.SetError("Name", "Test_SetError");
cut.Instance.SetError("Test.Name", "Test_SetError");
cut.Instance.SetError<Foo>(f => f.Name, "Name_SetError");
await cut.InvokeAsync(() => cut.Instance.SetError("Name", "Test_SetError"));
await cut.InvokeAsync(() => cut.Instance.SetError("Test.Name", "Test_SetError"));
await cut.InvokeAsync(() => cut.Instance.SetError<Foo>(f => f.Name, "Name_SetError"));

// 利用反射提高代码覆盖率
var method = typeof(ValidateForm).GetMethod("TryGetValidator", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance);
Expand All @@ -193,7 +193,7 @@ public void SetError_Ok()
}

[Fact]
public void SetError_UnaryExpression()
public async Task SetError_UnaryExpression()
{
var foo = new Foo();
var dummy = new Dummy();
Expand All @@ -211,13 +211,13 @@ public void SetError_UnaryExpression()
pb.Add(a => a.ValueExpression, Utility.GenerateValueExpression(dummy, "Value", typeof(DateTime?)));
});
});
cut.Instance.SetError<Dummy>(f => f.Value, "Name_SetError");
await cut.InvokeAsync(() => cut.Instance.SetError<Dummy>(f => f.Value, "Name_SetError"));

// 利用反射提高代码覆盖率
var fieldInfo = cut.Instance.GetType().GetField("_validatorCache", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance)!;
var cache = (ConcurrentDictionary<(string FieldName, Type ModelType), (FieldIdentifier FieldIdentifier, IValidateComponent ValidateComponent)>)fieldInfo.GetValue(cut.Instance)!;
cache.Remove(("Value", typeof(Dummy)), out _);
cut.Instance.SetError<Dummy>(f => f.Value, "Name_SetError");
await cut.InvokeAsync(() => cut.Instance.SetError<Dummy>(f => f.Value, "Name_SetError"));
}

[Fact]
Expand Down

0 comments on commit 4dc4e05

Please sign in to comment.