Example #1
0
        /// <inheritdoc/>
        public async Task <RepositoryResponse> CreateAsync(NewIdSrvUserDto user)
        {
            if (user == null || user.UserName == null)
            {
                throw new ArgumentNullException(nameof(user));
            }

            using (IDbConnection connection = await this.GetConnection())
            {
                var    compiler     = new SqlServerCompiler();
                var    db           = new QueryFactory(connection, compiler);
                string passwordSalt = user.Password != null?Guid.NewGuid().ToString() : null;

                try
                {
                    int inserted = await db.Query("Users").InsertAsync(new
                    {
                        user.UserName,
                        PasswordHash = this.GetB64PasswordHashFrom(user.Password, passwordSalt),
                        PasswordSalt = passwordSalt,
                        IsBlocked    = false,
                    });

                    return(inserted == 1 ? RepositoryResponse.Success : RepositoryResponse.Conflict);
                }
                catch (SqlCeException ex) when(ex.NativeError == 25016)
                {
                    return(RepositoryResponse.Conflict);
                }
            }
        }
        public void Create_ThrowsUserRepositoryException_When_RepositoryReturnUnexpetedResponse()
        {
            this.UserRepository
            .Setup(v => v.CreateAsync(It.IsAny <NewIdSrvUserDto>()))
            .ReturnsAsync(this.UnexpectedRepositoryResponse);
            var controller = new UserController(this.UserRepository.Object);
            var newUserDto = new NewIdSrvUserDto {
                UserName = "******", Password = "******"
            };

            Assert.ThrowsAsync <UserRepositoryException>(() => controller.Create(newUserDto));
        }
Example #3
0
        public async Task Create_CallServiceCreateUser_When_PassingNewUser()
        {
            var newUser = new NewIdSrvUserDto {
                UserName = "******", Password = "******"
            };

            this.UserServiceMock.Setup(v => v.CreateUserAsync(newUser)).ReturnsAsync(true);
            var controller = new UsersController(this.UserServiceMock.Object);
            await controller.Create(newUser);

            this.UserServiceMock.Verify(v => v.CreateUserAsync(newUser), Times.Once);
        }
        public async Task Create_InvokeCreateFromRepository_With_PassedUser_When_PassingUserWithoutPassword()
        {
            this.UserRepository
            .Setup(v => v.CreateAsync(It.IsAny <NewIdSrvUserDto>()))
            .ReturnsAsync(RepositoryResponse.Success);
            var controller = new UserController(this.UserRepository.Object);
            var userDto    = new NewIdSrvUserDto {
                UserName = "******"
            };
            IHttpActionResult httpResult = await controller.Create(userDto);

            this.UserRepository.Verify(v => v.CreateAsync(userDto));
        }
        public async Task Create_ReturnConflict_When_RepositoryReturnConflict()
        {
            this.UserRepository
            .Setup(v => v.CreateAsync(It.IsAny <NewIdSrvUserDto>()))
            .ReturnsAsync(RepositoryResponse.Conflict);
            var controller = new UserController(this.UserRepository.Object);
            var newUserDto = new NewIdSrvUserDto {
                UserName = "******", Password = "******"
            };
            IHttpActionResult httpResult = await controller.Create(newUserDto);

            Assert.NotNull(httpResult);
            Assert.IsInstanceOf <ConflictResult>(httpResult);
        }
        public async Task Create_ReturnOk_When_PassingDtoOnlyWithUsername_And_RepositoryReturnSuccess()
        {
            this.UserRepository
            .Setup(v => v.CreateAsync(It.IsAny <NewIdSrvUserDto>()))
            .ReturnsAsync(RepositoryResponse.Success);
            var controller = new UserController(this.UserRepository.Object);
            var newUserDto = new NewIdSrvUserDto {
                UserName = "******"
            };
            IHttpActionResult httpResult = await controller.Create(newUserDto);

            Assert.NotNull(httpResult);
            Assert.IsInstanceOf <OkResult>(httpResult);
        }
Example #7
0
        public async Task <IHttpActionResult> Create(NewIdSrvUserDto user)
        {
            // Password can be null for windows users
            if (user == null || user.UserName == null)
            {
                return(this.BadRequest());
            }

            RepositoryResponse response = await this.UserRepository.CreateAsync(user);

            return
                (response == RepositoryResponse.Success ? this.Ok() :
                 response == RepositoryResponse.Conflict ? this.Conflict() as IHttpActionResult :
                 throw new UserRepositoryException());
        }
