Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
More Feedback addressing
  • Loading branch information
tarekgh committed Mar 1, 2023
commit c969b69788a3f8702a109dc428ff23a4ecfda531
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@
<ProjectReference Include="$(LibrariesProjectRoot)Microsoft.Extensions.Primitives\ref\Microsoft.Extensions.Primitives.csproj" />
</ItemGroup>

<ItemGroup Condition="'$(TargetFramework)' == 'netstandard2.0' Or '$(TargetFramework)' == 'netstandard2.1'">
<ItemGroup Condition="'$(TargetFrameworkIdentifier)' == '.NETStandard'">
<PackageReference Include="System.ComponentModel.Annotations" Version="$(SystemComponentModelAnnotationsVersion)" />
</ItemGroup>

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@
<ProjectReference Include="$(LibrariesProjectRoot)Microsoft.Extensions.Primitives\src\Microsoft.Extensions.Primitives.csproj" />
</ItemGroup>

<ItemGroup Condition="'$(TargetFramework)' == 'netstandard2.0' Or '$(TargetFramework)' == 'netstandard2.1'">
<ItemGroup Condition="'$(TargetFrameworkIdentifier)' == '.NETStandard'">
<PackageReference Include="System.ComponentModel.Annotations" Version="$(SystemComponentModelAnnotationsVersion)" />
</ItemGroup>

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,10 +26,10 @@ public class ValidateOptionsResultBuilder
public ValidateOptionsResultBuilder() { }

