public void ChatsControllerTest_SendMessageIntoChat_HTTP200()
        {
            // Arrange
            var    controller      = new ChatsController(ChatService);
            string testMessage     = "Test message text";
            var    messageDispatch = new ChatMessageDispatch()
            {
                MessageText = testMessage,
                SentDate    = DateTime.Now,
            };

            string uniqueUserScreenName = "unique user screen name" + Guid.NewGuid().ToString();
            Chat   chat = null;

            using (var context = new EEChatDataContext(ConnectionString))
            {
                // Create a chat
                chat = new Chat()
                {
                    UserScreenName = uniqueUserScreenName,
                };

                context.Chats.Add(chat);
                context.SaveChanges();
            }

            // act
            IHttpActionResult result = controller.SendMessageIntoChat(chat.Id, messageDispatch);
            var okResult             = result as OkNegotiatedContentResult <ChatMessageDTO>;

            // Assert
            Assert.IsNotNull(okResult);
            Assert.AreEqual(messageDispatch.MessageText, okResult.Content.MessageText);
            Assert.AreEqual(messageDispatch.SentDate, okResult.Content.SentDate);
            Assert.IsTrue(DateTime.Now.Subtract(okResult.Content.CreatedDate).TotalMilliseconds <= 5000);

            // Db test
            //Test data is persisted into database as expected.
            var expected = new ChatMessage()
            {
                Id          = okResult.Content.Id,
                MessageText = okResult.Content.MessageText,
                ChatId      = chat.Id,
            };

            using (var context = new EEChatDataContext(ConnectionString))
            {
                var actual = context.ChatMessages.Find(okResult.Content.Id);

                Assert.IsNotNull(actual);
                Assert.AreEqual(expected, actual);
                // Test whether related chat has become active.
                var chatRelated = context.Chats.Find(actual.ChatId);
                Assert.IsNotNull(chatRelated);
                Assert.IsTrue(chatRelated.IsActive);

                context.Chats.Remove(chatRelated);
            }
        }
        public void ChatsControllerTest_SendMessageIntoChat_HTTP404()
        {
            // Arrange
            var    controller      = new ChatsController(ChatService);
            string testMessage     = "Test message text";
            var    messageDispatch = new ChatMessageDispatch()
            {
                MessageText = testMessage,
                SentDate    = DateTime.Now,
            };

            // act
            // We pass controller action a random chat ID, that we suppose not to be found.
            IHttpActionResult result = controller.SendMessageIntoChat(Guid.NewGuid(), messageDispatch);
            var notFoundResult       = result as NegotiatedContentResult <string>;

            // Assert
            Assert.IsNotNull(notFoundResult);
            Assert.AreEqual(HttpStatusCode.NotFound, notFoundResult.StatusCode);
        }
        public void ChatsControllerTest_SendMessageIntoChat_HTTP409_bad_request()
        {
            // Arrange
            var    controller      = new ChatsController(ChatService);
            string testMessage     = null;
            var    messageDispatch = new ChatMessageDispatch()
            {
                MessageText = testMessage,
                SentDate    = DateTime.Now,
            };

            // act
            // We pass controller action an invalid model.
            controller.Request       = new HttpRequestMessage();
            controller.Configuration = new HttpConfiguration();
            controller.Validate(messageDispatch);
            IHttpActionResult result = controller.SendMessageIntoChat(Guid.NewGuid(), messageDispatch);

            // Assert
            Assert.IsInstanceOfType(result, typeof(InvalidModelStateResult));
        }