public void IsActiveAsync_UserFoundAndActive_ContextIsActive()
        {
            // Arrange
            var userId = Guid.NewGuid();

            var options           = new MembershipOptions();
            var membershipService = A.Fake <IMembershipService>();
            var roleService       = A.Fake <IRoleService>();

            var user = new MembershipUser {
                IsLockedOut = false
            };

            A.CallTo(() => membershipService.GetUserAsync(userId)).Returns(Task.FromResult(user));

            var context = new IsActiveContext(
                new ClaimsPrincipal(
                    new ClaimsIdentity(new List <Claim>
            {
                new Claim(Constants.ClaimTypes.Subject, userId.ToString("N"))
            })),
                new Client()
                );

            var service = new MembershipUserService(options, membershipService, roleService);

            // Act
            service.IsActiveAsync(context).Wait();

            // Assert
            context.IsActive.Should().BeTrue();

            A.CallTo(() => membershipService.GetUserAsync(userId)).MustHaveHappened();
        }
        public void IsActiveAsync_SubjectNull_ContextIsNotActive()
        {
            // Arrange
            var options           = new MembershipOptions();
            var membershipService = A.Fake <IMembershipService>();
            var roleService       = A.Fake <IRoleService>();

            var context = new IsActiveContext(new ClaimsPrincipal(new ClaimsIdentity()), new Client());

            var service = new MembershipUserService(options, membershipService, roleService);

            Action isActiveAsync = () => service.IsActiveAsync(context).Wait();

            // Act + Assert
            isActiveAsync.Should().Throw <InvalidOperationException>().And.Message.Should().Be("sub claim is missing");
        }
        public void IsActiveAsync_SubjectClaimInvalid_ContextIsNotActive(string subjectId)
        {
            // Arrange
            var options           = new MembershipOptions();
            var membershipService = A.Fake <IMembershipService>();
            var roleService       = A.Fake <IRoleService>();

            var context = new IsActiveContext(
                new ClaimsPrincipal(new ClaimsIdentity(new List <Claim> {
                new Claim(Constants.ClaimTypes.Subject, subjectId)
            })),
                new Client()
                );

            var service = new MembershipUserService(options, membershipService, roleService);

            // Act
            service.IsActiveAsync(context).Wait();

            // Assert
            context.IsActive.Should().BeFalse();
        }