1
0
Files
common/test/AMWD.Common.AspNetCore.Tests/Extensions/ModelStateDictionaryExtensionsTest.cs
2025-11-13 20:30:44 +01:00

94 lines
2.2 KiB
C#

using System;
using System.Linq;
using Microsoft.AspNetCore.Mvc.ModelBinding;
namespace AMWD.Common.AspNetCore.Tests.Extensions
{
[TestClass]
public class ModelStateDictionaryExtensionsTest
{
private TestModel _testModel;
[TestInitialize]
public void InitializeTests()
{
_testModel = new TestModel
{
ValueA = "A",
ValueB = "B",
SubModel = new TestSubModel
{
SubValueA = "a",
SubValueB = "b"
}
};
}
[TestMethod]
public void ShouldAddNormalModelError()
{
// arrange
var modelState = new ModelStateDictionary();
// act
modelState.AddModelError(_testModel, m => m.ValueA, "ShitHappens");
// assert
Assert.AreEqual(1, modelState.Count);
Assert.AreEqual("ValueA", modelState.Keys.First());
Assert.AreEqual("ShitHappens", modelState.Values.First().Errors.First().ErrorMessage);
}
[TestMethod]
public void ShouldAddExtendedModelError()
{
// arrange
var modelState = new ModelStateDictionary();
// act
modelState.AddModelError(_testModel, m => m.SubModel.SubValueB, "ShitHappens");
// assert
Assert.AreEqual(1, modelState.Count);
Assert.AreEqual("SubModel.SubValueB", modelState.Keys.First());
Assert.AreEqual("ShitHappens", modelState.Values.First().Errors.First().ErrorMessage);
}
[TestMethod]
public void ShouldThrowArgumentNull()
{
// arrange
ModelStateDictionary modelState = null;
// act & assert
Assert.ThrowsExactly<ArgumentNullException>(() => modelState.AddModelError(_testModel, m => m.SubModel.SubValueB, "ShitHappens"));
}
[TestMethod]
public void ShouldThrowInvalidOperation()
{
// arrange
var modelState = new ModelStateDictionary();
// act
Assert.ThrowsExactly<InvalidOperationException>(() => modelState.AddModelError(_testModel, m => m, "ShitHappens"));
}
internal class TestModel
{
public string ValueA { get; set; }
public string ValueB { get; set; }
public TestSubModel SubModel { get; set; }
}
internal class TestSubModel
{
public string SubValueA { get; set; }
public string SubValueB { get; set; }
}
}
}