static void Main(string[] args)
        {
            var consoleOutputManager = new ConsoleOutputManager();
            var timeProvider = new TimeProvider();
            var messageRepository = new MessagesRepository();
            var followingRepository = new FollowingRepository();

            consoleOutputManager.WriteLine("Welcome to RetroTwitter");
            consoleOutputManager.WriteLine();
            ShowInstructions(consoleOutputManager);
            consoleOutputManager.WriteLine();

            consoleOutputManager.WriteLine("What do you want to do today?");

            var commandFactory = new CommandCreatorsFactory(consoleOutputManager, timeProvider, messageRepository, followingRepository);
            while (true)
            {
                consoleOutputManager.Write(">");
                var commandString = consoleOutputManager.ReadLine();
                var command = commandFactory.ParseStringToCommand(commandString);
                if (command != null)
                {
                    command.Execute();
                }
                else
                {
                    consoleOutputManager.WriteLine("Sorry, I didn't catch that.");
                }
            }

            consoleOutputManager.WriteLine("RetroTwitter is terminating and all the collected data are being destroyed.");

            // ReSharper disable once FunctionNeverReturns
        }
        public void GetNonExistingUsersOk()
        {
            const string user1 = "user_A";
            var followingRepository = new FollowingRepository();

            var expected1 = new List<string>();
            var actual1 = followingRepository.Get(user1).ToList();
            CollectionAssert.AreEqual(expected1, actual1);
        }
        public void AddAndGetNewUserOk()
        {
            const string user1 = "user_A";
            const string user2 = "user_B";
            var followingRepository = new FollowingRepository();
            followingRepository.Add(user1, user2);

            var expected = new List<string> { user2 };
            var actual = followingRepository.Get(user1).ToList();

            CollectionAssert.AreEqual(expected, actual);
        }
        public void AddAndGetTwoNewUsersOk()
        {
            const string user1 = "user_A";
            const string user2 = "user_B";
            const string user3 = "user_C";
            var followingRepository = new FollowingRepository();

            followingRepository.Add(user1, user3);
            followingRepository.Add(user2, user3);

            var expected1 = new List<string> { user3 };
            var actual1 = followingRepository.Get(user1).ToList();
            CollectionAssert.AreEqual(expected1, actual1);

            var expected2 = new List<string> { user3 };
            var actual2 = followingRepository.Get(user1).ToList();
            CollectionAssert.AreEqual(expected2, actual2);
        }