/// <summary>
/// Adds validation error.
/// Adds a new validation error to the builder.
/// </summary>
/// <param name="error">Content of error message.</param>
/// <param name="propertyName">THe property in the option object which contains an error.</param>
/// <param name="propertyName">The property in the option object which contains an error.</param>
public void AddError(string error, string? propertyName = null)
{
ThrowHelper.ThrowIfNull(error);
Expand All @@ -39,7 +39,7 @@ public void AddError(string error, string? propertyName = null)
/// <summary>
/// Adds any validation error carried by the <see cref="ValidationResult"/> instance to this instance.
/// </summary>
/// <param name="result">The instance to consume the errors from.</param>
/// <param name="result">The instance to append the error from.</param>
public void AddResult(ValidationResult? result)
{
if (result?.ErrorMessage is not null)
Expand All @@ -58,7 +58,7 @@ public void AddResults(IEnumerable<ValidationResult?>? results)
{
if (results != null)
{
foreach (var result in results)
foreach (ValidationResult? result in results)
{
AddResult(result);
}
Expand Down Expand Up @@ -115,13 +115,6 @@ public ValidateOptionsResult Build()

private int ErrorsCount => _errors is null ? 0 : _errors.Count;

private List<string> Errors
{
get
{
_errors ??= new();
return _errors;
}
}
private List<string> Errors => _errors ??= new();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ namespace Microsoft.Extensions.Options.Tests
public class OptionsValidationBuilderTests
{
[Fact]
public void ValidateBuilder()
public void ValidateEmptyBuilder()
{
ValidateOptionsResultBuilder builder = new();
Assert.True(EqualResults(ValidateOptionsResult.Success, builder.Build()));
Expand All @@ -31,8 +31,20 @@ public void ValidateBuilder()

builder.AddResult(ValidateOptionsResult.Skip);
Assert.True(EqualResults(ValidateOptionsResult.Success, builder.Build()));
}

[Fact]
public void ValidateBuilderThrows()
{
ValidateOptionsResultBuilder builder = new();
Assert.Throws<ArgumentNullException>(() => builder.AddError(null));
Assert.Throws<ArgumentNullException>(() => builder.AddResult((ValidateOptionsResult)null));
}

[Fact]
public void ValidateAddErrors()
{
ValidateOptionsResultBuilder builder = new();

string errors = "Failure 1";
builder.AddError(errors);
Expand All @@ -49,10 +61,16 @@ public void ValidateBuilder()
builder.AddError("Failure 3", "Prop1");
r = builder.Build();
Assert.True(EqualResults(ValidateOptionsResult.Fail(errors), r), $"{r.FailureMessage} != {ValidateOptionsResult.Fail(errors).FailureMessage}");
}

errors += "; Failure 4";
[Fact]
public void ValidateAddValidationResult()
{
ValidateOptionsResultBuilder builder = new();

string errors = "Failure 4";
builder.AddResult(new ValidationResult("Failure 4"));
r = builder.Build();
ValidateOptionsResult r = builder.Build();
Assert.True(EqualResults(ValidateOptionsResult.Fail(errors), r), $"{r.FailureMessage} != {ValidateOptionsResult.Fail(errors).FailureMessage}");

errors += "; member1, member2: Failure 5";
Expand All @@ -76,28 +94,94 @@ public void ValidateBuilder()

r = builder.Build();
Assert.True(EqualResults(ValidateOptionsResult.Fail(errors), r), $"{r.FailureMessage} != {ValidateOptionsResult.Fail(errors).FailureMessage}");
}

Assert.Throws<ArgumentNullException>(() => builder.AddResult((ValidateOptionsResult)null));
[Fact]
public void ValidateAddValidateOptionResult()
{
ValidateOptionsResultBuilder builder = new();

errors += "; Failure 8";
string errors = "Failure 8";
builder.AddResult(ValidateOptionsResult.Fail("Failure 8"));
r = builder.Build();
ValidateOptionsResult r = builder.Build();
Assert.True(EqualResults(ValidateOptionsResult.Fail(errors), r), $"{r.FailureMessage} != {ValidateOptionsResult.Fail(errors).FailureMessage}");

errors += "; Failure 9; Failure 10";
builder.AddResult(ValidateOptionsResult.Fail(new List<string>() { "Failure 9", null, null, "Failure 10" }));
r = builder.Build();
Assert.True(EqualResults(ValidateOptionsResult.Fail(errors), r), $"{r.FailureMessage} != {ValidateOptionsResult.Fail(errors).FailureMessage}");
}

[Fact]
public void ValidateClear()
{
ValidateOptionsResultBuilder builder = new();
string errors = "Failure 10";

builder.AddError(errors);
ValidateOptionsResult r = builder.Build();
Assert.True(EqualResults(ValidateOptionsResult.Fail(errors), r), $"{r.FailureMessage} != {ValidateOptionsResult.Fail(errors).FailureMessage}");

builder.Clear();
Assert.True(EqualResults(ValidateOptionsResult.Success, builder.Build()));

errors = "Failure 1";
errors = "Failure 11";
builder.AddError(errors);
r = builder.Build();
Assert.True(EqualResults(ValidateOptionsResult.Fail(errors), r), $"{r.FailureMessage} != {ValidateOptionsResult.Fail(errors).FailureMessage}");
}

[Fact]
public void ValidateAddingMixedErrors()
{
ValidateOptionsResultBuilder builder = new();
string errors = "Failure 12";
builder.AddError(errors);
ValidateOptionsResult r = builder.Build();
Assert.True(EqualResults(ValidateOptionsResult.Fail(errors), r), $"{r.FailureMessage} != {ValidateOptionsResult.Fail(errors).FailureMessage}");

errors += "; Property Prop: Failure 13";
builder.AddError("Failure 13", "Prop");
r = builder.Build();
Assert.True(EqualResults(ValidateOptionsResult.Fail(errors), r), $"{r.FailureMessage} != {ValidateOptionsResult.Fail(errors).FailureMessage}");

errors += "; Failure 14";
builder.AddResult(new ValidationResult("Failure 14"));
r = builder.Build();
Assert.True(EqualResults(ValidateOptionsResult.Fail(errors), r), $"{r.FailureMessage} != {ValidateOptionsResult.Fail(errors).FailureMessage}");

errors += "; member1, member2: Failure 15";
builder.AddResult(new ValidationResult("Failure 15", new List<string>() { "member1", "member2" }));
r = builder.Build();
Assert.True(EqualResults(ValidateOptionsResult.Fail(errors), r), $"{r.FailureMessage} != {ValidateOptionsResult.Fail(errors).FailureMessage}");

errors += "; Failure 16; Failure 17";
builder.AddResults(
new List<ValidationResult?>()
{
new ValidationResult("Failure 16"),
null,
new ValidationResult("Failure 17"),
null
});

r = builder.Build();
Assert.True(EqualResults(ValidateOptionsResult.Fail(errors), r), $"{r.FailureMessage} != {ValidateOptionsResult.Fail(errors).FailureMessage}");

errors += "; Failure 18";
builder.AddResult(ValidateOptionsResult.Fail("Failure 18"));
r = builder.Build();
Assert.True(EqualResults(ValidateOptionsResult.Fail(errors), r), $"{r.FailureMessage} != {ValidateOptionsResult.Fail(errors).FailureMessage}");

errors += "; Failure 19; Failure 20";
builder.AddResult(ValidateOptionsResult.Fail(new List<string>() { "Failure 19", null, null, "Failure 20" }));
r = builder.Build();
Assert.True(EqualResults(ValidateOptionsResult.Fail(errors), r), $"{r.FailureMessage} != {ValidateOptionsResult.Fail(errors).FailureMessage}");

builder.Clear();
Assert.True(EqualResults(ValidateOptionsResult.Success, builder.Build()));
}

private static bool EqualResults(ValidateOptionsResult r1, ValidateOptionsResult r2) =>
r1.Succeeded == r2.Succeeded &&
r1.Skipped == r2.Skipped &&
Expand Down