public async Task DeleteAccount_Failures()
        {
            var userName = "******";

            TestDataInitializer.CreateUser(userName);

            var user = TestHelper.SetPrincipal(userName);
            //username doesnt match
            var cmd = new DeleteAccountCommand(
                new Domain.Models.DeleteAccountOptions()
            {
                UserName        = userName,
                ConfirmUserName = "******"
            });
            var result = await cmd.Execute();

            Assert.IsFalse(result.Success, result.Message);

            //password doesn't match
            cmd = new DeleteAccountCommand(
                new Domain.Models.DeleteAccountOptions()
            {
                UserName        = userName,
                ConfirmUserName = userName,
                CurrentPassword = "******"
            });
            result = await cmd.Execute();

            Assert.IsFalse(result.Success, result.Message);

            //wrong user
            user = TestHelper.SetPrincipal("TestUser01");

            cmd = new DeleteAccountCommand(
                new Domain.Models.DeleteAccountOptions()
            {
                UserName        = userName,
                ConfirmUserName = userName,
                CurrentPassword = userName
            });
            result = await cmd.Execute();

            Assert.IsFalse(result.Success, result.Message);
        }
        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);
        }