Updated unit tests

This commit is contained in:
emmagarland
2021-03-06 18:57:54 +00:00
parent df25e6ea53
commit fa684222e8
3 changed files with 131 additions and 22 deletions

View File

@@ -21,6 +21,7 @@ namespace Umbraco.Cms.Core.Security
/// </summary>
public class MemberUserStore : UserStoreBase<MemberIdentityUser, IdentityRole, string, IdentityUserClaim<string>, IdentityUserRole<string>, IdentityUserLogin<string>, IdentityUserToken<string>, IdentityRoleClaim<string>>
{
private const string genericIdentityErrorCode = "IdentityErrorUserStore";
private readonly IMemberService _memberService;
private readonly UmbracoMapper _mapper;
private readonly IScopeProvider _scopeProvider;
@@ -49,10 +50,10 @@ namespace Umbraco.Cms.Core.Security
public override IQueryable<MemberIdentityUser> Users => throw new NotImplementedException();
/// <inheritdoc />
public override Task<string> GetNormalizedUserNameAsync(MemberIdentityUser user, CancellationToken cancellationToken) => GetUserNameAsync(user, cancellationToken);
public override Task<string> GetNormalizedUserNameAsync(MemberIdentityUser user, CancellationToken cancellationToken = default) => GetUserNameAsync(user, cancellationToken);
/// <inheritdoc />
public override Task SetNormalizedUserNameAsync(MemberIdentityUser user, string normalizedName, CancellationToken cancellationToken) => SetUserNameAsync(user, normalizedName, cancellationToken);
public override Task SetNormalizedUserNameAsync(MemberIdentityUser user, string normalizedName, CancellationToken cancellationToken = default) => SetUserNameAsync(user, normalizedName, cancellationToken);
/// <inheritdoc />
public override Task<IdentityResult> CreateAsync(MemberIdentityUser user, CancellationToken cancellationToken = default)
@@ -104,7 +105,7 @@ namespace Umbraco.Cms.Core.Security
}
catch (Exception ex)
{
return Task.FromResult(IdentityResult.Failed(new IdentityError { Code = ex.Message, Description = ex.Message }));
return Task.FromResult(IdentityResult.Failed(new IdentityError { Code = genericIdentityErrorCode, Description = ex.Message }));
}
}
@@ -160,7 +161,7 @@ namespace Umbraco.Cms.Core.Security
}
catch (Exception ex)
{
return Task.FromResult(IdentityResult.Failed(new IdentityError { Code = ex.Message, Description = ex.Message }));
return Task.FromResult(IdentityResult.Failed(new IdentityError { Code = genericIdentityErrorCode, Description = ex.Message }));
}
}
@@ -189,7 +190,7 @@ namespace Umbraco.Cms.Core.Security
}
catch (Exception ex)
{
return Task.FromResult(IdentityResult.Failed(new IdentityError { Code = ex.Message, Description = ex.Message }));
return Task.FromResult(IdentityResult.Failed(new IdentityError { Code = genericIdentityErrorCode, Description = ex.Message }));
}
}

View File

