public async Task UpdateUserPreferences() { var userName = "******"; var bio = Guid.NewGuid().ToString(); var user = TestHelper.SetPrincipal(userName); var q = new QueryUserPreferences(userName).SetUserContext(user); var prefs = await q.ExecuteAsync(); Assert.IsNotNull(prefs, "Pref query returned null"); Assert.AreNotEqual(prefs.Bio, bio, "Bio returned unexpected data"); var cmd = new UpdateUserPreferencesCommand(new Domain.Models.UserPreferenceUpdate() { Bio = bio }).SetUserContext(user); var r = await cmd.Execute(); VoatAssert.IsValid(r); q = new QueryUserPreferences(userName).SetUserContext(user); prefs = await q.ExecuteAsync(); Assert.IsNotNull(prefs, "Pref requery returned null"); Assert.AreEqual(prefs.Bio, bio, "Bio not updated"); }
/// <summary> /// Handling the "update" event of user preferences /// </summary> /// <param name="request">The command object that contains all the properties to update user preference.</param> /// <param name="cancellationToken">Token to cancel the operation.</param> public async Task <Unit> Handle(UpdateUserPreferencesCommand request, CancellationToken cancellationToken) { _unitOfWork.BeginTransaction(); try { var userPreferenceUpdation = _mapper.Map <UserPreferences>(request); if (userPreferenceUpdation.UserPreferencesSetup != null) { await _userPreferencesRepository.UpdateUserPreferencesSetup(userPreferenceUpdation.UserPreferencesSetup); } _unitOfWork.Commit(); _logger.LogInformation("User preference updated successfully"); return(Unit.Value); } catch { _unitOfWork.Rollback(); throw; } }
public async Task <ActionResult> ToggleNightMode() { var q = new QueryUserPreferences().SetUserContext(User); var preferences = await q.ExecuteAsync(); var newPreferences = new Domain.Models.UserPreferenceUpdate(); newPreferences.NightMode = !preferences.NightMode; var cmd = new UpdateUserPreferencesCommand(newPreferences).SetUserContext(User); var result = await cmd.Execute(); string newTheme = newPreferences.NightMode.Value ? "dark" : "light"; //// save changes //using (var db = new VoatUIDataContextAccessor()) //{ // var userPreferences = GetUserPreference(db); // userPreferences.NightMode = !userPreferences.NightMode; // await db.SaveChangesAsync(); // newTheme = userPreferences.NightMode ? "dark" : "light"; //} UserHelper.SetUserStylePreferenceCookie(HttpContext, newTheme); Response.StatusCode = 200; return(Json("Toggled Night Mode" /* CORE_PORT: Removed , JsonRequestBehavior.AllowGet */)); }
public async Task <ActionResult> ToggleNightMode() { var q = new QueryUserPreferences().SetUserContext(User); Task <Domain.Models.UserPreference> taskPreferences; taskPreferences = q.ExecuteAsync(); Domain.Models.UserPreference lpreferences; lpreferences = await taskPreferences; UserPreferenceUpdate newPreferences; newPreferences = new Domain.Models.UserPreferenceUpdate(); Domain.Models.UserPreference preferences; preferences = lpreferences; newPreferences.NightMode = !preferences.NightMode; var cmd = new UpdateUserPreferencesCommand(newPreferences).SetUserContext(User); Task <CommandResponse> taskResult; taskResult = cmd.Execute(); CommandResponse result; result = await taskResult; string newTheme = newPreferences.NightMode.Value ? "dark" : "light"; UserHelper.SetUserStylePreferenceCookie(HttpContext, newTheme); _statuscode = 200; Response.StatusCode = _statuscode; return(Json("Toggled Night Mode" /* CORE_PORT: Removed , JsonRequestBehavior.AllowGet */)); }
public async Task UpdateUserPreferences() { var userName = "******"; var bio = Guid.NewGuid().ToString(); TestHelper.SetPrincipal(userName); var q = new QueryUserPreferences(userName); var prefs = await q.ExecuteAsync(); Assert.IsNotNull(prefs, "Pref query returned null"); Assert.AreNotEqual(prefs.Bio, bio, "Bio returned unexpected data"); var cmd = new UpdateUserPreferencesCommand(new Domain.Models.UserPreference() { Bio = bio }); var result = await cmd.Execute(); Assert.IsNotNull(result, "UpdatePref command returned null"); Assert.AreEqual(true, result.Success, "UpdatePref command returned non success"); q = new QueryUserPreferences(userName); prefs = await q.ExecuteAsync(); Assert.IsNotNull(prefs, "Pref requery returned null"); Assert.AreEqual(prefs.Bio, bio, "Bio not updated"); }
public async Task <ActionResult> UserPreferences(Domain.Models.UserPreferenceUpdate model) { ViewBag.UserName = User.Identity.Name; if (!ModelState.IsValid) { return(View("Manage", model)); } var cmd = new UpdateUserPreferencesCommand(model).SetUserContext(User); var result = await cmd.Execute(); if (result.Success) { var newTheme = model.NightMode.Value ? "dark" : "light"; UserHelper.SetUserStylePreferenceCookie(HttpContext, newTheme); } //// save changes //string newTheme; //using (var db = new VoatUIDataContextAccessor()) //{ // var userPreferences = GetUserPreference(db); // // modify existing preferences // userPreferences.DisableCSS = model.Disable_custom_css; // userPreferences.NightMode = model.Night_mode; // userPreferences.OpenInNewWindow = model.OpenLinksInNewTab; // userPreferences.EnableAdultContent = model.Enable_adult_content; // userPreferences.DisplaySubscriptions = model.Public_subscriptions; // userPreferences.UseSubscriptionsMenu = model.Topmenu_from_subscriptions; // await db.SaveChangesAsync(); // newTheme = userPreferences.NightMode ? "dark" : "light"; //} //ClearUserCache(); //UserHelper.SetUserStylePreferenceCookie(newTheme); return(RedirectToAction("Manage")); }
public async Task <IActionResult> UpdateUserPreference([FromBody, Required] UpdateUserPreferencesCommand request) { await _mediator.Send(request); return(NoContent()); }
public async Task DeleteAccount_Basic() { //EnsureBadges using (var db = new VoatDataContext()) { if (!db.Badge.Any(x => x.ID == "deleted")) { db.Badge.Add(new Badge() { ID = "deleted", Name = "Account Deleted", Graphic = "deleted.png", Title = "deleted" }); } if (!db.Badge.Any(x => x.ID == "deleted2")) { db.Badge.Add(new Badge() { ID = "deleted2", Name = "Account Deleted", Graphic = "deleted2.png", Title = "deleted" }); } if (!db.Badge.Any(x => x.ID == "donor_upto_30")) { db.Badge.Add(new Badge() { ID = "donor_upto_30", Name = "Donor Up To Thirty", Graphic = "donor30.png", Title = "Donor" }); } db.SaveChanges(); } var userName = "******"; TestDataInitializer.CreateUser(userName); var user = TestHelper.SetPrincipal(userName); DeleteAccountCommand cmd; CommandResponse result; var options = new Domain.Models.DeleteAccountOptions() { UserName = userName, ConfirmUserName = userName, CurrentPassword = userName, Comments = Domain.Models.DeleteOption.Anonymize, LinkSubmissions = Domain.Models.DeleteOption.Anonymize, TextSubmissions = Domain.Models.DeleteOption.Anonymize }; var submission = TestHelper.ContentCreation.CreateSubmission(options.UserName, new Domain.Models.UserSubmission() { Subverse = SUBVERSES.Unit, Title = "Test Submission Yeah", Content = "Test Submission Content" }); var comment = TestHelper.ContentCreation.CreateComment(options.UserName, submission.ID, "This is a test comment"); //Anon it all cmd = new DeleteAccountCommand(options).SetUserContext(user); result = await cmd.Execute(); VoatAssert.IsValid(result); VerifyDelete(options); userName = "******"; TestDataInitializer.CreateUser(userName); user = TestHelper.SetPrincipal(userName); using (var db = new VoatDataContext()) { //Trying to trap a bug with a user not getting delete badge db.UserBadge.Add(new Voat.Data.Models.UserBadge() { BadgeID = "donor_upto_30", CreationDate = DateTime.UtcNow, UserName = userName }); db.SaveChanges(); } options = new Domain.Models.DeleteAccountOptions() { UserName = userName, ConfirmUserName = userName, CurrentPassword = userName, Comments = Domain.Models.DeleteOption.Delete, LinkSubmissions = Domain.Models.DeleteOption.Delete, TextSubmissions = Domain.Models.DeleteOption.Delete }; submission = TestHelper.ContentCreation.CreateSubmission(options.UserName, new Domain.Models.UserSubmission() { Subverse = SUBVERSES.Unit, Title = "Test Submission Yeah", Content = "Test Submission Content" }); comment = TestHelper.ContentCreation.CreateComment(options.UserName, submission.ID, "This is a test comment"); //Delete cmd = new DeleteAccountCommand(options).SetUserContext(user); result = await cmd.Execute(); VoatAssert.IsValid(result); VerifyDelete(options); userName = "******"; TestDataInitializer.CreateUser(userName); user = TestHelper.SetPrincipal(userName); //Need to ensure delete clears preferences var prefUpdate = new UpdateUserPreferencesCommand(new Domain.Models.UserPreferenceUpdate() { Bio = "My Bio" }).SetUserContext(user); var p = await prefUpdate.Execute(); VoatAssert.IsValid(p); using (var db = new VoatDataContext()) { var prefs = db.UserPreference.FirstOrDefault(x => x.UserName == userName); Assert.IsNotNull(prefs, "Expected user to have preference record at this stage"); prefs.Avatar = userName + ".jpg"; //Add badges to prevent duplicates db.UserBadge.Add(new Voat.Data.Models.UserBadge() { BadgeID = "deleted", CreationDate = DateTime.UtcNow, UserName = userName }); db.UserBadge.Add(new Voat.Data.Models.UserBadge() { BadgeID = "deleted2", CreationDate = DateTime.UtcNow, UserName = userName }); db.SaveChanges(); } options = new Domain.Models.DeleteAccountOptions() { UserName = userName, ConfirmUserName = userName, CurrentPassword = userName, Comments = Domain.Models.DeleteOption.Delete, LinkSubmissions = Domain.Models.DeleteOption.Delete, TextSubmissions = Domain.Models.DeleteOption.Delete, RecoveryEmailAddress = "*****@*****.**", ConfirmRecoveryEmailAddress = "*****@*****.**", Reason = "I need a break from the racialists" }; submission = TestHelper.ContentCreation.CreateSubmission(options.UserName, new Domain.Models.UserSubmission() { Subverse = SUBVERSES.Unit, Title = "Test Submission Yeah", Content = "Test Submission Content" }); comment = TestHelper.ContentCreation.CreateComment(options.UserName, submission.ID, "This is a test comment"); //Delete cmd = new DeleteAccountCommand(options).SetUserContext(user); result = await cmd.Execute(); VoatAssert.IsValid(result); VerifyDelete(options); }
public async Task MentionUser_Anon_Block_Test() { string user1 = "UnitTestUser13"; string user2 = "BlocksAnonTestUser01"; TestDataInitializer.CreateUser(user2); var user = TestHelper.SetPrincipal(user2); var prefCmd = new UpdateUserPreferencesCommand(new Domain.Models.UserPreferenceUpdate() { BlockAnonymized = true }).SetUserContext(user); var prefResult = await prefCmd.Execute(); VoatAssert.IsValid(prefResult); //Submission Mention - NO NO user = TestHelper.SetPrincipal(user1); var anonSubmission = TestHelper.ContentCreation.CreateSubmission(user1, new Domain.Models.UserSubmission() { Title = $"I'm harrassing @{user2}!", Content = $"Hey everyone isn't /u/{user2} a shill tornado?", Subverse = SUBVERSES.Anon }); Assert.IsNotNull(anonSubmission, "Couldn't create test submission"); Assert.AreNotEqual(0, anonSubmission.ID, "Doesn't appear we have a valid submission id"); using (var db = new VoatDataContext()) { var count = db.Message.Where(x => x.Sender == user1 && x.Recipient == user2 && x.SubmissionID == anonSubmission.ID && x.IsAnonymized == true && x.Type == (int)Domain.Models.MessageType.SubmissionMention ).Count(); Assert.AreEqual(0, count, "Expecting No Submission Mentions!"); } //Comment Mention - NO NO string commentContent = $"Hello @{user2}, I am mentioning you in an anon thread because I want to make you feel scared"; var cmd = new CreateCommentCommand(anonSubmission.ID, null, commentContent).SetUserContext(user); var result = await cmd.Execute(); VoatAssert.IsValid(result); using (var db = new VoatDataContext()) { var count = db.Message.Where(x => x.Sender == user1 && x.Recipient == user2 && x.CommentID == result.Response.ID && x.IsAnonymized == true && x.Type == (int)Domain.Models.MessageType.CommentMention ).Count(); Assert.AreEqual(0, count, "Received duplicates and now users are annoyed and burning down the village! Run!"); } //Comment Reply - YES YES user = TestHelper.SetPrincipal(user2); commentContent = $"I'm {user2} won't someone reply to me so I can see if reply notifications work?"; cmd = new CreateCommentCommand(anonSubmission.ID, null, commentContent).SetUserContext(user); result = await cmd.Execute(); VoatAssert.IsValid(result); user = TestHelper.SetPrincipal(user1); commentContent = $"I'm following you!"; cmd = new CreateCommentCommand(anonSubmission.ID, result.Response.ID, commentContent).SetUserContext(user); result = await cmd.Execute(); VoatAssert.IsValid(result); using (var db = new VoatDataContext()) { var count = db.Message.Where(x => x.Sender == user1 && x.Recipient == user2 && x.CommentID == result.Response.ID && x.IsAnonymized == true && x.Type == (int)Domain.Models.MessageType.CommentReply ).Count(); Assert.AreEqual(1, count, "Replies should work!!!!!!"); } //Submission Reply - YES YES user = TestHelper.SetPrincipal(user2); anonSubmission = TestHelper.ContentCreation.CreateSubmission(user2, new Domain.Models.UserSubmission() { Title = $"Is this working?", Content = $"Someeone, anyone, am I alone?", Subverse = SUBVERSES.Anon }); Assert.IsNotNull(anonSubmission, "Couldn't create test submission"); Assert.AreNotEqual(0, anonSubmission.ID, "Doesn't appear we have a valid submission id"); user = TestHelper.SetPrincipal(user1); commentContent = $"I know who you are and I've been following you this entire unit test. I might be in love with you, if stalking is a form of love."; cmd = new CreateCommentCommand(anonSubmission.ID, null, commentContent).SetUserContext(user); result = await cmd.Execute(); VoatAssert.IsValid(result); using (var db = new VoatDataContext()) { var count = db.Message.Where(x => x.Sender == user1 && x.Recipient == user2 && x.SubmissionID == anonSubmission.ID && x.IsAnonymized == true && x.Type == (int)Domain.Models.MessageType.SubmissionReply ).Count(); Assert.AreEqual(1, count, "Replies should work!!!!!!"); } }