public async Task Details_ReturnsHttpNotFound_ForNullId()
        {
            // Arrange
            var controller = new AccountLoansController(_accLoanMock.Object, _accMock.Object, _loanMock.Object,
                                                        _mapperMock.Object, UserManagerMockHelper().Object, _userMock.Object);

            var user = new ClaimsPrincipal(new ClaimsIdentity(new Claim[]
            {
                new Claim(ClaimTypes.Name, "example name"),
                new Claim(ClaimTypes.NameIdentifier, "1"),
                new Claim("custom-claim", "example claim value"),
            }, "mock"));

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

            // Act
            var result = await controller.Details(null);

            // Assert
            var notFoundObjectResult = Assert.IsType <NotFoundResult>(result);

            Assert.Equal(404, notFoundObjectResult.StatusCode);
        }
        public async Task Index_ReturnsAViewResult_WithAListOfLoans()
        {
            // Arrange
            _loanMock.Setup(repo => repo.Get())
            .ReturnsAsync(GetAccountLoans());

            //_mapperMock.Setup(repo => repo.Map<IEnumerable<Loan>(null,null,null))
            //   .ReturnsAsync((IEnumerable<Loan>)null);
            var controller = new AccountLoansController(_accLoanMock.Object, _accMock.Object, _loanMock.Object,
                                                        _mapperMock.Object, UserManagerMockHelper().Object, _userMock.Object);

            var user = new ClaimsPrincipal(new ClaimsIdentity(new Claim[]
            {
                new Claim(ClaimTypes.Name, "example name"),
                new Claim(ClaimTypes.NameIdentifier, "1"),
                new Claim("custom-claim", "example claim value"),
            }, "mock"));

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



            //Act
            var result = await controller.Index(null, null, null);

            // Assert
            var viewResult = Assert.IsType <ViewResult>(result);
        }
        //[Fact]
        public async Task Create_ReturnsARedirectToIndexAction_ForValidModel()
        {
            // Arrange
            var controller = new AccountLoansController(_accLoanMock.Object, _accMock.Object, _loanMock.Object,
                                                        _mapperMock.Object, UserManagerMockHelper().Object, _userMock.Object);

            var httpContext = new DefaultHttpContext();
            var tempData    = new TempDataDictionary(httpContext, Mock.Of <ITempDataProvider>());

            tempData["LoanId"]  = null;
            controller.TempData = tempData;

            // Act
            var AccloanModel = new AccountLoanViewModel
            {
                Employment        = "test",
                Sum               = 1000,
                Currency          = "GEL",
                Term              = "test",
                OfficePhoneNumber = "+995 598 545 555"
            };

            var mapperResult = _mapperMock.Setup(m => m.Map <AccountLoanViewModel>(It.IsAny <AccountLoanViewModel>())).Returns(AccloanModel);



            var result = await controller.Create(accountLoanViewModel : AccloanModel);

            // Assert
            var redirectToActionResult = Assert.IsType <RedirectToActionResult>(result);

            Assert.Equal("AccountLoans", redirectToActionResult.ControllerName);
            Assert.Equal("Index", redirectToActionResult.ActionName);
        }
        public async Task Create_ReturnsViewResultType_ForInvalidModel()
        {
            // Arrange
            var controller = new AccountLoansController(_accLoanMock.Object, _accMock.Object, _loanMock.Object,
                                                        _mapperMock.Object, UserManagerMockHelper().Object, _userMock.Object);

            var httpContext = new DefaultHttpContext();
            var tempData    = new TempDataDictionary(httpContext, Mock.Of <ITempDataProvider>());

            tempData["LoanId"]  = null;
            controller.TempData = tempData;

            controller.ModelState.AddModelError("error", "some error");

            // Act
            var result = await controller.Create(accountLoanViewModel : null);

            // Assert
            Assert.IsType <ViewResult>(result);
        }
        //[Fact]
        public async Task Create_ReturnsViewResultType()
        {
            // Arrange
            var _userManagerMock = new Mock <UserManager <User> >();


            //_userManagerMock.Setup(repo => repo.GetUserId(User.Identity.Name);
            //    .Returns("123");

            var controller = new AccountLoansController(_accLoanMock.Object, _accMock.Object, _loanMock.Object,
                                                        _mapperMock.Object, UserManagerMockHelper().Object, _userMock.Object);

            var httpContext = new DefaultHttpContext();
            var tempData    = new TempDataDictionary(httpContext, Mock.Of <ITempDataProvider>());

            tempData["LoanId"]  = null;
            controller.TempData = tempData;

            // Act
            var result = await controller.Create(123);

            // Assert
            Assert.IsType <ViewResult>(result);
        }