@@ -1,5 +1,6 @@
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
@@ -31,19 +32,127 @@ namespace Umbraco.Cms.Tests.UnitTests.Umbraco.Infrastructure.Security
}
[Test]
public void GivenICreateUser_AndTheUserIsNull_ThenIShouldGetAFailedResultAsync()
public void GivenIGetNormalizedUserName_AndTheUserIsNull_ThenIShouldGetAnException()
{
// arrange
MemberUserStore sut = CreateSut();
CancellationToken fakeCancellationToken = new CancellationToken() { };
// act
Action actual = () => sut.CreateAsync(null, fakeCancellationToken);
Action actual = () => sut.GetNormalizedUserNameAsync(null, fakeCancellationToken);
// assert
Assert.That(actual, Throws.ArgumentNullException);
}
[Test]
public async Task GivenIGetNormalizedUserName_AndTheEverythingIsPopulatedCorrectly_ThenIShouldGetACorrectUsername()
{
// arrange
MemberUserStore sut = CreateSut();
var fakeUser = new MemberIdentityUser()
{
UserName = "fakeuser"
};
// act
string actual = await sut.GetNormalizedUserNameAsync(fakeUser);
// assert
Assert.AreEqual(actual, fakeUser.UserName);
}
[Test]
public void GivenISetNormalizedUserName_AndTheUserIsNull_ThenIShouldGetAnException()
{
// arrange
MemberUserStore sut = CreateSut();
CancellationToken fakeCancellationToken = new CancellationToken() { };
// act
Action actual = () => sut.SetNormalizedUserNameAsync(null, "username", fakeCancellationToken);
// assert
Assert.That(actual, Throws.ArgumentNullException);
}
[Test]
public void GivenISetNormalizedUserName_AndTheUserNameIsNull_ThenIShouldGetANull()
{
// arrange
MemberUserStore sut = CreateSut();
CancellationToken fakeCancellationToken = new CancellationToken() { };
var fakeUser = new MemberIdentityUser() { };
// act
Task actual = sut.SetNormalizedUserNameAsync(fakeUser, null, fakeCancellationToken);
// assert
Assert.AreEqual(null, actual);
}
[Test]
public void GivenISetNormalizedUserName_AndEverythingIsPopulated_ThenIShouldGetASuccessResult()
{
// arrange
MemberUserStore sut = CreateSut();
CancellationToken fakeCancellationToken = new CancellationToken() { };
var fakeUser = new MemberIdentityUser()
{
UserName = "MyName"
};
// act
Task actual = sut.SetNormalizedUserNameAsync(fakeUser, "NewName", fakeCancellationToken);
// assert
Assert.IsTrue(actual.IsCompletedSuccessfully);
}
[Test]
public async Task GivenICreateUser_AndTheUserIsNull_ThenIShouldGetAFailedResultAsync()
{
// arrange
MemberUserStore sut = CreateSut();
// act
IdentityResult actual = await sut.CreateAsync(null);
// assert
Assert.IsFalse(actual.Succeeded);
Assert.IsTrue(actual.Errors.Any(x => x.Code == "IdentityErrorUserStore" && x.Description == "Value cannot be null. (Parameter 'user')"));
_mockMemberService.VerifyNoOtherCalls();
}
[Test]
public async Task GivenICreateUser_AndTheUserDoesNotHaveIdentity_ThenIShouldGetAFailedResultAsync()
{
// arrange
MemberUserStore sut = CreateSut();
var fakeUser = new MemberIdentityUser() { };
var fakeCancellationToken = new CancellationToken() { };
IMemberType fakeMemberType = new MemberType(new MockShortStringHelper(), 77);
IMember mockMember = Mock.Of<IMember>(m =>
m.Name == "fakeName" &&
m.Email == "fakeemail@umbraco.com" &&
m.Username == "fakeUsername" &&
m.RawPasswordValue == "fakePassword" &&
m.ContentTypeAlias == fakeMemberType.Alias &&
m.HasIdentity == false);
_mockMemberService.Setup(x => x.CreateMember(It.IsAny<string>(), It.IsAny<string>(), It.IsAny<string>(), It.IsAny<string>())).Returns(mockMember);
_mockMemberService.Setup(x => x.Save(mockMember, It.IsAny<bool>()));
// act
IdentityResult actual = await sut.CreateAsync(null);
// assert
Assert.IsFalse(actual.Succeeded);
Assert.IsTrue(actual.Errors.Any(x => x.Code == "IdentityErrorUserStore" && x.Description == "Value cannot be null. (Parameter 'user')"));
_mockMemberService.VerifyNoOtherCalls();
}
[Test]
public async Task GivenICreateANewUser_AndTheUserIsPopulatedCorrectly_ThenIShouldGetASuccessResultAsync()
@@ -85,10 +194,11 @@ namespace Umbraco.Cms.Tests.UnitTests.Umbraco.Infrastructure.Security
MemberUserStore sut = CreateSut();
// act
Action actual = () => sut.DeleteAsync(null);
IdentityResult actual = await sut.DeleteAsync(null);
// assert
Assert.That(actual, Throws.ArgumentNullException);
Assert.IsTrue(actual.Succeeded == false);
Assert.IsTrue(actual.Errors.Any(x => x.Code == "IdentityErrorUserStore" && x.Description == "Value cannot be null. (Parameter 'user')"));
_mockMemberService.VerifyNoOtherCalls();
}

View File

