示例#1
0
        public async Task Given_A_Valid_User_If_User_Already_Exists_Should_Return_BadRequest()
        {
            // Arrange
            const string expected          = "User already exists.";
            var          registerViewModel = new RegisterViewModel
            {
                Email    = "*****@*****.**",
                Password = "******",
                Username = "******"
            };

            var registerQueryParameters = new RegisterQueryParameters
            {
                ReturnUrl = "/"
            };

            _userManager.CreateAsync(Arg.Any <ApplicationUser>(), Arg.Any <string>()).Returns(IdentityResult.Failed(new IdentityError {
                Description = "User already exists."
            }));

            // Act
            var result = await _sut.Register(registerViewModel, registerQueryParameters) as BadRequestObjectResult;

            // Assert
            result.Should().BeOfType <BadRequestObjectResult>();
            var errors = result?.Value as IEnumerable <string>;

            errors.Should().ContainSingle(expected);
        }
示例#2
0
        public async Task Given_An_Invalid_ModelState_Should_Return_BadRequestResult()
        {
            // Arrange
            var registerViewModel       = new RegisterViewModel();
            var registerQueryParameters = new RegisterQueryParameters();

            _sut.ModelState.AddModelError("Username", "Username is required");

            // Act
            var result = await _sut.Register(registerViewModel, registerQueryParameters);

            // Assert
            result.Should().BeOfType <BadRequestObjectResult>();
        }
示例#3
0
        public async Task Given_An_Invalid_ModelState_Should_Not_Invoke_CreateAsync_Method()
        {
            // Arrange
            var registerViewModel       = new RegisterViewModel();
            var registerQueryParameters = new RegisterQueryParameters();

            _sut.ModelState.AddModelError("Username", "Username is required");

            // Act
            await _sut.Register(registerViewModel, registerQueryParameters);

            // Assert
            await _userManager.DidNotReceive().CreateAsync(Arg.Any <ApplicationUser>());
        }
示例#4
0
        public async Task Given_An_Invalid_ModelState_Should_Return_BadRequestResult_With_Errors()
        {
            // Arrange
            const string expected = "Username is required";

            var registerViewModel       = new RegisterViewModel();
            var registerQueryParameters = new RegisterQueryParameters();

            _sut.ModelState.AddModelError("Username", "Username is required");

            // Act
            var result = await _sut.Register(registerViewModel, registerQueryParameters) as BadRequestObjectResult;

            // Assert
            result.Should().BeOfType <BadRequestObjectResult>();
            var errors = result?.Value as IEnumerable <string>;

            errors.Should().ContainSingle(expected);
        }
示例#5
0
        public async Task Given_A_Valid_User_Should_Invoke_SignInAsync_Once()
        {
            // Arrange
            var registerViewModel = new RegisterViewModel
            {
                Email    = "*****@*****.**",
                Password = "******",
                Username = "******"
            };

            var registerQueryParameters = new RegisterQueryParameters
            {
                ReturnUrl = "/"
            };

            _userManager.CreateAsync(Arg.Any <ApplicationUser>(), Arg.Any <string>()).Returns(IdentityResult.Success);

            var request = Substitute.For <HttpRequest>();

            request.Scheme.Returns("http");
            _sut.ControllerContext             = new ControllerContext();
            _sut.ControllerContext.HttpContext = new DefaultHttpContext();

            var urlHelper = Substitute.For <IUrlHelper>();

            urlHelper.Action(Arg.Any <string>(), Arg.Any <string>(), Arg.Any <object>(), Arg.Any <string>()).Returns("callback");

            _sut.Url = urlHelper;

            _jwtSettings.Value.Returns(new JwtSettings {
                Key = "*@thu}qx)@h0-kI9%$](^l~xuFK>TL,%$EI", Issuer = "issue"
            });
            _userManager.GetClaimsAsync(Arg.Any <ApplicationUser>()).Returns(new List <Claim>());
            _userManager.GetRolesAsync(Arg.Any <ApplicationUser>()).Returns(new List <string>());

            _userManager.GenerateEmailConfirmationTokenAsync(Arg.Any <ApplicationUser>()).Returns(@"H!Y7/Q}9I%J61aIn|Z.ouTvY.*@thu}qx)@h0-kI9%$](^l~xuFK>TL,%$EI_|7?");

            // Act
            await _sut.Register(registerViewModel, registerQueryParameters);

            // Assert
            await _signInManager.Received(1).SignInAsync(Arg.Any <ApplicationUser>(), Arg.Any <bool>());
        }
示例#6
0
        public async Task <IActionResult> Register([FromBody] RegisterViewModel model, [FromQuery] RegisterQueryParameters queryParameters)
        {
            if (ModelState.IsValid)
            {
                var user = new ApplicationUser
                {
                    UserName = model.Username,
                    Email    = model.Email,
                    FullName = model.Username
                };
                var result = await _userManager.CreateAsync(user, model.Password);

                if (result.Succeeded)
                {
                    var code = await _userManager.GenerateEmailConfirmationTokenAsync(user);

                    var callbackUrl =
                        Url.EmailConfirmationLink(user.Id, code, Request.Scheme, queryParameters.ReturnUrl);
                    await _mediator.Send(new SendRegistrationEmailCommand
                    {
                        Email       = model.Email,
                        CallBackUrl = callbackUrl,
                        Username    = user.FullName
                    });

                    await _userManager.AddToRoleAsync(user, ApplicationRoles.RoleUser);

                    await _signInManager.SignInAsync(user, false);

                    return(Ok(new
                    {
                        token = await BuildToken(user),
                        user = new
                        {
                            user.Id,
                            Name = user.FullName,
                            user.ProfileImageUrl
                        }
                    }));
                }

                return(BadRequest(result.Errors.Descriptions()));
            }

            return(BadRequest(ModelState.Errors()));
        }