Example #8
0
        public async Task <ActionResult> Create(NewIdSrvUserDto user)
        {
            if (!this.ModelState.IsValid)
            {
                return(this.View(user));
            }

            bool created = await this.UserService.CreateUserAsync(user);

            if (!created)
            {
                this.ModelState.AddModelError(string.Empty, "Такой пользователь уже существует");
            }

            return(created ? this.ViewSuccess("Пользователь успешно создан") : this.View(user) as ActionResult);
        }
Example #9
0
        public async Task Create_ReturnSelf_With_InvalilModelState_And_PassedModel_When_UserServiceCanNotCreateUser()
        {
            var newUser = new NewIdSrvUserDto {
                UserName = "******", Password = "******"
            };

            this.UserServiceMock.Setup(v => v.CreateUserAsync(It.IsAny <NewIdSrvUserDto>())).Returns(Task.FromResult(false));
            var          controller = new UsersController(this.UserServiceMock.Object);
            ActionResult result     = await controller.Create(newUser);

            Assert.IsInstanceOf <ViewResult>(result);
            var viewResult = result as ViewResult;

            Assert.NotNull(viewResult);
            Assert.AreEqual(string.Empty, viewResult.ViewName);
            Assert.IsFalse(controller.ModelState.IsValid);
            Assert.AreEqual(controller.ViewData.Model, newUser);
        }
Example #10
0
 /// <inheritdoc/>
 /// <remarks>
 /// В случае ошибки подключения к WebApi возникнет системное исключение,
 /// внутри метода оно никак не перехватывается. Метод может вернуть false только
 /// в случае успешного подключения (когда ответ WebApi интепретируется как ошибка).
 /// </remarks>
 public async Task <bool> CreateUserAsync(NewIdSrvUserDto newUser)
 {
     return(await RestApiHelpers.CallBoolApi(() => this.RestClient.CreateAsync(newUser)));
 }
Example #11
0
        public async Task <ActionResult> Register(RegisterForm registerForm)
        {
            if (!this.ModelState.IsValid)
            {
                return(this.View(registerForm));
            }

            this.ViewBag.AlreadyExists = false;
            NewUser createdUser = null;
            var     userDto     = new NewIdSrvUserDto {
                UserName = registerForm.Login, Password = registerForm.Password
            };

            using (var client = new HttpClient())
            {
                // Update port # in the following line.
                client.BaseAddress = new Uri("https://localhost:44397/Api/User/");
                client.DefaultRequestHeaders.Accept.Clear();
                client.DefaultRequestHeaders.Accept.Add(
                    new MediaTypeWithQualityHeaderValue("application/json"));

                HttpResponseMessage response = await client.PutAsJsonAsync(string.Empty, userDto);

                if (response.StatusCode != HttpStatusCode.OK && response.StatusCode != HttpStatusCode.Conflict)
                {
                    this.ModelState.AddModelError("Couldn't create", "Не удалось зарегистрировать нового пользователя на SSO сервере");
                    return(this.View(registerForm));
                }

                if (response.StatusCode == HttpStatusCode.Conflict)
                {
                    this.ViewBag.AlreadyExists = true;
                }

                response = await client.GetAsync($"GetByUserName?userName={HttpUtility.UrlEncode(userDto.UserName)}");

                if (!response.IsSuccessStatusCode)
                {
                    this.ModelState.AddModelError("Couldn't create", "Ошибка при чтении созданного пользователя на SSO сервере");
                    return(this.View(registerForm));
                }

                var createdUserDto = await response.Content.ReadAsAsync <IdSrvUserDto>();

                createdUser = new NewUser {
                    Id = createdUserDto.Id.ToString(), Name = createdUserDto.UserName
                };
            }

            using (var context = new AccountsContext())
            {
                context.UserProfiles.Add(new UserProfile {
                    IdSrvId = createdUser.Id, Login = createdUser.Name
                });

                // Тут может рухнуть с исключением, никак пока не обрабатываю
                await context.SaveChangesAsync();
            }

            this.ViewBag.Name = createdUser.Name;
            return(this.View("UserCreated"));
        }