@@ -26,17 +26,18 @@ namespace Umbraco.Cms.Tests.UnitTests.Umbraco.Infrastructure.Security
}
[Test]
public void GivenICreateAMemberRole_AndTheGroupIsNull_ThenIShouldGetAnArgumentException()
public void GivenICreateAMemberRole_AndTheGroupIsNull_ThenIShouldGetAFailedIdentityResult()
{
// arrange
MemberRoleStore<IdentityRole> sut = CreateSut();
CancellationToken fakeCancellationToken = new CancellationToken() { };
// act
Action actual = () => sut.CreateAsync(null, fakeCancellationToken);
Task<IdentityResult> actual = sut.CreateAsync(null, fakeCancellationToken);
// assert
Assert.That(actual, Throws.ArgumentNullException);
Assert.IsTrue(actual.Result.Succeeded == false);
Assert.IsTrue(actual.Result.Errors.Any(x => x.Code == "IdentityMemberGroupNotFound" && x.Description == "Member group not found"));
}
@@ -139,15 +140,12 @@ namespace Umbraco.Cms.Tests.UnitTests.Umbraco.Infrastructure.Security
};
var fakeCancellationToken = new CancellationToken() { };
bool raiseEvents = false;
// act
IdentityResult identityResult = await sut.UpdateAsync(fakeRole, fakeCancellationToken);
// assert
Assert.IsTrue(identityResult.Succeeded == false);
Assert.IsTrue(identityResult.Errors.Any(x => x.Code == "InvalidRoleName" && x.Description == "Role name 'testname' is invalid."));
Assert.IsTrue(identityResult.Errors.Any(x => x.Code == "IdentityMemberGroupNotFound" && x.Description == "Member group not found"));
_mockMemberGroupService.Verify(x => x.GetById(777));
}
@@ -168,7 +166,7 @@ namespace Umbraco.Cms.Tests.UnitTests.Umbraco.Infrastructure.Security
// assert
Assert.IsTrue(identityResult.Succeeded == false);
Assert.IsTrue(identityResult.Errors.Any(x => x.Code == "DefaultError" && x.Description == "An unknown failure has occurred."));
Assert.IsTrue(identityResult.Errors.Any(x => x.Code == "IdentityIdParseError" && x.Description == "Cannot parse ID to int"));
_mockMemberGroupService.VerifyNoOtherCalls();
}
@@ -221,7 +219,7 @@ namespace Umbraco.Cms.Tests.UnitTests.Umbraco.Infrastructure.Security
// assert
Assert.IsTrue(identityResult.Succeeded == false);
Assert.IsTrue(identityResult.Errors.Any(x => x.Code == "DefaultError" && x.Description == "An unknown failure has occurred."));
Assert.IsTrue(identityResult.Errors.Any(x => x.Code == "IdentityIdParseError" && x.Description == "Cannot parse ID to int"));
_mockMemberGroupService.VerifyNoOtherCalls();
}
@@ -247,7 +245,7 @@ namespace Umbraco.Cms.Tests.UnitTests.Umbraco.Infrastructure.Security
// assert
Assert.IsTrue(identityResult.Succeeded == false);
Assert.IsTrue(identityResult.Errors.Any(x => x.Code == "InvalidRoleName" && x.Description == "Role name 'testname' is invalid."));
Assert.IsTrue(identityResult.Errors.Any(x => x.Code == "IdentityMemberGroupNotFound" && x.Description == "Member group not found"));
_mockMemberGroupService.Verify(x => x.GetById(777));
_mockMemberGroupService.VerifyNoOtherCalls();
}
@@ -283,7 +281,7 @@ namespace Umbraco.Cms.Tests.UnitTests.Umbraco.Infrastructure.Security
}
[Test]
public void GivenIFindAMemberRoleByRoleId_AndIdCannotBeParsedToAnInt_ThenIShouldGetAFailureResultAsync()
public async Task GivenIFindAMemberRoleByRoleId_AndIdCannotBeParsedToAnInt_ThenIShouldGetAFailureResultAsync()
{
// arrange
MemberRoleStore<IdentityRole> sut = CreateSut();
@@ -295,10 +293,10 @@ namespace Umbraco.Cms.Tests.UnitTests.Umbraco.Infrastructure.Security
var fakeCancellationToken = new CancellationToken() { };
// act
Task<IdentityRole> actual = sut.FindByIdAsync(fakeRole.Id, fakeCancellationToken);
Action actual = () => sut.FindByIdAsync(fakeRole.Id, fakeCancellationToken);
// assert
Assert.IsNull(actual);
Assert.That(actual, Throws.TypeOf<ArgumentOutOfRangeException>());
_mockMemberGroupService.VerifyNoOtherCalls();
}