public void UpdateUnreadMessageCount_Messages_ReturnUnreadMessageCount(int messageCount, int unreadCount)
        {
            // Arrange
            var messagesController = this.CreateMessagesController(true);
            //recipient sender
            var user = new ApplicationUser()
            {
                UserName = "******",
                Email    = "*****@*****.**"
            };

            mockadvert_siteContext.Users.Add(user);
            mockadvert_siteContext.SaveChanges();

            int counter = 0;

            //create messages
            for (int i = 0; i < messageCount; i++)
            {
                var msg = new Messages()
                {
                    DateSent = DateTime.Now,
                    Subject  = "TestMsg" + i,
                    Text     = "yo" + i
                };
                mockadvert_siteContext.Messages.Add(msg);
                mockadvert_siteContext.SaveChanges();

                var userHasMsg = new UsersHasMessages()
                {
                    MessagesId     = msg.Id,
                    RecipientId    = fakeUser.Id,
                    SenderId       = user.Id,
                    IsDeleted      = 0,
                    IsAdminMessage = 0,
                    AlreadyRead    = 1
                };

                if (counter < unreadCount)
                {
                    userHasMsg.AlreadyRead = 0;
                    counter++;
                }

                mockadvert_siteContext.UsersHasMessages.Add(userHasMsg);
                mockadvert_siteContext.SaveChanges();
            }

            // Act
            var result = messagesController.UpdateUnreadMessageCount();

            // Assert
            Assert.Equal(unreadCount, result);
        }
        public async Task Inbox_Messages_ReturnUserMessagesView(int msgCount)
        {
            // Arrange
            var messagesController = this.CreateMessagesController(true);

            //create sender
            var user = new ApplicationUser()
            {
                UserName = "******",
                Email    = "*****@*****.**"
            };

            mockadvert_siteContext.Users.Add(user);
            mockadvert_siteContext.SaveChanges();

            //create messages
            for (int i = 0; i < msgCount; i++)
            {
                var msg = new Messages()
                {
                    DateSent = DateTime.Now,
                    Subject  = "TestMsg" + i,
                    Text     = "yo" + i
                };
                mockadvert_siteContext.Messages.Add(msg);
                mockadvert_siteContext.SaveChanges();

                var userHasMsg = new UsersHasMessages()
                {
                    MessagesId  = msg.Id,
                    RecipientId = fakeUser.Id,
                    SenderId    = user.Id,
                    IsDeleted   = 0
                };


                mockadvert_siteContext.UsersHasMessages.Add(userHasMsg);
                mockadvert_siteContext.SaveChanges();
            }

            // Act
            var result = await messagesController.Inbox();

            var viewResult = (ViewResult)result;
            var messages   = (IEnumerable <UsersHasMessages>)viewResult.Model;

            // Assert
            Assert.IsType <ViewResult>(result);
            Assert.Equal(msgCount, messages.Count());
        }
        public async Task Details_MessageId_OpenSelectedMessageView()
        {
            // Arrange
            var messagesController = this.CreateMessagesController(true);

            //create sender
            var user = new ApplicationUser()
            {
                UserName = "******",
                Email    = "*****@*****.**"
            };

            mockadvert_siteContext.Users.Add(user);
            mockadvert_siteContext.SaveChanges();

            //add msg
            var msgToAdd = new Messages()
            {
                DateSent = DateTime.Now,
                Subject  = "TefstMsg",
                Text     = "yoeqragh"
            };

            mockadvert_siteContext.Messages.Add(msgToAdd);
            mockadvert_siteContext.SaveChanges();

            var userHasMsg = new UsersHasMessages()
            {
                MessagesId  = msgToAdd.Id,
                RecipientId = fakeUser.Id,
                SenderId    = user.Id,
                IsDeleted   = 0
            };

            mockadvert_siteContext.UsersHasMessages.Add(userHasMsg);
            mockadvert_siteContext.SaveChanges();

            // Act
            var result = await messagesController.Details(msgToAdd.Id);

            var viewResult = (ViewResult)result;
            var addedMsg   = (Messages)viewResult.Model;

            // Assert
            Assert.IsType <ViewResult>(result);
            Assert.Equal(msgToAdd.Id, addedMsg.Id);
            Assert.Equal(msgToAdd.Text, addedMsg.Text);
            Assert.Equal(msgToAdd.Subject, addedMsg.Subject);
        }
        public async Task Delete_Message_DeleteMessage()
        {
            // Arrange
            var messagesController = this.CreateMessagesController(true);

            //add recipient
            var recipientUser = new ApplicationUser()
            {
                Email    = "*****@*****.**",
                UserName = "******"
            };

            mockadvert_siteContext.Add(recipientUser);

            //add msg
            var msg = new Messages()
            {
                Subject = "Delete me",
                Text    = "LOL"
            };

            mockadvert_siteContext.Add(msg);
            mockadvert_siteContext.SaveChanges();

            var userHasMsg = new UsersHasMessages()
            {
                MessagesId  = msg.Id,
                RecipientId = recipientUser.Id,
                SenderId    = fakeUser.Id,
                IsDeleted   = 0
            };

            mockadvert_siteContext.UsersHasMessages.Add(userHasMsg);
            mockadvert_siteContext.SaveChanges();


            // Act
            var result = await messagesController.Delete(
                userHasMsg.MessagesId,
                userHasMsg.SenderId,
                userHasMsg.RecipientId);

            // Assert
            Assert.Equal((short)1, userHasMsg.IsDeleted);
        }
        public async Task Create_Message_SendMessage()
        {
            // Arrange
            var messagesController = this.CreateMessagesController(true);

            var userRecipient = new ApplicationUser()
            {
                Email    = "*****@*****.**",
                UserName = "******"
            };

            mockadvert_siteContext.Users.Add(userRecipient);
            mockadvert_siteContext.SaveChanges();

            var msg = new Messages()
            {
                Subject = "Helo",
                Text    = "Sup"
            };


            var userHasMsgs = new UsersHasMessages()
            {
                IsDeleted   = 0,
                MessagesId  = msg.Id,
                RecipientId = userRecipient.Id,
                Sender      = fakeUser,
                Messages    = msg
            };
            var model = new CreateMessageModel()
            {
                Message          = msg,
                RecipientId      = userRecipient.Id,
                UsersHasMessages = userHasMsgs
            };

            // Act
            var result = await messagesController.Create(model);

            var redirResult = (RedirectToActionResult)result;

            // Assert
            Assert.IsType <RedirectToActionResult>(result);
            Assert.Equal(nameof(messagesController.Index), redirResult.ActionName);
        }
        public async Task MarkAsRead_Message_MarkMessageAsRead()
        {
            // Arrange
            var messagesController = this.CreateMessagesController(true);
            var user = new ApplicationUser()
            {
                UserName = "******",
                Email    = "*****@*****.**"
            };

            mockadvert_siteContext.Users.Add(user);

            var msg = new UsersHasMessages()
            {
                Messages = new Messages()
                {
                    Subject = "Test Subject",
                    Text    = "Test Text"
                },
                RecipientId    = this.fakeUser.Id,
                SenderId       = user.Id,
                IsAdminMessage = 0,
                AlreadyRead    = 0,
                IsDeleted      = 0
            };

            mockadvert_siteContext.UsersHasMessages.Add(msg);

            mockadvert_siteContext.SaveChanges();

            // Act
            var result = await messagesController.MarkAsRead(msg.MessagesId, user.Id, fakeUser.Id);

            var userMessage = mockadvert_siteContext.UsersHasMessages.FirstOrDefault(x => x.MessagesId == msg.MessagesId && user.Id.Equals(x.SenderId) && fakeUser.Id.Equals(x.RecipientId));

            // Assert
            Assert.IsType <RedirectToActionResult>(result);
            Assert.True(userMessage.AlreadyRead == 1);
        }