Esempio n. 1
0
        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 */));
        }
Esempio n. 4
0
        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 */));
        }
Esempio n. 5
0
        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"));
        }
Esempio n. 7
0
        public async Task <IActionResult> UpdateUserPreference([FromBody, Required] UpdateUserPreferencesCommand request)
        {
            await _mediator.Send(request);

            return(NoContent());
        }
Esempio n. 8
0
        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);
        }
Esempio n. 9
0
        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!!!!!!");
            }
        }