public void FollowInvalidUserTest()
        {
            // act
            string input = "Charlie follows Alice";

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

            var follow = new Follow(_userManagerMock.Object);

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

            // assert
            Assert.AreEqual(actual, "Alice does not exists!");
        }
        public void FollowAlreadyFollowedUserTest()
        {
            // act
            string input = "Charlie follows Alice";

            var parent = new User { Username = "******" };
            var child = new User { Username = "******" };
            var children = new List<User> { child };

            _userManagerMock.Setup(x => x.GetUserByUsername(parent.Username, true)).Returns(parent);
            _userManagerMock.Setup(x => x.GetUserByUsername(child.Username, true)).Returns(child);
            _userManagerMock.Setup(x => x.CheckFollowerExists(parent, child)).Throws(new Exception("Alice already followed!"));

            var follow = new Follow(_userManagerMock.Object);

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

            // assert
            Assert.AreEqual(actual, "Alice already followed!");
        }
        public void FollowMultipleNewUserTest()
        {
            // act
            string input = "Charlie follows Alice";
            var parent = new User { Username = "******" };
            var child = new User { Username = "******" };

            _userManagerMock.Setup(x => x.GetUserByUsername(parent.Username, true)).Returns(parent);
            _userManagerMock.Setup(x => x.GetUserByUsername(child.Username, true)).Returns(child);
            _userManagerMock.Setup(x => x.CheckFollowerExists(parent, child));
            _userManagerMock.Setup(x => x.FollowUser(parent, child));

            var follow = new Follow(_userManagerMock.Object);

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

            // assert
            Assert.AreEqual(actual, string.Empty);
            _userManagerMock.Verify(x => x.FollowUser(parent, child), Times.Once);
        }