Skip to content
This repository was archived by the owner on Mar 16, 2020. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
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
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ This project adds support to `Nancy.Validation.DataAnnotations` for the followin
- [CompareAttribute](http://msdn.microsoft.com/en-us/library/System.ComponentModel.DataAnnotations.CompareAttribute.aspx)
- [CreditCardAttribute](http://msdn.microsoft.com/en-us/library/System.ComponentModel.DataAnnotations.CreditCardAttribute.aspx)
- [EmailAddressAttribute](http://msdn.microsoft.com/en-us/library/System.ComponentModel.DataAnnotations.EmailAddressAttribute.aspx)
- [EnumDataTypeAttribute](http://msdn.microsoft.com/en-us/library/System.ComponentModel.DataAnnotations.EnumDataTypeAttribute.aspx)
- [FileExtensionsAttribute](http://msdn.microsoft.com/en-us/library/System.ComponentModel.DataAnnotations.FileExtensionsAttribute.aspx)
- [MaxLengthAttribute](http://msdn.microsoft.com/en-us/library/System.ComponentModel.DataAnnotations.MaxLengthAttribute.aspx)
- [MinLengthAttribute](http://msdn.microsoft.com/en-us/library/System.ComponentModel.DataAnnotations.MinLengthAttribute.aspx)
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
namespace Nancy.Validation.DataAnnotations.Extensions
{
using System.ComponentModel.DataAnnotations;

/// <summary>
/// An adapter for the <see cref="EnumDataTypeAttribute"/>.
/// </summary>
public class EnumDataTypeValidatorAdapter : BaseValidatorAdapter<EnumDataTypeAttribute>
{
/// <summary>
/// Initializes a new instance of the <see cref="EnumDataTypeValidatorAdapter"/> class.
/// </summary>
public EnumDataTypeValidatorAdapter()
: base("EnumDataType")
{
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,7 @@
<Compile Include="CompareValidatorAdapter.cs" />
<Compile Include="CreditCardValidatorAdapter.cs" />
<Compile Include="EmailAddressValidatorAdapter.cs" />
<Compile Include="EnumDataTypeValidatorAdapter.cs" />
<Compile Include="FileExtensionsValidatorAdapter.cs" />
<Compile Include="MaxLengthValidatorAdapter.cs" />
<Compile Include="MinLengthValidatorAdapter.cs" />
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,7 @@
<Compile Include="Tests\CompareValidatorAdapterFixture.cs" />
<Compile Include="Tests\CreditCardValidatorAdapterFixture.cs" />
<Compile Include="Tests\EmailAddressValidatorAdapterFixture.cs" />
<Compile Include="Tests\EnumDataTypeValidatorAdapterFixture.cs" />
<Compile Include="Tests\FileExtensionsValidatorAdapterFixture.cs" />
<Compile Include="Tests\MaxLengthValidatorAdapterFixture.cs" />
<Compile Include="Tests\MinLengthValidatorAdapterFixture.cs" />
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,111 @@
namespace Nancy.Validation.DataAnnotations.Extensions.Tests
{
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
using System.Linq;

using Shouldly;

using Xunit;

public class EnumDataTypeValidatorAdapterFixture : BaseTestFixture<EnumDataTypeValidatorAdapter>
{
[Fact]
public void Should_return_true_with_valid_value()
{
// Given
var validator = _factory.Create(typeof(TestModel));
var model = new TestModel
{
Status1 = Status.None,
Status2 = Status.Pending,
Status3 = Status.Approved
};

// When
var result = validator.Validate(model, new NancyContext());

// Then
result.IsValid.ShouldBe(true);
}

[Fact]
public void Should_read_enum_annotations()
{
// Given, When
var validator = _factory.Create(typeof(TestModel));

// Then
validator.Description.Rules.SelectMany(r => r.Value).ShouldContain(r => r.RuleType == "EnumDataType" && r.MemberNames.Contains("Status1"));
validator.Description.Rules.SelectMany(r => r.Value).ShouldContain(r => r.RuleType == "EnumDataType" && r.MemberNames.Contains("Status2"));
validator.Description.Rules.SelectMany(r => r.Value).ShouldContain(r => r.RuleType == "EnumDataType" && r.MemberNames.Contains("Status3"));
}

[Fact]
public void Should_return_false_and_contain_property_name()
{
// Given
var validator = _factory.Create(typeof(TestModel));
var model = new TestModel { Status1 = (Status)13 };

// When
var result = validator.Validate(model, new NancyContext());

// Then
result.IsValid.ShouldBe(false);
result.Errors["Status1"][0].ErrorMessage.ShouldBe("The field Status1 is invalid.");
}

[Fact]
public void Should_return_false_and_contain_display_name()
{
// Given
var validator = _factory.Create(typeof(TestModel));
var model = new TestModel { Status2 = (Status)13 };

// When
var result = validator.Validate(model, new NancyContext());

// Then
result.IsValid.ShouldBe(false);
result.Errors["Status2"][0].ErrorMessage.ShouldBe("The field Status 2 is invalid.");
}

[Fact]
public void Should_return_false_and_contain_displayname()
{
// Given
var validator = _factory.Create(typeof(TestModel));
var model = new TestModel { Status3 = (Status)13 };

// When
var result = validator.Validate(model, new NancyContext());

// Then
result.IsValid.ShouldBe(false);
result.Errors["Status3"][0].ErrorMessage.ShouldBe("The field Status 3 is invalid.");
}

private class TestModel
{
[EnumDataType(typeof(Status))]
public Status Status1 { get; set; }

[Display(Name = "Status 2")]
[EnumDataType(typeof(Status))]
public Status Status2 { get; set; }

[DisplayName("Status 3")]
[EnumDataType(typeof(Status))]
public Status Status3 { get; set; }
}

private enum Status
{
None = 0,
Pending = 1,
Approved = 2,
Denied = 3
}
}
}