private IActionResult GetUserProfile(RequestResult <UserProfileModel> expected, Dictionary <string, UserPreferenceModel> userPreferencePayloadMock)
        {
            // Setup
            Mock <IHttpContextAccessor> httpContextAccessorMock = CreateValidHttpContext(token, userId, hdid);

            Mock <IUserProfileService> userProfileServiceMock = new Mock <IUserProfileService>();

            userProfileServiceMock.Setup(s => s.GetUserProfile(hdid, It.IsAny <DateTime>())).Returns(expected);
            userProfileServiceMock.Setup(s => s.GetActiveTermsOfService()).Returns(new RequestResult <TermsOfServiceModel>());
            userProfileServiceMock.Setup(s => s.GetUserPreferences(hdid)).Returns(new RequestResult <Dictionary <string, UserPreferenceModel> >()
            {
                ResourcePayload = userPreferencePayloadMock
            });

            Mock <IUserEmailService> emailServiceMock = new Mock <IUserEmailService>();
            Mock <IUserSMSService>   smsServiceMock   = new Mock <IUserSMSService>();

            UserProfileController service = new UserProfileController(
                new Mock <ILogger <UserProfileController> >().Object,
                userProfileServiceMock.Object,
                httpContextAccessorMock.Object,
                emailServiceMock.Object,
                smsServiceMock.Object
                );

            return(service.GetUserProfile(hdid));
        }
        public void Should_return_401_when_exception_thrown()
        {
            _claimsPrincipal = new ClaimsPrincipalBuilder()
                               .WithClaim(ClaimTypes.GivenName, UserData.FIRST_NAME)
                               .WithClaim(ClaimTypes.Surname, UserData.LAST_NAME)
                               .Build();
            _controller = SetupControllerWithClaims();

            var result      = _controller.GetUserProfile();
            var typedResult = (UnauthorizedResult)result;

            typedResult.StatusCode.Should().Be((int)HttpStatusCode.Unauthorized);
        }
        public void Should_return_ok_code_when_user_profile_found()
        {
            var result      = _controller.GetUserProfile();
            var typedResult = (OkObjectResult)result;

            typedResult.Should().NotBeNull();

            var userProfile = (UserProfileResponse)typedResult.Value;
            var username    = _claimsPrincipal.Claims.FirstOrDefault()?.Value;

            userProfile.Username.Should().Be(username);
            userProfile.Role.Should().Be(_claimsPrincipal.Claims.FirstOrDefault(x => x.Type == ClaimTypes.Role)?.Value);
        }
        public void ShouldGetUserProfile()
        {
            // Setup
            string hdid   = "1234567890123456789012345678901234567890123456789012";
            string token  = "Fake Access Token";
            string userId = "1001";

            UserProfile userProfile = new UserProfile
            {
                HdId = hdid,
                AcceptedTermsOfService = true
            };

            RequestResult <UserProfileModel> expected = new RequestResult <UserProfileModel>
            {
                ResourcePayload = UserProfileModel.CreateFromDbModel(userProfile),
                ResultStatus    = Common.Constants.ResultType.Success
            };

            Mock <IHttpContextAccessor> httpContextAccessorMock = CreateValidHttpContext(token, userId, hdid);

            Mock <IUserProfileService> userProfileServiceMock = new Mock <IUserProfileService>();

            userProfileServiceMock.Setup(s => s.GetUserProfile(hdid, It.IsAny <DateTime>())).Returns(expected);
            userProfileServiceMock.Setup(s => s.GetActiveTermsOfService()).Returns(new RequestResult <TermsOfServiceModel>());
            userProfileServiceMock.Setup(s => s.GetUserPreferences(hdid)).Returns(new RequestResult <Dictionary <string, string> >()
            {
                ResourcePayload = new Dictionary <string, string>()
                {
                }
            });

            Mock <IUserEmailService> emailServiceMock = new Mock <IUserEmailService>();
            Mock <IUserSMSService>   smsServiceMock   = new Mock <IUserSMSService>();

            UserProfileController service = new UserProfileController(
                new Mock <ILogger <UserProfileController> >().Object,
                userProfileServiceMock.Object,
                httpContextAccessorMock.Object,
                emailServiceMock.Object,
                smsServiceMock.Object
                );
            IActionResult actualResult = service.GetUserProfile(hdid);

            Assert.IsType <JsonResult>(actualResult);
            Assert.True(((JsonResult)actualResult).Value.IsDeepEqual(expected));
        }
        public async Task SuccessProfile()
        {
            // Arrange
            var mock = MockUserManager(_users);
            UserProfileController controller = new UserProfileController(mock.Object);

            object res = null;

            // Act
            try
            { res = await controller.GetUserProfile(); }
            catch (Exception ex)
            {
                res = ex;
            }


            // Assert

            Assert.IsType <NullReferenceException>(res);
        }
        public async Task UserProfileControllerReturnsUserProfile()
        {
            var options = SqliteInMemory
                          .CreateOptions <ApplicationDbContext>();

            using (var context = new ApplicationDbContext(options))
            {
                context.Database.EnsureCreated();
                context.SeedTestDatabaseUsers();
            }

            using (var context = new ApplicationDbContext(options))
            {
                UserProfileController controller = new UserProfileController(
                    context,
                    SetUpStubLogger().Object,
                    SetUpMockClaimsManager().Object);

                controller.ControllerContext = new ControllerContext()
                {
                    HttpContext = new DefaultHttpContext()
                    {
                        User = setUpSampleHttpContextUser()
                    }
                };

                var result = await controller.GetUserProfile() as OkObjectResult;

                var resultData = result.Value as UserProfileDTO;

                Assert.Equal(1, resultData.UserId);
                Assert.Equal("Greg", resultData.FirstName);
                Assert.Equal("Michael", resultData.LastName);
                Assert.Equal("gmichael", resultData.Username);
                Assert.Equal("*****@*****.**", resultData.Email);
            }
        }