public async Task PostUser_ModelInvalid_ReturnsBadRequest()
        {
            // Arrange
            var mockConfiguration = new Mock <Microsoft.Extensions.Configuration.IConfiguration>();
            var mockLogger        = new Mock <ILogger <AccountController> >();
            var mockUmService     = new Mock <IUserManagementService>();
            var mockHelperService = new Mock <IHelperService>();

            var mapperConfig = new MapperConfiguration(cfg =>
            {
                cfg.AddProfile(new AutomapperProfiles.UserProfile());
            });
            var mapper = mapperConfig.CreateMapper();

            var controller = new UsersController(mockConfiguration.Object, mockLogger.Object,
                                                 mockUmService.Object, mapper, mockHelperService.Object);

            controller.ModelState.AddModelError("LastName", "Last name is missing.");

            var a = new UserModel
            {
                FirstName = "a",
                LastName  = "b",
                Email     = "[email protected]",
            };

            // Act
            var result = await controller.PostUser(a);

            // Assert
            var actionResult = Assert.IsType <ActionResult <UserModel> >(result);
            var returnValue  = Assert.IsType <BadRequestObjectResult>(actionResult.Result);

            mockUmService.Verify();
        }
        public async Task PostUser_NewUserCorrect_UserAddedAndReturned()
        {
            // Arrange
            var mockConfiguration = new Mock <Microsoft.Extensions.Configuration.IConfiguration>();
            var mockLogger        = new Mock <ILogger <AccountController> >();
            var mockUmService     = new Mock <IUserManagementService>();
            var mockHelperService = new Mock <IHelperService>();

            var mapperConfig = new MapperConfiguration(cfg =>
            {
                cfg.AddProfile(new AutomapperProfiles.UserProfile());
            });
            var mapper = mapperConfig.CreateMapper();

            var controller = new UsersController(mockConfiguration.Object, mockLogger.Object,
                                                 mockUmService.Object, mapper, mockHelperService.Object);

            var a = new UserModel
            {
                FirstName = "a",
                LastName  = "b",
                Email     = "[email protected]",
                Password  = "******",
                Role      = "role"
            };

            mockUmService.Setup(umService => umService.IsEmailInUseAsync("[email protected]"))
            .ReturnsAsync(false)
            .Verifiable();

            ApplicationUser user = mapper.Map <ApplicationUser>(a);

            mockUmService.Setup(umService => umService.AddUserAsync(It.IsAny <ApplicationUser>(), "pass", "role"))
            .ReturnsAsync(new IdentityResult())
            .Verifiable();

            // Act
            var result = await controller.PostUser(a);

            // Assert
            var actionResult          = Assert.IsType <ActionResult <UserModel> >(result);
            var createdAtActionResult = Assert.IsType <CreatedAtActionResult>(actionResult.Result);
            var returnValue           = Assert.IsType <ApplicationUser>(createdAtActionResult.Value);

            mockUmService.Verify();

            Assert.Equal("[email protected]", returnValue.Email);
        }