public string GetScreenName(Guid chatId) { string userScreenName = string.Empty; try { using (var context = new EEChatDataContext(ConnectionString)) { var chat = context.Chats.Find(chatId); // If we don't find the chat by ID throw exception. if (chat == null) { throw new ChatNotFoundException($"The chat wihh ID ${chatId} cannot be found."); } userScreenName = chat.UserScreenName; } } catch (Exception e) { Logger.Error(e, $"{nameof(GetScreenName)} threw an exception: {e.Message}"); throw e; } return(userScreenName); }
public void ChatsControllerTest_CreateChat_HTTP409_conflict() { // Arrange var controller = new ChatsController(ChatService); 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 // We pass controller action the same user screen name we with which created a chat above. IHttpActionResult result = controller.CreateChat(uniqueUserScreenName); var conflictResult = result as NegotiatedContentResult <string>; // Assert Assert.IsNotNull(conflictResult); Assert.AreEqual(HttpStatusCode.Conflict, conflictResult.StatusCode); context.Chats.Remove(chat); } }
public void ChatsControllerTest_CreateChat_HTTP200() { // Arrange var controller = new ChatsController(ChatService); string uniqueUserScreenName = "unique user screen name" + Guid.NewGuid().ToString(); // act IHttpActionResult result = controller.CreateChat(uniqueUserScreenName); var createdResult = result as CreatedNegotiatedContentResult <ChatDTO>; // Assert Assert.IsNotNull(createdResult); Assert.AreEqual(new Uri($"/api/chats/{createdResult.Content.Id}", UriKind.Relative), createdResult.Location); Assert.AreEqual(uniqueUserScreenName, createdResult.Content.UserScreenName); Assert.IsTrue(DateTime.Now.Subtract(createdResult.Content.CreatedDateTime).TotalMilliseconds <= 5000); // Db test //Test data is persisted into database as expected. var expected = new Chat() { Id = createdResult.Content.Id, UserScreenName = createdResult.Content.UserScreenName, }; Chat actual = null; using (var context = new EEChatDataContext(ConnectionString)) { actual = context.Chats.Find(createdResult.Content.Id); Assert.IsNotNull(actual); Assert.AreEqual(expected, actual); context.Chats.Remove(actual); } }
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 AddMessageToChat(Guid chatId, ChatMessage message) { try { using (var context = new EEChatDataContext(ConnectionString)) { var chat = context.Chats.Find(chatId); // If we don't find the chat by ID throw exception. if (chat == null) { throw new ChatNotFoundException($"The chat wihh ID ${chatId} cannot be found."); } message.ChatId = chat.Id; context.ChatMessages.Add(message); // If chat is not active, yet, set it as we added a message to it. if (chat.IsActive == false) { chat.IsActive = true; } chat.LastMessageCreatedDateTime = message.CreatedDate; // If an operator sent the message the chat is regarded as answered, if an anonymous user, it's regarded as unanswered. // So a chat may change unanswered to answered or vice versa depending on which type of user sent the message. if (message.SenderType == UserType.Operator && chat.IsAnswered == false) { chat.IsAnswered = true; } else if (message.SenderType == UserType.AnonymousUser && chat.IsAnswered == true) { chat.IsAnswered = false; } context.SaveChanges(); } } catch (Exception e) { Logger.Error(e, $"{nameof(AddMessageToChat)} threw an exception: {e.Message}"); throw e; } }
public IList <Chat> GetChatList() { List <Chat> chatList = new List <Chat>(); try { using (var context = new EEChatDataContext(ConnectionString)) { chatList = context.Chats. Where(c => (c.IsActive == true) && (c.IsAnswered == false)) .ToList(); } } catch (Exception e) { Logger.Error(e, $"{nameof(GetChatList)} threw an exception: {e.Message}"); throw e; } return(chatList); }
public Chat GetChat(Guid chatId, DateTime?from = null) { Chat chat = null; try { using (var context = new EEChatDataContext(ConnectionString)) { chat = context.Chats.Find(chatId); // If we don't find the chat by ID throw exception. if (chat == null) { throw new ChatNotFoundException($"The chat wihh ID ${chatId} cannot be found."); } var query = context.Entry(chat).Collection(c => c.Messages) .Query(); if (from != null) // Filter by CreatedDate { query.Where(m => m.CreatedDate > from) .OrderBy(m => m.CreatedDate); } else { query.OrderBy(m => m.CreatedDate); } query.Load(); } } catch (Exception e) { Logger.Error(e, $"{nameof(GetChat)} threw an exception: {e.Message}"); throw e; } return(chat); }
public void CreateChat(Chat chat) { try { using (var context = new EEChatDataContext(ConnectionString)) { // Before create the chat we ensure that the given screen name is not in use. if (context.Chats.Any(c => c.UserScreenName == chat.UserScreenName)) { throw new ScreenNameInUseException($"The following screen name is already in use: {chat.UserScreenName}"); } context.Chats.Add(chat); context.SaveChanges(); } } catch (Exception e) { Logger.Error(e, $"{nameof(CreateChat)} threw an exception: {e.Message}"); throw e; } }