From bc3bd42d32ac6d2635bd418e4daee8e7c2284b1a Mon Sep 17 00:00:00 2001 From: Sebastian Stehle Date: Sat, 24 Jun 2017 17:07:09 +0200 Subject: [PATCH] Some tests --- src/Squidex/Controllers/UI/Extensions.cs | 8 ++ .../UI/Profile/ProfileController.cs | 66 +++++----- .../Controllers/UI/Profile/ProfileVM.cs | 4 + src/Squidex/Views/Profile/Profile.cshtml | 113 +++++++++--------- .../Apps/CachingAppProviderTests.cs | 18 +++ .../Schemas/CachingSchemaProviderTests.cs | 18 +++ .../Users/AssetUserPictureStoreTests.cs | 60 ++++++++++ 7 files changed, 197 insertions(+), 90 deletions(-) create mode 100644 tests/Squidex.Read.Tests/Users/AssetUserPictureStoreTests.cs diff --git a/src/Squidex/Controllers/UI/Extensions.cs b/src/Squidex/Controllers/UI/Extensions.cs index 28edff769..93eaed985 100644 --- a/src/Squidex/Controllers/UI/Extensions.cs +++ b/src/Squidex/Controllers/UI/Extensions.cs @@ -15,6 +15,14 @@ namespace Squidex.Controllers.UI { public static class Extensions { + public static Task UpdateAsync(this UserManager userManager, IUser user, string email, string displayName) + { + user.UpdateEmail(email); + user.UpdateDisplayName(displayName); + + return userManager.UpdateAsync(user); + } + public static async Task GetExternalLoginInfoWithDisplayNameAsync(this SignInManager signInManager, string expectedXsrf = null) { var externalLogin = await signInManager.GetExternalLoginInfoAsync(expectedXsrf); diff --git a/src/Squidex/Controllers/UI/Profile/ProfileController.cs b/src/Squidex/Controllers/UI/Profile/ProfileController.cs index a20e1d91a..ffdf3ab36 100644 --- a/src/Squidex/Controllers/UI/Profile/ProfileController.cs +++ b/src/Squidex/Controllers/UI/Profile/ProfileController.cs @@ -57,26 +57,11 @@ namespace Squidex.Controllers.UI.Profile { var user = await userManager.GetUserAsync(User); - ViewBag.SuccessMessage = successMessage; - - return View(await GetProfileVM(user)); - } - - [HttpPost] - [Route("/account/profile")] - public Task Profile(ChangeProfileModel model) - { - return MakeChangeAsync(async user => - { - user.UpdateEmail(model.Email); - user.UpdateDisplayName(model.DisplayName); - - return await userManager.UpdateAsync(user); - }, "Account updated successfully. Please logout and login again to see the changes."); + return View(await GetProfileVM(user, successMessage: successMessage)); } [HttpPost] - [Route("account/add-login/")] + [Route("/account/profile/login-add/")] public async Task AddLogin(string provider) { await HttpContext.Authentication.SignOutAsync(identityCookieOptions.Value.ExternalCookieAuthenticationScheme); @@ -89,7 +74,7 @@ namespace Squidex.Controllers.UI.Profile } [HttpGet] - [Route("account/add-login-callback/")] + [Route("/account/profile/login-add-callback/")] public Task AddLoginCallback(string remoteError = null) { return MakeChangeAsync(async user => @@ -101,7 +86,23 @@ namespace Squidex.Controllers.UI.Profile } [HttpPost] - [Route("/account/set-password")] + [Route("/account/profile/update")] + public Task Profile(ChangeProfileModel model) + { + return MakeChangeAsync(user => userManager.UpdateAsync(user, model.Email, model.DisplayName), + "Account updated successfully."); + } + + [HttpPost] + [Route("/account/profile/login-remove")] + public Task RemoveLogin(RemoveLoginModel model) + { + return MakeChangeAsync(user => userManager.RemoveLoginAsync(user, model.LoginProvider, model.ProviderKey), + "Login provider removed successfully."); + } + + [HttpPost] + [Route("/account/profile/password-set")] public Task SetPassword(SetPasswordModel model) { return MakeChangeAsync(user => userManager.AddPasswordAsync(user, model.Password), @@ -109,7 +110,7 @@ namespace Squidex.Controllers.UI.Profile } [HttpPost] - [Route("/account/change-password")] + [Route("/account/profile/password-change")] public Task ChangePassword(ChangePasswordModel model) { return MakeChangeAsync(user => userManager.ChangePasswordAsync(user, model.OldPassword, model.Password), @@ -117,15 +118,7 @@ namespace Squidex.Controllers.UI.Profile } [HttpPost] - [Route("/account/remove-login")] - public Task RemoveLogin(RemoveLoginModel model) - { - return MakeChangeAsync(user => userManager.RemoveLoginAsync(user, model.LoginProvider, model.ProviderKey), - "Login provider removed successfully."); - } - - [HttpPost] - [Route("/account/upload-picture")] + [Route("/account/profile/upload-picture")] public Task UploadPicture(List file) { return MakeChangeAsync(async user => @@ -152,7 +145,7 @@ namespace Squidex.Controllers.UI.Profile user.SetPictureUrlToStore(); return await userManager.UpdateAsync(user); - }, "Password set successfully."); + }, "Picture uploaded successfully."); } private async Task MakeChangeAsync(Func> action, string successMessage, ChangeProfileModel model = null) @@ -164,6 +157,7 @@ namespace Squidex.Controllers.UI.Profile return View("Profile", await GetProfileVM(user, model)); } + string errorMessage; try { var result = await action(user); @@ -175,17 +169,17 @@ namespace Squidex.Controllers.UI.Profile return RedirectToAction(nameof(Profile), new { successMessage }); } - ViewBag.ErrorMessage = string.Join(". ", result.Errors.Select(x => x.Description)); + errorMessage = string.Join(". ", result.Errors.Select(x => x.Description)); } catch { - ViewBag.ErrorMessage = "An unexpected exception occurred."; + errorMessage = "An unexpected exception occurred."; } - return View("Profile", await GetProfileVM(user, model)); + return View("Profile", await GetProfileVM(user, model, errorMessage)); } - private async Task GetProfileVM(IUser user, ChangeProfileModel model = null) + private async Task GetProfileVM(IUser user, ChangeProfileModel model = null, string errorMessage = null, string successMessage = null) { var providers = signInManager.GetExternalAuthenticationSchemes() @@ -195,11 +189,13 @@ namespace Squidex.Controllers.UI.Profile { Id = user.Id, Email = user.Email, + ErrorMessage = errorMessage, ExternalLogins = user.Logins, ExternalProviders = providers, DisplayName = user.DisplayName(), HasPassword = await userManager.HasPasswordAsync(user), - HasPasswordAuth = identityOptions.Value.AllowPasswordAuth + HasPasswordAuth = identityOptions.Value.AllowPasswordAuth, + SuccessMessage = successMessage }; if (model != null) diff --git a/src/Squidex/Controllers/UI/Profile/ProfileVM.cs b/src/Squidex/Controllers/UI/Profile/ProfileVM.cs index c6b9f7c02..56cbe15e1 100644 --- a/src/Squidex/Controllers/UI/Profile/ProfileVM.cs +++ b/src/Squidex/Controllers/UI/Profile/ProfileVM.cs @@ -19,6 +19,10 @@ namespace Squidex.Controllers.UI.Profile public string DisplayName { get; set; } + public string ErrorMessage { get; set; } + + public string SuccessMessage { get; set; } + public bool HasPassword { get; set; } public bool HasPasswordAuth { get; set; } diff --git a/src/Squidex/Views/Profile/Profile.cshtml b/src/Squidex/Views/Profile/Profile.cshtml index e96704950..587ea7a86 100644 --- a/src/Squidex/Views/Profile/Profile.cshtml +++ b/src/Squidex/Views/Profile/Profile.cshtml @@ -15,17 +15,17 @@

Personal Information

- @if (!string.IsNullOrWhiteSpace(ViewBag.SuccessMessage)) + @if (!string.IsNullOrWhiteSpace(Model.SuccessMessage)) {
- @ViewBag.SuccessMessage + @Model.SuccessMessage
} - @if (!string.IsNullOrWhiteSpace(ViewBag.ErrorMessage)) + @if (!string.IsNullOrWhiteSpace(Model.ErrorMessage)) {
- @ViewBag.ErrorMessage + @Model.ErrorMessage
} @@ -74,56 +74,59 @@ -
-

Logins

- - - - - - - - @foreach (var login in Model.ExternalLogins) - { - - - - - - } -
- @login.LoginProvider - - @login.ProviderDisplayName - - @if (Model.ExternalLogins.Count > 1 || Model.HasPassword) - { -
- - - - -
- } -
- -
- @foreach (var provider in Model.ExternalProviders) - { - var schema = provider.AuthenticationScheme.ToLowerInvariant(); - - - } -
-
+ @if (Model.ExternalProviders.Any()) + { +
+

Logins

+ + + + + + + + @foreach (var login in Model.ExternalLogins) + { + + + + + + } +
+ @login.LoginProvider + + @login.ProviderDisplayName + + @if (Model.ExternalLogins.Count > 1 || Model.HasPassword) + { +
+ + + + +
+ } +
+ +
+ @foreach (var provider in Model.ExternalProviders.Where(x => !Model.ExternalLogins.Any(y => x.AuthenticationScheme == y.LoginProvider))) + { + var schema = provider.AuthenticationScheme.ToLowerInvariant(); + + + } +
+
+ } -
- @if (Model.HasPasswordAuth) - { + @if (Model.HasPasswordAuth) + { +

Password

@if (Model.HasPassword) @@ -207,8 +210,8 @@
} - } -
+ + }