public void InvalidMessage2()
        {
            Message m = new Message { ReceiverId = 1, Title = "This could be a title for a message", Content = "The content for a message could look like this" };

            db.Messages.Add(m);
            db.SaveChanges();
        }
        public ActionResult MaakBericht(Mail berichtje)
        {
            // Kijk of de persoon is ingelogd
            if (!User.Identity.IsAuthenticated)
                ModelState.AddModelError("", "Je moet ingelogd zijn om een berichtje te versturen.");
            // get info of our current user
            var userSending = from userSend in db.Users
                              where userSend.UserName.ToLower() == User.Identity.Name.ToLower()
                              select userSend;
            // get info of the user to send to
            var userTo = from toUser in db.Users
                         where toUser.UserName == berichtje.SendTo
                         select toUser;
            // check if the user gave valid stuff back
            if (userTo.Count() != 1 || berichtje.SendTo == null)
                ModelState.AddModelError("", "De ingevoerde gebruiker bestaat niet.");

            if (ModelState.IsValid)
            {
                // if so create the message
                Message newMessage = new Message() { SenderId = userSending.First().UserID, Title = berichtje.Title, ReceiverId = userTo.First().UserID, Content = berichtje.Content };
                db.Messages.Add(newMessage);
                db.SaveChanges();
                return RedirectToAction("inbox", "user");
            }
            return View();
        }
        //
        // GET: /Vraag/Delete/ID
        public ActionResult Delete(int id)
        {
            // check if we are logged in
            if (User.Identity.IsAuthenticated)
            {
                // get our rank
                int userRank = (from user in db.Users
                                where user.UserName == User.Identity.Name
                                select user.Rank).Single();
                // get the question which we are trying to delete
                var questionDelete = (from vraag in db.Questions
                                        where vraag.QuestionID == id
                                        select vraag);
                // check if the rank is right and we got a right question
                if (userRank >= 3 && questionDelete.Count() == 1)
                {
                    // Allowed to delete a question
                    // so let's select the question
                    var questionToDelete = questionDelete.First();
                    // let's select the person who made this question
                    var userMetaPoster = (from userMeta in db.UserMeta
                                          where userMeta.UserId == questionToDelete.UserId
                                          select userMeta).Single();
                    // lower the amount of questions asked by this person with one
                    userMetaPoster.Questions -= 1;
                    // delete the question
                    db.Questions.Remove(questionToDelete);
                    // get all the question tags which were linked with this question
                    var questionTagsDelete = from questionTag in db.QuestionTags
                                             where questionTag.QuestionId == id
                                             select questionTag;
                    // get all the flaggs on this question
                    var flags = from flag in db.Flags
                                where flag.QuestionID == id
                                select flag;
                    // delete each
                    foreach (var flag in flags)
                        db.Flags.Remove(flag);

                    // get all the votes on the question
                    var votes = from vote in db.Votes
                                where vote.QuestionID == id
                                select vote;
                    // remove each
                    foreach (var vote in votes)
                        db.Votes.Remove(vote);

                    // go through all the tags linking to this question
                    foreach (var vraagTag in questionTagsDelete)
                    {
                        // get the tag of this question
                        var tags = (from tagjes in db.Tags
                                   where tagjes.TagID == vraagTag.TagId
                                   select tagjes).Single();
                        // lower the amount of questions in this tag with one
                        tags.Count -= 1;
                        // remove this QuestionTag
                        db.QuestionTags.Remove(vraagTag);
                    }

                    // get all the awnsers given to this question
                    var antwoorden = from antwoord in db.Answers
                                     where antwoord.QuestionId == id
                                     select antwoord;
                    // Loopt through them
                    foreach (var antwoordje in antwoorden)
                    {
                        // get all the comments on this awnser
                        var commentsOnAwnser = from comments in db.Comments
                                               where comments.AnswerId == antwoordje.AnswerID
                                               select comments;
                        // get all the votes on this answer
                        var answerVotes = from answerVote in db.Votes
                                          where answerVote.AnswerID == antwoordje.AnswerID
                                          select answerVote;
                        // delete those
                        foreach (var vote in answerVotes)
                            db.Votes.Remove(vote);
                        // delete each comment
                        foreach (var deleteComment in commentsOnAwnser)
                        {
                            // get all the flags on this comment
                            var flagsComment = from flagCom in db.Flags
                                               where flagCom.CommentID == deleteComment.CommentID
                                               select flagCom;
                            // delete each comment flag
                            foreach (var flag in flagsComment)
                                db.Flags.Remove(flag);
                            // remove the actual comment
                            db.Comments.Remove(deleteComment);
                        }
                        // get the stuff of the person who made this awnser
                        var antwoordMeta = (from metaAntwoord in db.UserMeta
                                            where metaAntwoord.UserId == antwoordje.UserId
                                            select metaAntwoord).Single();
                        // lower the amount of awnser of this person with one
                        antwoordMeta.Answers -= 1;
                        // remove the awnser
                        db.Answers.Remove(antwoordje);
                    }
                    // Get all the comments on this question
                    var questionComments = from deleteQuestionComment in db.Comments
                                           where deleteQuestionComment.QuestionId == id
                                           select deleteQuestionComment;
                    // Remove each one of them
                    foreach (var commentQuestion in questionComments)
                    {
                        // get the flags on this question
                        var flagsQuestion = from flagque in db.Flags
                                           where flagque.CommentID == commentQuestion.CommentID
                                           select flagque;
                        // delete those
                        db.Comments.Remove(commentQuestion);
                    }
                    // get the other stuff of the user who is deleting
                    var userDeleting = (from usertje in db.Users
                                       where usertje.UserName == User.Identity.Name
                                       select usertje).Single();
                    // send a message to notify the delete
                    Message newMessage = new Message()
                    {
                        Title = "Een vraag van u is verwijderd",
                        Created_At = StringToDateTime.ToUnixTimeStamp(DateTime.Now),
                        Content = "De volgende vraag is verwijderd:"
                        + questionToDelete.Title + ". \n\nIndien u vragen heeft over het verwijderen van dit bericht kunt u een reactie op dit bericht versturen. \n\nDit bericht is verwijderd door: "
                        + userDeleting.UserName + " \n\nWe wensen u nog een fijne dag.", ReceiverId = questionToDelete.UserId, SenderId = userDeleting.UserID };
                    // add the new message to the db
                    db.Messages.Add(newMessage);
                    // save the database
                    db.SaveChanges();
                    // show a succes message
                    ViewBag.Message = "De vraag is succesvol verwijderd.";
                }
                else
                {
                    ViewBag.Message = "U mag geen vragen verwijderen of de vraag bestaat niet.";
                }

            }
            else
            {
                ViewBag.Message = "U bent niet ingelogd";
            }
            if (Request.UrlReferrer.AbsolutePath.Contains("vraag"))
                return RedirectToAction("index", "default");
            else
                return Redirect(Request.UrlReferrer.AbsolutePath);
        }
        public void InvalidMessage4()
        {
            Message m = new Message { SenderId = 1, ReceiverId = 2, QuestionId = 1, Title = "This could be a title for a message", Content = "Too short" };

            db.Messages.Add(m);
            db.SaveChanges();
        }
        public void InvalidMessage3()
        {
            Message m = new Message { SenderId = 1, ReceiverId = 2, QuestionId = 1, Title = "Too short", Content = "The content for a message could look like this" };

            db.Messages.Add(m);
            db.SaveChanges();
        }
 public void DefaultsForMessage()
 {
     Message testMessage = new Message();
     Assert.IsNotNull(testMessage.Created_At, "Datum van aanmaken mag niet null zijn");
     Assert.IsTrue(testMessage.Created_At == StringToDateTime.ToUnixTimeStamp(DateTime.Now), "De Datum zou gelijk moeten zijn aan de DateTime.Now.ToString()");
 }
        public void InvalidMessage5()
        {
            Message m = new Message { SenderId = 1, ReceiverId = 2, QuestionId = 1, Title = "This is not a valid title, that is because a title for a message has a maximum of 140 characters, this one has a few more the 140 characters.", Content = "The content for a message could look like this" };

            db.Messages.Add(m);
            db.SaveChanges();
        }
        //
        // GET: /Answer/Delete/AnswerID
        public ActionResult Delete(int id)
        {
            // Get the infor of the answer which should be deleted
            var AnswerDelete = from answerDelete in db.Answers
                               where answerDelete.AnswerID == id
                               select answerDelete;
            // and get the rank of this user
            int userRank = (from user in db.Users
                            where user.UserName == User.Identity.Name
                            select user.Rank).Single();
            // if we found no answer of the rank is not right skip deleting
            if (AnswerDelete.Count() == 1 && userRank >= 2)
            {
                // delete this awnser
                var AwnserToDelete = AnswerDelete.First();
                // remove the answer
                db.Answers.Remove(AwnserToDelete);
                // get all the votes on it
                var answerVotes = from answerVote in db.Votes
                                  where answerVote.AnswerID == id
                                  select answerVote;
                // loop through it and delete each
                foreach (var vote in answerVotes)
                    db.Votes.Remove(vote);
                // get all the flags on a answer
                var flags = from flag in db.Flags
                            where flag.AnswerID == id
                            select flag;
                // loop through it and delete each
                foreach (var flag in flags)
                    db.Flags.Remove(flag);
                // get the comments
                var commentsAwnsers = from comment in db.Comments
                                      where comment.AnswerId == id
                                      select comment;
                // and delete em
                foreach (var comment in commentsAwnsers)
                {
                    db.Comments.Remove(comment);
                    // get the possible flags on this comment
                    var CommentFlag = from flag in db.Flags
                                      where flag.CommentID == comment.CommentID
                                      select flag;
                    // delete each flag
                    foreach (var comFlag in CommentFlag)
                        db.Flags.Remove(comFlag);
                }
                // lower the amount of answers given by this person with one
                var userMetaAwnser = (from user in db.UserMeta
                                     where user.UserId == AwnserToDelete.UserId
                                     select user).Single();
                userMetaAwnser.Answers -= 1;

                // get some stuff for generating a message
                var userDeleting = (from usertje in db.Users
                                    where usertje.UserName == User.Identity.Name
                                    select usertje).Single();
                string questionTitle = (from vraag in db.Questions
                                        where vraag.QuestionID == AwnserToDelete.QuestionId
                                        select vraag.Title).Single();
                // Create the message
                Message newMessage = new Message()
                {
                    Title = "Uw antwoord is verwijderd op een vraag",
                    ReceiverId = AwnserToDelete.UserId,
                    SenderId = userDeleting.UserID,
                    Created_At = StringToDateTime.ToUnixTimeStamp(DateTime.Now),
                    Content = "Uw antwoord op de vraag " + questionTitle + " is verwijderd door " + userDeleting.UserName + ". Indien u meer wilt weten over de rede " +
                        "kunt u reageren op dit bericht. Deze word dan verstuurd naar de persoon die hem verwijderd heeft. We wensen u nog een fijne dag."
                };
                // add it to the db
                db.Messages.Add(newMessage);
                // and save
                db.SaveChanges();
            }
            // should return us to the page we were at
            return Redirect(Request.UrlReferrer.AbsolutePath);
        }