/// <summary>
        /// Deletes user account from the database taking as parameter <see cref="UserToDelete"/>.
        /// </summary>
        /// <param name="user">User for log in</param>
        /// <exception cref="ArgumentNullException"></exception>
        /// <exception cref="InvalidOperationException"></exception>
        public void DeleteAccount(UserToDelete user)
        {
            if (user == null)
            {
                throw new ArgumentNullException(nameof(user), "User can not be null.");
            }

            if (!IsPasswordConfirmed(user.Username, user.Password))
            {
                throw new InvalidOperationException("Wrong password.");
            }

            var query = @"DELETE FROM [User]
                            WHERE [Username] = @name";

            using (SqlConnection connection = new SqlConnection(_connectionString))
            {
                connection.QueryFirstOrDefault <UserToDelete>(query, new { name = user.Username });
            }
        }
        public void DeleteAccount_InternalServerError_Test()
        {
            var accountServiceMock = new Mock <IAccountService>();

            var user = new UserToDelete();

            accountServiceMock.Setup(x => x.DeleteAccount(user)).Throws <Exception>();

            var controller = new AccountController(accountServiceMock.Object);

            var actualResult = controller.DeleteAccount(user);

            var result       = (ObjectResult)actualResult;
            var asJson       = JsonConvert.SerializeObject(result.Value);
            var deserialized = JsonConvert.DeserializeObject <Dictionary <string, object> >(asJson);

            Assert.IsTrue((bool)deserialized["Success"] == false);

            accountServiceMock.VerifyAll();
        }
        public void DeleteAccount_Successfully_Test()
        {
            var accountServiceMock = new Mock <IAccountService>();

            var user = new UserToDelete();

            accountServiceMock.Setup(x => x.DeleteAccount(user));

            var controller   = new AccountController(accountServiceMock.Object);
            var actualResult = controller.DeleteAccount(user);

            var okResult = (OkObjectResult)actualResult;

            var asJson       = JsonConvert.SerializeObject(okResult.Value);
            var deserialized = JsonConvert.DeserializeObject <Dictionary <string, object> >(asJson);

            Assert.IsTrue((bool)deserialized["Success"]);

            accountServiceMock.VerifyAll();
        }
        public void DeleteAccount_WrongPassword_Test()
        {
            var accountServiceMock = new Mock <IAccountService>();

            var user = new UserToDelete();

            accountServiceMock.Setup(x => x.DeleteAccount(user))
            .Throws(new InvalidOperationException("Wrong password."));

            var controller   = new AccountController(accountServiceMock.Object);
            var actualResult = controller.DeleteAccount(user);

            var badRequestResult = (BadRequestObjectResult)actualResult;

            var asJson       = JsonConvert.SerializeObject(badRequestResult.Value);
            var deserialized = JsonConvert.DeserializeObject <Dictionary <string, object> >(asJson);

            Assert.AreEqual("Wrong password.", deserialized["Error"]);

            accountServiceMock.VerifyAll();
        }
Example #5
0
        public IActionResult DeleteAccount(UserToDelete user)
        {
            try
            {
                _accountService.DeleteAccount(user);

                return(Ok(new
                {
                    Success = true,
                    Message = "Successfully deleted account."
                }));
            }
            catch (InvalidOperationException invalidOperationException)
            {
                return(BadRequest(new
                {
                    Success = false,
                    Error = invalidOperationException.Message
                }));
            }
            catch (ArgumentNullException argumentNullException)
            {
                return(BadRequest(new
                {
                    Success = false,
                    Error = argumentNullException.Message
                }));
            }
            catch (Exception exception)
            {
                return(new ObjectResult(new
                {
                    Success = false,
                    Error = exception.Message
                })
                {
                    StatusCode = StatusCodes.Status500InternalServerError
                });
            }
        }