public async Task<HttpResult<RegisterResponse>> RegisterAsync(RegisterUser registerUser)
 {
     ThrowIfDisposed();
     HttpResult<RegisterResponse> result = await HttpClient.PostAsJsonAsync<RegisterUser, RegisterResponse>(RegisterUri, registerUser);
     AddAllErrors(result, result.Content);
     return result;
 }
        public async Task RegisterUserNameRequired()
        {
            RegisterUser registerUser = new RegisterUser(null, password);

            HttpResult<RegisterResponse> result = await client.RegisterAsync(registerUser);

            Assert.IsNotNull(result);
            Assert.IsFalse(result.Succeeded);
            RegisterResponse response = result.Content;
            Assert.IsNotNull(response);
            Assert.IsNotNull(response.Message);
            Assert.IsNotNull(response.UserNameErrors);
            Assert.IsTrue(response.UserNameErrors.Length > 0);
        }
        public async Task RegisterUserAlreadyExists()
        {
            RegisterUser registerUser = new RegisterUser(invalidUserName, password);

            HttpResult<RegisterResponse> result = await client.RegisterAsync(registerUser);

            Assert.IsNotNull(result);
            Assert.IsFalse(result.Succeeded);
            RegisterResponse response = result.Content;
            Assert.IsNotNull(response);
            Assert.IsNotNull(response.Message);
            Assert.IsNotNull(response.ErrorMessages);
            Assert.IsTrue(response.ErrorMessages.Length > 0);
        }
        public async Task RegisterPasswordMismatch()
        {
            RegisterUser registerUser = new RegisterUser(userName, password, invalidPassword);

            HttpResult<RegisterResponse> result = await client.RegisterAsync(registerUser);

            Assert.IsNotNull(result);
            Assert.IsFalse(result.Succeeded);
            RegisterResponse response = result.Content;
            Assert.IsNotNull(response);
            Assert.IsNotNull(response.Message);
            Assert.IsTrue(response.HasErrors);
            Assert.IsNotNull(response.ConfirmPasswordErrors);
            Assert.IsTrue(response.ConfirmPasswordErrors.Length > 0);
        }
        public async Task Register()
        {
            RegisterUser registerUser = new RegisterUser(userName, password);

            HttpResult<RegisterResponse> result = await client.RegisterAsync(registerUser);

            Assert.IsNotNull(result);
            Assert.IsTrue(result.Succeeded);
        }
        private async void SignUpButton_Click(object sender, RoutedEventArgs e)
        {
            ClearSignUpErrors();

            // TODO: Add input validation
            RegisterUser registerUser = new RegisterUser()
            {
                UserName = this.NewUsernameTextBox.Text,
                Password = this.NewPasswordBox.Password,
                ConfirmPassword = this.ConfirmPasswordBox.Password
            };

            HttpResult registerResult;
            using (AccountClient accountClient = ClientFactory.CreateAccountClient())
            {
                registerResult = await accountClient.RegisterAsync(registerUser);
                if (registerResult.Succeeded)
                {
                    HttpResult<AccessTokenResponse> loginResult = await accountClient.LoginAsync(registerUser.UserName, registerUser.Password);
                    if (loginResult.Succeeded)
                    {
                        string accessToken = loginResult.Content.AccessToken;
                        bool completed = AccessTokenProvider.AccessTokenSource.TrySetResult(accessToken);
                        this.NavigationService.Navigate(new Uri("/TodoPage.xaml", UriKind.Relative));
                    }
                    else
                    {
                        DisplaySignUpErrors(loginResult.Errors);
                    }
                }
                else
                {
                    DisplaySignUpErrors(registerResult.Errors);
                }
            }
        }
        private async void SignUpButton_Click(object sender, RoutedEventArgs e)
        {
            ClearErrors();

            // TODO: Add input validation
            string username = UsernameTextBox.Text;
            string password = PasswordBox.Password;
            RegisterUser registerUser = new RegisterUser()
            {
                UserName = username,
                Password = password,
                ConfirmPassword = this.ConfirmPasswordBox.Password
            };

            HttpResult registerResult;
            using (AccountClient accountClient = ClientFactory.CreateAccountClient())
            {
                registerResult = await accountClient.RegisterAsync(registerUser);
                if (!registerResult.Succeeded)
                {
                    DisplayErrors(registerResult.Errors);
                    return;
                }

                HttpResult<AccessTokenResponse> loginResult = await accountClient.LoginAsync(username, password);
                if (loginResult.Succeeded)
                {
                    AppSettings settings = new AppSettings();
                    settings.SavePasswordCredential(username, password);
                    bool resultSet = accessTokenSource.TrySetResult(loginResult.Content.AccessToken);
                    this.Frame.Navigate(typeof(TodoPage));
                }
                else
                {
                    DisplayErrors(loginResult.Errors);
                }
            }
        }