示例#1
0
        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);
            }
        }
示例#5
0
        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;
            }
        }
示例#6
0
        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);
        }
示例#7
0
        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);
        }
示例#8
0
        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;
            }
        }