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);
            }
        }
示例#2
0
 public static ChatMessage MapToChatMessage(this ChatMessageDispatch messageDispatch)
 {
     return(new ChatMessage()
     {
         MessageText = messageDispatch.MessageText,
         SentDate = messageDispatch.SentDate,
     });
 }
        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));
        }
示例#5
0
        public IHttpActionResult SendMessageIntoChat(Guid id, ChatMessageDispatch model)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            var chatMessage = model.MapToChatMessage();

            try
            {
                if (User.Identity.IsAuthenticated)     // User is an operator.
                {
                    chatMessage.SenderType = UserType.Operator;
                    var user = Request.GetOwinContext().GetUserManager <ApplicationUserManager>().FindById(User.Identity.GetUserId());
                    chatMessage.SenderName = user?.ScreenName;
                }
                else // User is anonymous
                {
                    chatMessage.SenderType = UserType.AnonymousUser;
                    chatMessage.SenderName = ChatService.GetScreenName(id);
                }
                // Add the message to our chat.
                ChatService.AddMessageToChat(id, chatMessage);
            }
            catch (ChatNotFoundException e)
            {
                return(Content(HttpStatusCode.NotFound, $"{e.Message}"));
            }
            catch (Exception e)
            {
                Logger.Error(e, $"{nameof(SendMessageIntoChat)} threw an exception: {e.Message}");

                return(InternalServerError());
            }

            var result = chatMessage.MapToChatMessageDTO();

            return(Ok(result));
        }