public void ShouldThrowExceptionWhenSuccessfullyAddedChatButToUserIsNull()
        {
            var addDbResult = _chatMessages.FirstOrDefault();
            var getDbResult = _chatMessages.FirstOrDefault() ?? new ChatMessage();
            getDbResult.ToUser = null;

            var chatMessageParam = new Common.Contracts.ChatMessage
            {
                Id = 1,
                Text = "Lorem ipsum dolor sit amet",
                FromUser = new Common.Contracts.User
                {
                    Id = 1,
                    UserName = "******"
                },
                ToUser = new Common.Contracts.User
                {
                    Id = 2,
                    UserName = "******"
                }
            };

            _chatMessageRepository = new Mock<IChatMessageRepository>();
            _chatMessageRepository.Setup(a => a.Add(It.IsAny<ChatMessage>())).Returns(addDbResult);
            _chatMessageRepository.Setup(a => a.Find(It.IsAny<Expression<Func<ChatMessage, bool>>>(), null, It.IsAny<string>())).Returns(new List<ChatMessage> { getDbResult });

            _userRepository = new Mock<IUserRepository>();

            _chatMessagesLogic = new ChatMessagesLogic(_chatMessageRepository.Object, _userRepository.Object);

            var exception = Assert.Throws<BlogException>(() => _chatMessagesLogic.Add(chatMessageParam));

            Assert.AreEqual("Successfully created message but failed to get users related to the message.", exception.Message);
        }
        public void ShouldThrowExceptionWhenAddingChatMessageFails()
        {
            var chatMessageParam = new Common.Contracts.ChatMessage
            {
                Id = 1,
                Text = "Lorem ipsum dolor sit amet",
                FromUser = new Common.Contracts.User
                {
                    Id = 1,
                    UserName = "******"
                },
                ToUser = new Common.Contracts.User
                {
                    Id = 2,
                    UserName = "******"
                }
            };

            _chatMessageRepository = new Mock<IChatMessageRepository>();
            _chatMessageRepository.Setup(a => a.Add(It.IsAny<ChatMessage>())).Throws(new Exception());

            _userRepository = new Mock<IUserRepository>();

            _chatMessagesLogic = new ChatMessagesLogic(_chatMessageRepository.Object, _userRepository.Object);

            Assert.Throws<BlogException>(() => _chatMessagesLogic.Add(chatMessageParam));
        }
        public void ShouldThrowExceptionWhenGettingUserOnGetChatMessagesByNameFails()
        {
            _chatMessageRepository = new Mock<IChatMessageRepository>();
            _chatMessageRepository.Setup(a => a.GetChatMessages(It.IsAny<int>(), It.IsAny<int>(), It.IsAny<int>()))
                .Throws(new Exception());

            _userRepository = new Mock<IUserRepository>();
            _userRepository.Setup(a => a.Find(It.IsAny<Expression<Func<User, bool>>>(), false)).Throws(new Exception());

            _chatMessagesLogic = new ChatMessagesLogic(_chatMessageRepository.Object, _userRepository.Object);

            Assert.Throws<BlogException>(() => _chatMessagesLogic.GetChatMessagesByUser("FooBar", "Drums"));
        }
        public void ShouldAddChatMessage()
        {
            var dbResult = _chatMessages.FirstOrDefault();
            var chatMessageParam = new Common.Contracts.ChatMessage
            {
                Id = 1,
                Text = "Lorem ipsum dolor sit amet",
                FromUser = new Common.Contracts.User
                {
                    Id = 1,
                    UserName = "******"
                },
                ToUser = new Common.Contracts.User
                {
                    Id = 2,
                    UserName = "******"
                }
            };

            _chatMessageRepository = new Mock<IChatMessageRepository>();
            _chatMessageRepository.Setup(a => a.Add(It.IsAny<ChatMessage>())).Returns(dbResult);
            _chatMessageRepository.Setup(a => a.Find(It.IsAny<Expression<Func<ChatMessage, bool>>>(), null, It.IsAny<string>())).Returns(_chatMessages);

            _userRepository = new Mock<IUserRepository>();

            _chatMessagesLogic = new ChatMessagesLogic(_chatMessageRepository.Object, _userRepository.Object);

            var result = _chatMessagesLogic.Add(chatMessageParam);

            Assert.IsNotNull(result);
            Assert.IsNotNull(result.FromUser);
            Assert.IsNotNull(result.ToUser);
            Assert.IsInstanceOf(typeof(Common.Contracts.ChatMessage), result);
        }
        public void ShouldGetChatMessagesByName()
        {
            _chatMessageRepository = new Mock<IChatMessageRepository>();
            _chatMessageRepository.Setup(a => a.GetChatMessages(It.IsAny<int>(), It.IsAny<int>(), It.IsAny<int>()))
                .Returns(_chatMessages);

            _userRepository = new Mock<IUserRepository>();
            _userRepository.Setup(a => a.Find(It.IsAny<Expression<Func<User, bool>>>(), false)).Returns(_user);

            _chatMessagesLogic = new ChatMessagesLogic(_chatMessageRepository.Object, _userRepository.Object);

            var result = _chatMessagesLogic.GetChatMessagesByUser("FooBar", "Drums");

            Assert.IsNotNull(result);
            Assert.IsInstanceOf(typeof(List<Common.Contracts.ChatMessage>), result);
        }
        public void ShouldThrowExceptionWhenGettingToUserIsNullOnChatMessagesByName()
        {
            _chatMessageRepository = new Mock<IChatMessageRepository>();
            _chatMessageRepository.Setup(a => a.GetChatMessages(It.IsAny<int>(), It.IsAny<int>(), It.IsAny<int>()))
                .Returns(new List<ChatMessage>());

            _userRepository = new Mock<IUserRepository>();
            _userRepository.SetupSequence(a => a.Find(It.IsAny<Expression<Func<User, bool>>>(), false))
                .Returns(_user)
                .Returns(new List<User>());

            _chatMessagesLogic = new ChatMessagesLogic(_chatMessageRepository.Object, _userRepository.Object);

            var result = Assert.Throws<BlogException>(() => _chatMessagesLogic.GetChatMessagesByUser("FooBar", "Drums"));
            Assert.AreEqual("No user found with username Drums", result.Message);
        }
        public void ShouldReturnEmptyListWhenGettingChatMessagesByIdIsNull()
        {
            _chatMessageRepository = new Mock<IChatMessageRepository>();
            _chatMessageRepository.Setup(a => a.GetChatMessages(It.IsAny<int>(), It.IsAny<int>(), It.IsAny<int>()))
                .Returns(new List<ChatMessage>());

            _userRepository = new Mock<IUserRepository>();

            _chatMessagesLogic = new ChatMessagesLogic(_chatMessageRepository.Object, _userRepository.Object);

            var result = _chatMessagesLogic.GetChatMessagesByUser(1, 2);

            Assert.IsNotNull(result);
            Assert.IsInstanceOf(typeof(List<Common.Contracts.ChatMessage>), result);
            Assert.AreEqual(0, result.Count);
        }
        public void ShouldThrowExceptionWhenGettingChatMessagesByIdFails()
        {
            _chatMessageRepository = new Mock<IChatMessageRepository>();
            _chatMessageRepository.Setup(a => a.GetChatMessages(It.IsAny<int>(), It.IsAny<int>(), It.IsAny<int>()))
                .Throws(new Exception());

            _userRepository = new Mock<IUserRepository>();

            _chatMessagesLogic = new ChatMessagesLogic(_chatMessageRepository.Object, _userRepository.Object);

            Assert.Throws<BlogException>(() => _chatMessagesLogic.GetChatMessagesByUser(1, 2));
        }
        public void ShouldGetChatMessagesById()
        {
            _chatMessageRepository = new Mock<IChatMessageRepository>();
            _chatMessageRepository.Setup(a => a.GetChatMessages(It.IsAny<int>(), It.IsAny<int>(), It.IsAny<int>()))
                .Returns(_chatMessages);

            _userRepository = new Mock<IUserRepository>();

            _chatMessagesLogic = new ChatMessagesLogic(_chatMessageRepository.Object, _userRepository.Object);

            var result = _chatMessagesLogic.GetChatMessagesByUser(1, 2);

            Assert.IsNotNull(result);
            Assert.IsInstanceOf(typeof(List<Common.Contracts.ChatMessage>), result);
        }
        public void ShouldThrowExceptionWhenGettingChatListMessagesByNameFailsOnGettingChatList()
        {
            _chatMessageRepository = new Mock<IChatMessageRepository>();
            _chatMessageRepository.Setup(a => a.GetUserChatMessages(It.IsAny<int>())).Throws(new Exception());

            _userRepository = new Mock<IUserRepository>();
            _userRepository.Setup(a => a.Find(It.IsAny<Expression<Func<User, bool>>>(), false)).Returns(_user);

            _chatMessagesLogic = new ChatMessagesLogic(_chatMessageRepository.Object, _userRepository.Object);

            Assert.Throws<BlogException>(() => _chatMessagesLogic.GetChatMessagesListByUser("adhesive"));
        }
        public void ShouldGetErrorWhenGettingChatListMessagesByNameReturnsNull()
        {
            _chatMessageRepository = new Mock<IChatMessageRepository>();
            _chatMessageRepository.Setup(a => a.GetUserChatMessages(It.IsAny<int>())).Returns((List<UserChatMessage>)null);

            _userRepository = new Mock<IUserRepository>();
            _userRepository.Setup(a => a.Find(It.IsAny<Expression<Func<User, bool>>>(), false)).Returns(_user);

            _chatMessagesLogic = new ChatMessagesLogic(_chatMessageRepository.Object, _userRepository.Object);

            var result = _chatMessagesLogic.GetChatMessagesListByUser("adhesive");

            Assert.IsNotNull(result);
            Assert.IsInstanceOf(typeof(ChatMessagesList), result);
            Assert.IsNotNull(result.Error);
            Assert.AreEqual((int)Constants.Error.RecordNotFound, result.Error.Id);
            Assert.AreEqual("No chat messages found for user with Id 1", result.Error.Message);
        }
        public void ShouldGetChatListMessagesByName()
        {
            _chatMessageRepository = new Mock<IChatMessageRepository>();
            _chatMessageRepository.Setup(a => a.GetUserChatMessages(It.IsAny<int>())).Returns(_userChatMessages);

            _userRepository = new Mock<IUserRepository>();
            _userRepository.Setup(a => a.Find(It.IsAny<Expression<Func<User, bool>>>(), false)).Returns(_user);

            _chatMessagesLogic = new ChatMessagesLogic(_chatMessageRepository.Object, _userRepository.Object);

            var result = _chatMessagesLogic.GetChatMessagesListByUser("adhesive");

            Assert.IsNotNull(result);
            Assert.IsInstanceOf(typeof(ChatMessagesList), result);
            Assert.AreEqual(result.ChatMessageListItems.Count, 2);
        }
        public void ShouldGetChatListMessagesById()
        {
            _chatMessageRepository = new Mock<IChatMessageRepository>();
            _chatMessageRepository.Setup(a => a.GetUserChatMessages(It.IsAny<int>())).Returns(_userChatMessages);

            _userRepository = new Mock<IUserRepository>();

            _chatMessagesLogic = new ChatMessagesLogic(_chatMessageRepository.Object, _userRepository.Object);

            var result = _chatMessagesLogic.GetChatMessagesListByUser(1);

            Assert.IsNotNull(result);
            Assert.IsInstanceOf(typeof(ChatMessagesList), result);
            Assert.AreEqual(result.ChatMessageListItems.Count, 2);
        }