Skip to content

Commit

Permalink
Merge pull request #3134 from aspnetboilerplate/pr/2899
Browse files Browse the repository at this point in the history
resolves #2899 Added localize extension method for CustomValidationContext
  • Loading branch information
hikalkan committed Feb 28, 2018
2 parents 2d1a5a4 + 2bef751 commit bdd5237
Show file tree
Hide file tree
Showing 5 changed files with 85 additions and 0 deletions.
17 changes: 17 additions & 0 deletions src/Abp/Runtime/Validation/CustomValidationContextExtensions.cs
@@ -0,0 +1,17 @@
using Abp.Localization;

namespace Abp.Runtime.Validation
{
public static class CustomValidationContextExtensions
{
/// <param name="validationContext">Validation context</param>
/// <param name="sourceName">Localization source name</param>
/// <param name="key">Localization key</param>
public static string Localize(this CustomValidationContext validationContext, string sourceName, string key)
{
var localizationManager = validationContext.IocResolver.Resolve<ILocalizationManager>();
var source = localizationManager.GetSource(sourceName);
return source.GetString(key);
}
}
}
@@ -0,0 +1,46 @@
using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using Abp.Auditing;
using Abp.Localization;
using Abp.Runtime.Validation;
using Abp.Zero.SampleApp.Users;
using Abp.Zero.SampleApp.Users.Dto;
using Shouldly;
using Xunit;

namespace Abp.Zero.SampleApp.Tests.Application.Services
{
public class Validation_Tests : SampleAppTestBase
{
private readonly IUserAppService _userAppService;

public Validation_Tests()
{
_userAppService = Resolve<IUserAppService>();
}


[Theory]
[InlineData("en")]
[InlineData("en-US")]
[InlineData("en-GB")]
public void CustomValidationContext_Localize_Test(string cultureName)
{
Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo(cultureName);

var exception = Assert.Throws<AbpValidationException>(() =>
{
_userAppService.CustomValidateMethod(new CustomValidateMethodInput());
});

exception.ValidationErrors.ShouldNotBeNull();
exception.ValidationErrors.Count.ShouldBe(1);
exception.ValidationErrors[0].ErrorMessage.ShouldBe("User is not in role.");
}
}
}
14 changes: 14 additions & 0 deletions test/Abp.Zero.SampleApp/Users/Dto/CustomValidateMethodInput.cs
@@ -0,0 +1,14 @@
using System.ComponentModel.DataAnnotations;
using Abp.Runtime.Validation;

namespace Abp.Zero.SampleApp.Users.Dto
{
public class CustomValidateMethodInput : ICustomValidate
{
public void AddValidationErrors(CustomValidationContext context)
{
var message = context.Localize(AbpZeroConsts.LocalizationSourceName, "Identity.UserNotInRole");
context.Results.Add(new ValidationResult(message));
}
}
}
2 changes: 2 additions & 0 deletions test/Abp.Zero.SampleApp/Users/IUserAppService.cs
Expand Up @@ -13,5 +13,7 @@ public interface IUserAppService : IApplicationService
void DeleteUser(long userId);

Task ResetPassword(ResetPasswordInput input);

void CustomValidateMethod(CustomValidateMethodInput input);
}
}
6 changes: 6 additions & 0 deletions test/Abp.Zero.SampleApp/Users/UserAppService.cs
Expand Up @@ -77,5 +77,11 @@ public virtual async Task ResetPassword(ResetPasswordInput input)

await _userManager.UpdateAsync(user);
}

public void CustomValidateMethod(CustomValidateMethodInput input)
{
//Becasue of the validation error in AddValidationErrors method of CustomValidateMethodInput,
//this method will not be called.
}
}
}

0 comments on commit bdd5237

Please sign in to comment.