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_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_HTTP400_bad_request()
        {
            // Arrange
            var controller = new ChatsController(ChatService);

            // act
            // We pass controller action a null as userScreenName parameter to get a HTTP 400 bad request.
            IHttpActionResult result = controller.CreateChat(null);

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