public void Index_returns_ApproveMember_ModelsBuilder_model()
        {
            using (var controller = new ApproveMemberController(Mock.Of <IGlobalSettings>(),
                                                                Mock.Of <IUmbracoContextAccessor>(),
                                                                ServiceContext,
                                                                AppCaches.NoCache,
                                                                Mock.Of <IProfilingLogger>(),
                                                                UmbracoHelper,
                                                                _tokenReader.Object))
            {
                controller.ControllerContext = new ControllerContext(base.HttpContext.Object, new RouteData(), controller);
                var result = controller.Index(new ContentModel(_currentPage.Object));

                Assert.IsType <ApproveMember>(((ViewResult)result).Model);
            }
        }
        public void Member_is_looked_up_based_on_the_id_in_the_token_in_the_querystring()
        {
            using (var controller = new ApproveMemberController(Mock.Of <IGlobalSettings>(),
                                                                Mock.Of <IUmbracoContextAccessor>(),
                                                                ServiceContext,
                                                                AppCaches.NoCache,
                                                                Mock.Of <IProfilingLogger>(),
                                                                UmbracoHelper,
                                                                _tokenReader.Object))
            {
                controller.ControllerContext = new ControllerContext(base.HttpContext.Object, new RouteData(), controller);
                var result = controller.Index(new ContentModel(_currentPage.Object));

                _tokenReader.Verify(x => x.ExtractId(_token), Times.Once);
                MemberService.Verify(x => x.GetById(MEMBER.Object.Id), Times.Once);
            }
        }
        public void Index_sets_name_and_description_from_content()
        {
            using (var controller = new ApproveMemberController(Mock.Of <IGlobalSettings>(),
                                                                Mock.Of <IUmbracoContextAccessor>(),
                                                                ServiceContext,
                                                                AppCaches.NoCache,
                                                                Mock.Of <IProfilingLogger>(),
                                                                UmbracoHelper,
                                                                _tokenReader.Object))
            {
                controller.ControllerContext = new ControllerContext(base.HttpContext.Object, new RouteData(), controller);
                var result = controller.Index(new ContentModel(_currentPage.Object));

                var meta = ((IHasViewMetadata)((ViewResult)result).Model).Metadata;
                Assert.Equal(CURRENT_PAGE_NAME, meta.PageTitle);
                Assert.Equal(CURRENT_PAGE_DESCRIPTION, meta.Description);
            }
        }
        public void Invalid_token_format_returns_invalid_and_does_not_save()
        {
            using (var controller = new ApproveMemberController(Mock.Of <IGlobalSettings>(),
                                                                Mock.Of <IUmbracoContextAccessor>(),
                                                                ServiceContext,
                                                                AppCaches.NoCache,
                                                                Mock.Of <IProfilingLogger>(),
                                                                UmbracoHelper,
                                                                _tokenReader.Object))
            {
                _tokenReader.Setup(x => x.ExtractId(_token)).Throws <FormatException>();
                controller.ControllerContext = new ControllerContext(base.HttpContext.Object, new RouteData(), controller);
                var result = controller.Index(new ContentModel(_currentPage.Object));

                Assert.False(((ApproveMember)((ViewResult)result).Model).ApprovalTokenValid);
                MemberService.Verify(x => x.Save(MEMBER.Object, true), Times.Never);
            }
        }
        public void Valid_token_updates_member_approval_status_and_saves()
        {
            using (var controller = new ApproveMemberController(Mock.Of <IGlobalSettings>(),
                                                                Mock.Of <IUmbracoContextAccessor>(),
                                                                ServiceContext,
                                                                AppCaches.NoCache,
                                                                Mock.Of <IProfilingLogger>(),
                                                                UmbracoHelper,
                                                                _tokenReader.Object))
            {
                controller.ControllerContext = new ControllerContext(base.HttpContext.Object, new RouteData(), controller);

                MEMBER.Setup(x => x.GetValue("approvalToken", null, null, false)).Returns(_token);
                _tokenReader.Setup(x => x.HasExpired(It.IsAny <DateTime>())).Returns(false);
                var result = controller.Index(new ContentModel(_currentPage.Object));

                MEMBER.VerifySet(x => x.IsApproved = true, Times.Once);
                MemberService.Verify(x => x.Save(MEMBER.Object, true), Times.Once);
            }
        }
        public void Mismatched_token_returns_invalid_and_does_not_save()
        {
            using (var controller = new ApproveMemberController(Mock.Of <IGlobalSettings>(),
                                                                Mock.Of <IUmbracoContextAccessor>(),
                                                                ServiceContext,
                                                                AppCaches.NoCache,
                                                                Mock.Of <IProfilingLogger>(),
                                                                UmbracoHelper,
                                                                _tokenReader.Object))
            {
                controller.ControllerContext = new ControllerContext(base.HttpContext.Object, new RouteData(), controller);

                MEMBER.Setup(x => x.GetValue("approvalToken", null, null, false)).Returns(_token.Reverse());
                _tokenReader.Setup(x => x.HasExpired(It.IsAny <DateTime>())).Returns(false);
                var result = controller.Index(new ContentModel(_currentPage.Object));

                Assert.False(((ApproveMember)((ViewResult)result).Model).ApprovalTokenValid);
                MemberService.Verify(x => x.Save(MEMBER.Object, true), Times.Never);
            }
        }
        public void Valid_token_returns_valid_with_member_name()
        {
            using (var controller = new ApproveMemberController(Mock.Of <IGlobalSettings>(),
                                                                Mock.Of <IUmbracoContextAccessor>(),
                                                                ServiceContext,
                                                                AppCaches.NoCache,
                                                                Mock.Of <IProfilingLogger>(),
                                                                UmbracoHelper,
                                                                _tokenReader.Object))
            {
                controller.ControllerContext = new ControllerContext(base.HttpContext.Object, new RouteData(), controller);

                MEMBER.Setup(x => x.GetValue("approvalToken", null, null, false)).Returns(_token);
                _tokenReader.Setup(x => x.HasExpired(It.IsAny <DateTime>())).Returns(false);
                var result = controller.Index(new ContentModel(_currentPage.Object));

                var model = (ApproveMember)((ViewResult)result).Model;
                Assert.True(model.ApprovalTokenValid);
                Assert.Equal(MEMBER.Object.Name, model.MemberName);
            }
        }
        public void Valid_token_logs()
        {
            var logger = new Mock <IProfilingLogger>();

            using (var controller = new ApproveMemberController(Mock.Of <IGlobalSettings>(),
                                                                Mock.Of <IUmbracoContextAccessor>(),
                                                                ServiceContext,
                                                                AppCaches.NoCache,
                                                                logger.Object,
                                                                UmbracoHelper,
                                                                _tokenReader.Object))
            {
                controller.ControllerContext = new ControllerContext(base.HttpContext.Object, new RouteData(), controller);

                MEMBER.Setup(x => x.GetValue("approvalToken", null, null, false)).Returns(_token);
                _tokenReader.Setup(x => x.HasExpired(It.IsAny <DateTime>())).Returns(false);
                var result = controller.Index(new ContentModel(_currentPage.Object));

                logger.Verify(x => x.Info(typeof(ApproveMemberController), LoggingTemplates.ApproveMember, MEMBER.Object.Username, MEMBER.Object.Key, typeof(ApproveMemberController), nameof(ApproveMemberController.Index)), Times.Once);
            }
        }