public void DisplayInvalidUserWallTest()
        {
            // act
            string input = "Alice";

            _userManagerMock.Setup(x => x.GetUserByUsername("Alice", true)).Throws(new NullReferenceException("Alice does not exists!"));

            var wall = new Wall(_userManagerMock.Object, _messageManagerMock.Object);

            // actual
            var actual = wall.Perform(input);

            // assert
            Assert.AreEqual(actual, "Alice does not exists!");
        }
        public void DisplayUserWallHasMessagesAndFollowersMessagesTest()
        {
            // act
            string input = "Charlie";
            var user = new User { UserId = Guid.NewGuid(), Username = input };
            var userMessages = new List<Message>
            {
                new Message
                {
                    Description = "I’m in New York today! Anyone wants to have a coffee?",
                    PostedDt = DateTime.UtcNow.AddSeconds(-15),
                    UserId = user.UserId
                }
            };

            var child = new User { UserId = Guid.NewGuid(), Username = "******" };
            var followers = new List<User> { child };
            var followersMessages = new List<Message>
            {
                new Message
                {
                    Description = "Good game though.",
                    PostedDt = DateTime.UtcNow.AddMinutes(-1),
                    UserId = child.UserId
                },
                new Message
                {
                    Description = "Damn! We lost!",
                    PostedDt = DateTime.UtcNow.AddMinutes(-2),
                    UserId = child.UserId
                }
            };

            var output = new StringBuilder();
            output.AppendLine("Charlie - I’m in New York today! Anyone wants to have a coffee? (15 second(s) ago)");
            output.AppendLine("Bob - Good game though. (1 minute(s) ago)");
            output.AppendLine("Bob - Damn! We lost! (2 minute(s) ago)");

            _userManagerMock.Setup(x => x.GetUserByUsername("Charlie", true)).Returns(user);
            _messageManagerMock.Setup(x => x.GetMessages(user)).Returns(userMessages);
            _userManagerMock.Setup(x => x.GetFollowers(user)).Returns(followers);
            _messageManagerMock.Setup(x => x.GetMessages(child)).Returns(followersMessages);
            _userManagerMock.Setup(x => x.GetUserByUserId(user.UserId, true)).Returns(user);
            _userManagerMock.Setup(x => x.GetUserByUserId(child.UserId, true)).Returns(child);

            var wall = new Wall(_userManagerMock.Object, _messageManagerMock.Object);

            // actual
            var actual = wall.Perform(input);

            // assert
            Assert.AreEqual(actual, output.ToString());
            _userManagerMock.VerifyAll();
            _messageManagerMock.VerifyAll();
        }
        public void DisplayUserWallHasNoMessagesAndNoFollowersTest()
        {
            // act
            string input = "Alice";
            var user = new User { UserId = Guid.NewGuid(), Username = input };
            var userMessages = new List<Message>();

            _userManagerMock.Setup(x => x.GetUserByUsername("Alice", true)).Returns(user);
            _messageManagerMock.Setup(x => x.GetMessages(user)).Returns(userMessages);

            var wall = new Wall(_userManagerMock.Object, _messageManagerMock.Object);

            // actual
            var actual = wall.Perform(input);

            // assert
            Assert.AreEqual(actual, string.Empty);
        }
        public void DisplayUserWallHasNoMessagesAndHasFollowersWithMessagesTest()
        {
            // act
            string input = "Alice";
            var user = new User { UserId = Guid.NewGuid(), Username = input };
            var child = new User { UserId = Guid.NewGuid(), Username = "******" };
            var userMessages = new List<Message>();

            var followers = new List<User> {child};
            var followersMessages = new List<Message> { new Message
            {
                Description = "Good game though.",
                PostedDt = DateTime.UtcNow.AddMinutes(-1),
                UserId = child.UserId
            } };

            var output = new StringBuilder();
            output.AppendLine("Bob - Good game though. (1 minute(s) ago)");

            _userManagerMock.Setup(x => x.GetUserByUsername("Alice", true)).Returns(user);
            _messageManagerMock.Setup(x => x.GetMessages(user)).Returns(userMessages);
            _userManagerMock.Setup(x => x.GetFollowers(user)).Returns(followers);
            _messageManagerMock.Setup(x => x.GetMessages(child)).Returns(followersMessages);
            _userManagerMock.Setup(x => x.GetUserByUserId(child.UserId, true)).Returns(child);

            var wall = new Wall(_userManagerMock.Object, _messageManagerMock.Object);

            // actual
            var actual = wall.Perform(input);

            // assert
            Assert.AreEqual(actual, output.ToString());
            _userManagerMock.VerifyAll();
            _messageManagerMock.VerifyAll();
        }