public void CurrentAuthenticatedUser_GivenUserHasUpnClaim_ExpectMaybeWithDataHaveAllPropertySet()
        {
            var userProfile = new AuthenticationService.UserProfile(Guid.NewGuid(), "email-address", "first-name",
                                                                    "last-name", false, new List <string>());
            var httpContextAccessor = new Mock <IHttpContextAccessor>();

            httpContextAccessor.Setup(x => x.HttpContext.User.Identity.IsAuthenticated).Returns(true);
            httpContextAccessor.Setup(x => x.HttpContext.User.HasClaim(It.IsAny <Predicate <Claim> >()))
            .Returns((Predicate <Claim> x) => x.Invoke(new Claim(ClaimTypes.Upn, string.Empty)));
            httpContextAccessor.Setup(x => x.HttpContext.User.Claims).Returns(new List <Claim>
            {
                new Claim(ClaimTypes.Upn, userProfile.UserId.ToString()),
                new Claim(ClaimTypes.UserData, JsonConvert.SerializeObject(userProfile)),
            });

            var currentAuthenticatedUserProvider = new CurrentAuthenticatedUserProvider(httpContextAccessor.Object);
            var maybe = currentAuthenticatedUserProvider.CurrentAuthenticatedUser;

            Assert.True(maybe.HasValue);
            var user = Assert.IsType <AuthenticatedUser>(maybe.Value);

            Assert.Equal(userProfile.UserId, maybe.Value.UserId);
            Assert.Equal(userProfile.FirstName, user.FirstName);
            Assert.Equal(userProfile.LastName, user.LastName);
            Assert.Equal(userProfile.EmailAddress, user.EmailAddress);
        }
        public void CurrentAuthenticatedUser_GivenUserNoClaims_ExpectMaybeWithNoData()
        {
            var httpContextAccessor = new Mock <IHttpContextAccessor>();

            httpContextAccessor.Setup(x => x.HttpContext.User.Identity.IsAuthenticated).Returns(true);

            var currentAuthenticatedUserProvider = new CurrentAuthenticatedUserProvider(httpContextAccessor.Object);
            var maybe = currentAuthenticatedUserProvider.CurrentAuthenticatedUser;

            Assert.True(maybe.HasNoValue);
        }
        public void CurrentAuthenticatedUser_GivenUserHasAnonymousClaim_ExpectMaybeWithDataHaveIdPropertySet()
        {
            var unauthenticatedUser = new UnauthenticatedUser(Guid.NewGuid(), MfaProvider.None);
            var httpContextAccessor = new Mock <IHttpContextAccessor>();

            httpContextAccessor.Setup(x => x.HttpContext.User.Identity.IsAuthenticated).Returns(true);
            httpContextAccessor.Setup(x => x.HttpContext.User.HasClaim(It.IsAny <Predicate <Claim> >()))
            .Returns((Predicate <Claim> x) => x.Invoke(new Claim(ClaimTypes.Anonymous, string.Empty)));
            httpContextAccessor.Setup(x => x.HttpContext.User.Claims).Returns(new List <Claim>
            {
                new Claim(ClaimTypes.Anonymous, JsonConvert.SerializeObject(unauthenticatedUser)),
            });

            var currentAuthenticatedUserProvider = new CurrentAuthenticatedUserProvider(httpContextAccessor.Object);
            var maybe = currentAuthenticatedUserProvider.CurrentAuthenticatedUser;

            Assert.True(maybe.HasValue);
            var user = Assert.IsType <UnauthenticatedUser>(maybe.Value);

            Assert.Equal(unauthenticatedUser.UserId, user.UserId);
            Assert.Equal(unauthenticatedUser.SetupMfaProviders, user.SetupMfaProviders);
        }