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 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)); }
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)); }