public async Task InitiateAuthAppEnrollment_GivenExecutionFails_ExpectFailedResult()
        {
            var mediator = new Mock <IMediator>();

            mediator.Setup(x =>
                           x.Send(It.IsAny <InitiateAuthenticatorAppEnrollmentCommand>(), It.IsAny <CancellationToken>()))
            .ReturnsAsync(() =>
                          Result.Fail <InitiateAuthenticatorAppEnrollmentCommandResult, ErrorData>(
                              new ErrorData(ErrorCodes.AuthenticationFailed)));
            var securitySettings = new Mock <IOptions <SecuritySettings> >();
            var urlEncoder       = new Mock <UrlEncoder>();
            var currentAuthenticatedUserProvider = new Mock <ICurrentAuthenticatedUserProvider>();

            currentAuthenticatedUserProvider.Setup(x => x.CurrentAuthenticatedUser).Returns(
                Maybe.From(
                    new AuthenticatedUser(TestVariables.UserId, "email-address", "first-name", "last-name") as
                    ISystemUser));

            var controller = new AuthAppApiController(mediator.Object, securitySettings.Object, urlEncoder.Object,
                                                      currentAuthenticatedUserProvider.Object);

            var result   = Assert.IsType <JsonResult>(await controller.InitiateAuthAppEnrollment());
            var response = Assert.IsType <InitiateAuthAppEnrollmentResponse>(result.Value);

            Assert.False(response.IsSuccess);
        }
        public async Task InitiateAuthAppEnrollment_GivenExecutionSuccess_ExpectSuccessfulResult()
        {
            var mediator = new Mock <IMediator>();

            mediator.Setup(x => x.Send(It.IsAny <InitiateAuthenticatorAppEnrollmentCommand>(), CancellationToken.None))
            .ReturnsAsync(() =>
                          Result.Ok <InitiateAuthenticatorAppEnrollmentCommandResult, ErrorData>(
                              new InitiateAuthenticatorAppEnrollmentCommandResult("some-key")));
            var securitySettings = new Mock <IOptions <SecuritySettings> >();

            securitySettings.Setup(x => x.Value).Returns(new SecuritySettings
            {
                SiteName = "site-name",
            });
            var urlEncoder = new Mock <UrlEncoder>();
            var currentAuthenticatedUserProvider = new Mock <ICurrentAuthenticatedUserProvider>();

            currentAuthenticatedUserProvider.Setup(x => x.CurrentAuthenticatedUser).Returns(
                Maybe.From(
                    new AuthenticatedUser(TestVariables.UserId, "email-address", "first-name", "last-name") as
                    ISystemUser));

            var controller = new AuthAppApiController(mediator.Object, securitySettings.Object, urlEncoder.Object,
                                                      currentAuthenticatedUserProvider.Object);

            var result   = Assert.IsType <JsonResult>(await controller.InitiateAuthAppEnrollment());
            var response = Assert.IsType <InitiateAuthAppEnrollmentResponse>(result.Value);

            Assert.True(response.IsSuccess);
            Assert.Equal("some-key", response.SharedKey);
            Assert.Equal("otpauth://totp/:?secret=some-key&issuer=&digits=6", response.AuthenticatorUri);
            Assert.Equal("some -key", response.FormattedSharedKey);
        }
        public async Task EnrollAuthApp_GivenInvalidModelState_ExpectFailedResult()
        {
            var mediator         = new Mock <IMediator>();
            var securitySettings = new Mock <IOptions <SecuritySettings> >();
            var urlEncoder       = new Mock <UrlEncoder>();
            var currentAuthenticatedUserProvider = new Mock <ICurrentAuthenticatedUserProvider>();

            var controller = new AuthAppApiController(mediator.Object, securitySettings.Object, urlEncoder.Object,
                                                      currentAuthenticatedUserProvider.Object);

            controller.ModelState.AddModelError("key", "error-message");
            var result   = Assert.IsType <JsonResult>(await controller.EnrollAuthApp(null));
            var response = Assert.IsType <EnrollAuthAppResponse>(result.Value);

            Assert.False(response.IsSuccess);
        }
        public async Task InitiateAuthAppEnrollment_GivenNoUserIsAuthenticated_ExpectFailedResult()
        {
            var mediator         = new Mock <IMediator>();
            var securitySettings = new Mock <IOptions <SecuritySettings> >();
            var urlEncoder       = new Mock <UrlEncoder>();
            var currentAuthenticatedUserProvider = new Mock <ICurrentAuthenticatedUserProvider>();

            currentAuthenticatedUserProvider.Setup(x => x.CurrentAuthenticatedUser).Returns(Maybe <ISystemUser> .Nothing);

            var controller = new AuthAppApiController(mediator.Object, securitySettings.Object, urlEncoder.Object,
                                                      currentAuthenticatedUserProvider.Object);

            var result   = Assert.IsType <JsonResult>(await controller.InitiateAuthAppEnrollment());
            var response = Assert.IsType <InitiateAuthAppEnrollmentResponse>(result.Value);

            Assert.False(response.IsSuccess);
        }
        public async Task EnrollAuthApp_GivenExecutionSucceeds_ExpectSuccessfulResult()
        {
            var mediator = new Mock <IMediator>();

            mediator.Setup(x => x.Send(It.IsAny <EnrollAuthenticatorAppCommand>(), It.IsAny <CancellationToken>()))
            .ReturnsAsync(() => ResultWithError.Ok <ErrorData>());
            var securitySettings = new Mock <IOptions <SecuritySettings> >();
            var urlEncoder       = new Mock <UrlEncoder>();
            var currentAuthenticatedUserProvider = new Mock <ICurrentAuthenticatedUserProvider>();

            var controller = new AuthAppApiController(mediator.Object, securitySettings.Object, urlEncoder.Object,
                                                      currentAuthenticatedUserProvider.Object);

            var result   = Assert.IsType <JsonResult>(await controller.EnrollAuthApp(new EnrollAuthAppRequest()));
            var response = Assert.IsType <EnrollAuthAppResponse>(result.Value);

            Assert.True(response.IsSuccess);
        }