From aedf5d1087b2dbd6f5c7a54076e5f60abb68acfc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Wed, 20 Sep 2017 09:45:07 +0300 Subject: [PATCH] Added UpdateAsync test for IIdentityUserAppService. --- .../Abp/Identity/IIdentityUserAppService.cs | 2 +- .../Abp/Identity/IdentityUserCreateDto.cs | 11 +++ .../Identity/IdentityUserCreateOrUpdateDto.cs | 11 +-- .../Abp/Identity/IdentityUserUpdateDto.cs | 7 ++ .../Abp/Identity/IdentityUserAppService.cs | 6 +- .../Identity/IdentityUserAppService_Tests.cs | 75 ++++++++++++++++++- 6 files changed, 95 insertions(+), 17 deletions(-) create mode 100644 src/Volo.Abp.Identity.Application.Contracts/Volo/Abp/Identity/IdentityUserCreateDto.cs create mode 100644 src/Volo.Abp.Identity.Application.Contracts/Volo/Abp/Identity/IdentityUserUpdateDto.cs diff --git a/src/Volo.Abp.Identity.Application.Contracts/Volo/Abp/Identity/IIdentityUserAppService.cs b/src/Volo.Abp.Identity.Application.Contracts/Volo/Abp/Identity/IIdentityUserAppService.cs index cc751e1bb0..e8ca91f82e 100644 --- a/src/Volo.Abp.Identity.Application.Contracts/Volo/Abp/Identity/IIdentityUserAppService.cs +++ b/src/Volo.Abp.Identity.Application.Contracts/Volo/Abp/Identity/IIdentityUserAppService.cs @@ -4,7 +4,7 @@ using Volo.Abp.Application.Services; namespace Volo.Abp.Identity { - public interface IIdentityUserAppService : IAsyncCrudAppService + public interface IIdentityUserAppService : IAsyncCrudAppService { } diff --git a/src/Volo.Abp.Identity.Application.Contracts/Volo/Abp/Identity/IdentityUserCreateDto.cs b/src/Volo.Abp.Identity.Application.Contracts/Volo/Abp/Identity/IdentityUserCreateDto.cs new file mode 100644 index 0000000000..f5f2efbeed --- /dev/null +++ b/src/Volo.Abp.Identity.Application.Contracts/Volo/Abp/Identity/IdentityUserCreateDto.cs @@ -0,0 +1,11 @@ +using System.ComponentModel.DataAnnotations; + +namespace Volo.Abp.Identity +{ + public class IdentityUserCreateDto: IdentityUserCreateOrUpdateDtoBase + { + [Required] + [MaxLength(16)] //TODO: Create a shared dll of Identity and move consts to there for sharing! + public string Password { get; set; } + } +} \ No newline at end of file diff --git a/src/Volo.Abp.Identity.Application.Contracts/Volo/Abp/Identity/IdentityUserCreateOrUpdateDto.cs b/src/Volo.Abp.Identity.Application.Contracts/Volo/Abp/Identity/IdentityUserCreateOrUpdateDto.cs index 20b129e08b..864f4a91a5 100644 --- a/src/Volo.Abp.Identity.Application.Contracts/Volo/Abp/Identity/IdentityUserCreateOrUpdateDto.cs +++ b/src/Volo.Abp.Identity.Application.Contracts/Volo/Abp/Identity/IdentityUserCreateOrUpdateDto.cs @@ -1,9 +1,6 @@ -using System.ComponentModel.DataAnnotations; - -namespace Volo.Abp.Identity +namespace Volo.Abp.Identity { - //TODO: Use different Dtos for Create & Update even if they are derived from a base Dto. Thus, clients will be backward compatible in a future change. - public class IdentityUserCreateOrUpdateDto + public abstract class IdentityUserCreateOrUpdateDtoBase { public string UserName { get; set; } @@ -14,9 +11,5 @@ namespace Volo.Abp.Identity public bool TwoFactorEnabled { get; set; } //TODO: Optional? public bool LockoutEnabled { get; set; } //TODO: Optional? - - [Required] - [MaxLength(16)] //TODO: Create a shared dll of Identity and move consts to there for sharing! - public string Password { get; set; } } } \ No newline at end of file diff --git a/src/Volo.Abp.Identity.Application.Contracts/Volo/Abp/Identity/IdentityUserUpdateDto.cs b/src/Volo.Abp.Identity.Application.Contracts/Volo/Abp/Identity/IdentityUserUpdateDto.cs new file mode 100644 index 0000000000..cc551a7398 --- /dev/null +++ b/src/Volo.Abp.Identity.Application.Contracts/Volo/Abp/Identity/IdentityUserUpdateDto.cs @@ -0,0 +1,7 @@ +namespace Volo.Abp.Identity +{ + public class IdentityUserUpdateDto : IdentityUserCreateOrUpdateDtoBase + { + + } +} \ No newline at end of file diff --git a/src/Volo.Abp.Identity.Application/Volo/Abp/Identity/IdentityUserAppService.cs b/src/Volo.Abp.Identity.Application/Volo/Abp/Identity/IdentityUserAppService.cs index c30a69bf09..8c7ae97b38 100644 --- a/src/Volo.Abp.Identity.Application/Volo/Abp/Identity/IdentityUserAppService.cs +++ b/src/Volo.Abp.Identity.Application/Volo/Abp/Identity/IdentityUserAppService.cs @@ -36,7 +36,7 @@ namespace Volo.Abp.Identity return new PagedResultDto(userCount, userDtos); } - public async Task CreateAsync(IdentityUserCreateOrUpdateDto input) + public async Task CreateAsync(IdentityUserCreateDto input) { var user = new IdentityUser(GuidGenerator.Create(), input.UserName); @@ -48,7 +48,7 @@ namespace Volo.Abp.Identity return ObjectMapper.Map(user); } - public async Task UpdateAsync(Guid id, IdentityUserCreateOrUpdateDto input) + public async Task UpdateAsync(Guid id, IdentityUserUpdateDto input) { var user = await _userManager.GetByIdAsync(id); @@ -66,7 +66,7 @@ namespace Volo.Abp.Identity await _userManager.DeleteAsync(user); } - private async Task UpdateUserProperties(IdentityUserCreateOrUpdateDto input, IdentityUser user) + private async Task UpdateUserProperties(IdentityUserCreateOrUpdateDtoBase input, IdentityUser user) { await _userManager.SetEmailAsync(user, input.Email); await _userManager.SetPhoneNumberAsync(user, input.PhoneNumber); diff --git a/test/Volo.Abp.Identity.Application.Tests/Volo/Abp/Identity/IdentityUserAppService_Tests.cs b/test/Volo.Abp.Identity.Application.Tests/Volo/Abp/Identity/IdentityUserAppService_Tests.cs index 2e619067f0..78f7109344 100644 --- a/test/Volo.Abp.Identity.Application.Tests/Volo/Abp/Identity/IdentityUserAppService_Tests.cs +++ b/test/Volo.Abp.Identity.Application.Tests/Volo/Abp/Identity/IdentityUserAppService_Tests.cs @@ -1,8 +1,10 @@ using System; +using System.Linq; using System.Threading.Tasks; using Microsoft.Extensions.DependencyInjection; using Shouldly; using Volo.Abp.Application.Dtos; +using Volo.Abp.Domain.Repositories; using Xunit; namespace Volo.Abp.Identity @@ -10,10 +12,12 @@ namespace Volo.Abp.Identity public class IdentityUserAppService_Tests : AbpIdentityApplicationTestBase { private readonly IIdentityUserAppService _identityUserAppService; + private readonly IRepository _userRepository; public IdentityUserAppService_Tests() { _identityUserAppService = ServiceProvider.GetRequiredService(); + _userRepository = ServiceProvider.GetRequiredService>(); } [Fact] @@ -27,24 +31,87 @@ namespace Volo.Abp.Identity [Fact] public async Task CreateAsync() { - var input = new IdentityUserCreateOrUpdateDto + //Arrange + + var input = new IdentityUserCreateDto { UserName = Guid.NewGuid().ToString(), - Email = Guid.NewGuid().ToString("N").Left(16) + "@abp.io", + Email = CreateRandomEmail(), LockoutEnabled = true, - PhoneNumber = RandomHelper.GetRandom(10000000,100000000).ToString(), + PhoneNumber = CreateRandomPhoneNumber(), Password = "123qwe" }; + //Act + var result = await _identityUserAppService.CreateAsync(input); + //Assert + result.Id.ShouldNotBe(Guid.Empty); result.UserName.ShouldBe(input.UserName); result.Email.ShouldBe(input.Email); result.LockoutEnabled.ShouldBe(input.LockoutEnabled); result.PhoneNumber.ShouldBe(input.PhoneNumber); - //TODO: Also check repository + var user = await _userRepository.GetAsync(result.Id); + user.Id.ShouldBe(result.Id); + user.UserName.ShouldBe(input.UserName); + user.Email.ShouldBe(input.Email); + user.LockoutEnabled.ShouldBe(input.LockoutEnabled); + user.PhoneNumber.ShouldBe(input.PhoneNumber); + } + + [Fact] + public async Task UpdateAsync() + { + //Arrange + + var johnNash = await GetUserAsync("john.nash"); + + var input = new IdentityUserUpdateDto + { + UserName = johnNash.UserName, + LockoutEnabled = true, + TwoFactorEnabled = true, + PhoneNumber = CreateRandomPhoneNumber(), + Email = CreateRandomEmail() + }; + + + //Act + + var result = await _identityUserAppService.UpdateAsync(johnNash.Id, input); + + //Assert + + result.Id.ShouldBe(johnNash.Id); + result.UserName.ShouldBe(input.UserName); + result.Email.ShouldBe(input.Email); + result.LockoutEnabled.ShouldBe(input.LockoutEnabled); + result.PhoneNumber.ShouldBe(input.PhoneNumber); + + var user = await _userRepository.GetAsync(result.Id); + user.Id.ShouldBe(result.Id); + user.UserName.ShouldBe(input.UserName); + user.Email.ShouldBe(input.Email); + user.LockoutEnabled.ShouldBe(input.LockoutEnabled); + user.PhoneNumber.ShouldBe(input.PhoneNumber); + } + + private async Task GetUserAsync(string userName) + { + return (await _userRepository.GetListAsync()).First(u => u.UserName == userName); + } + + private static string CreateRandomEmail() + { + return Guid.NewGuid().ToString("N").Left(16) + "@abp.io"; + } + + private static string CreateRandomPhoneNumber() + { + return RandomHelper.GetRandom(10000000, 100000000).ToString(); } } }