public async void Test_GivenAUserWithNo2FA_WhenPasswordSignIn_ThenReturnSigninResultSuccess() { var cognitoUser = GetCognitoUser(); var authFlowResponse = new AuthFlowResponse("sessionId", null, null, null, null); bool isPasswordChangeRequired = false; var signinResult = SignInResult.Success; userManagerMock.Setup(mock => mock.FindByIdAsync(It.IsAny <string>())).Returns(Task.FromResult(cognitoUser)).Verifiable(); userManagerMock.Setup(mock => mock.IsPasswordChangeRequiredAsync(It.IsAny <CognitoUser>())).Returns(Task.FromResult(isPasswordChangeRequired)).Verifiable(); userManagerMock.Setup(mock => mock.CheckPasswordAsync(It.IsAny <CognitoUser>(), It.IsAny <string>())) .Returns(Task.FromResult(authFlowResponse)) .Callback(() => cognitoUser.SessionTokens = new CognitoUserSession("idToken", "accessToken", "refreshToken", DateTime.Now, DateTime.Now.AddDays(1))).Verifiable(); userManagerMock.Setup(mock => mock.GetClaimsAsync(It.IsAny <CognitoUser>())).Returns(Task.FromResult(new List <Claim>() as IList <Claim>)).Verifiable(); userManagerMock.Setup(mock => mock.GetRolesAsync(It.IsAny <CognitoUser>())).Returns(Task.FromResult(new List <string>() as IList <string>)).Verifiable(); var context = MockUtils.MockContext(cognitoUser, IdentityConstants.TwoFactorUserIdScheme); contextAccessorMock.Setup(a => a.HttpContext).Returns(context).Verifiable(); var output = await signinManager.PasswordSignInAsync("userId", "password", true, false).ConfigureAwait(false); Assert.Equal(signinResult, output); userManagerMock.Verify(); contextAccessorMock.Verify(); }
public async void Test_GivenAUserSignedInWith2FAContext_WhenGetTwoFactorAuthenticationUser_ThenTheUserIsRetrieved() { var cognitoUser = GetCognitoUser(); var context = MockUtils.MockContext(cognitoUser, IdentityConstants.TwoFactorUserIdScheme); contextAccessorMock.Setup(a => a.HttpContext).Returns(context).Verifiable(); userManagerMock.Setup(mock => mock.FindByIdAsync(It.IsAny <string>())).Returns(Task.FromResult(cognitoUser)).Verifiable(); var output = await signinManager.GetTwoFactorAuthenticationUserAsync().ConfigureAwait(false); Assert.Equal(cognitoUser, output); contextAccessorMock.Verify(); userManagerMock.Verify(); }
public async void Test_GivenAUserWith2FA_WhenRespondToTwoFactorChallengeWithWrongCode_ThenReturnSigninResultFailed() { var cognitoUser = GetCognitoUser(); var context = MockUtils.MockContext(cognitoUser, IdentityConstants.TwoFactorUserIdScheme); contextAccessorMock.Setup(a => a.HttpContext).Returns(context).Verifiable(); AuthFlowResponse authFlowResponse = null; userManagerMock.Setup(mock => mock.FindByIdAsync(It.IsAny <string>())).Returns(Task.FromResult(cognitoUser)).Verifiable(); userManagerMock.Setup(mock => mock.RespondToTwoFactorChallengeAsync(It.IsAny <CognitoUser>(), It.IsAny <string>(), It.IsAny <ChallengeNameType>(), It.IsAny <string>())) .Returns(Task.FromResult(authFlowResponse)).Verifiable(); var output = await signinManager.RespondToTwoFactorChallengeAsync("2FACODE", true, false).ConfigureAwait(false); Assert.Equal(SignInResult.Failed, output); contextAccessorMock.Verify(); userManagerMock.Verify(); }
public async void Test_GivenAUserWith2FA_WhenPasswordSignIn_ThenReturnSigninResultTwoFactorRequired() { var cognitoUser = GetCognitoUser(); bool isPasswordChangeRequired = false; var signinResult = SignInResult.TwoFactorRequired; var authFlowResponse = new AuthFlowResponse("2FASESSIONID", null, ChallengeNameType.SMS_MFA, null, null); userManagerMock.Setup(mock => mock.FindByIdAsync(It.IsAny <string>())).Returns(Task.FromResult(cognitoUser)); userManagerMock.Setup(mock => mock.CheckPasswordAsync(It.IsAny <CognitoUser>(), It.IsAny <string>())).Returns(Task.FromResult(authFlowResponse)); userManagerMock.Setup(mock => mock.IsPasswordChangeRequiredAsync(It.IsAny <CognitoUser>())).Returns(Task.FromResult(isPasswordChangeRequired)); var context = MockUtils.MockContext(cognitoUser, IdentityConstants.TwoFactorUserIdScheme); contextAccessorMock.Setup(a => a.HttpContext).Returns(context).Verifiable(); var output = await signinManager.PasswordSignInAsync("userId", "password", true, false).ConfigureAwait(false); Assert.Equal(signinResult, output); contextAccessorMock.Verify(); }
public async void Test_GivenAUserWith2FA_WhenRespondToTwoFactorChallengeWithCorrectCode_ThenReturnSigninResultSuccess() { var cognitoUser = GetCognitoUser(); var context = MockUtils.MockContext(cognitoUser, IdentityConstants.TwoFactorUserIdScheme); contextAccessorMock.Setup(a => a.HttpContext).Returns(context).Verifiable(); var authFlowResponse = new AuthFlowResponse("sessionId", null, ChallengeNameType.SMS_MFA, null, null); userManagerMock.Setup(mock => mock.FindByIdAsync(It.IsAny <string>())).Returns(Task.FromResult(cognitoUser)).Verifiable(); userManagerMock.Setup(mock => mock.RespondToTwoFactorChallengeAsync(It.IsAny <CognitoUser>(), It.IsAny <string>(), It.IsAny <ChallengeNameType>(), It.IsAny <string>())) .Returns(Task.FromResult(authFlowResponse)) .Callback(() => cognitoUser.SessionTokens = new CognitoUserSession("idToken", "accessToken", "refreshToken", DateTime.Now, DateTime.Now.AddDays(1))).Verifiable(); userManagerMock.Setup(mock => mock.GetClaimsAsync(It.IsAny <CognitoUser>())).Returns(Task.FromResult(new List <Claim>() as IList <Claim>)).Verifiable(); userManagerMock.Setup(mock => mock.GetRolesAsync(It.IsAny <CognitoUser>())).Returns(Task.FromResult(new List <string>() as IList <string>)).Verifiable(); var output = await signinManager.RespondToTwoFactorChallengeAsync("2FACODE", true, false).ConfigureAwait(false); Assert.Equal(SignInResult.Success, output); contextAccessorMock.Verify(); userManagerMock.Verify(); }