public void QuoteRetreiverSetup()
 {
     _environmentInfoProvider = new Mock<IEnvironmentInfoProvider>();
     _fileDataProvider = new Mock<IFileDataProvider>();
     _quoteRetriever = new QuoteRetriever(_environmentInfoProvider.Object, _fileDataProvider.Object);
 }
        public YammerCommandFetcher(IRandomNumberGenerator randomNumberGenerator, 
                                    IYammerMessagePoster poster, 
                                    IQuoteRetriever quoteRetriever, 
                                    IComplimentFetcher complimentFetcher,
                                    IDictionaryService dictionaryService)
        {
            _randomNumberGenerator = randomNumberGenerator;
            _poster = poster;
            _quoteRetriever = quoteRetriever;
            _complimentFetcher = complimentFetcher;
            _dictionaryService = dictionaryService;
            _allCommands = new Dictionary<string, Func<Message, Message>>
                                  {
                                      {
                                          "randomquote", (message) =>
                                                             {
                                                                 string quote = null;
                                                                 try
                                                                 {
                                                                     quote = _quoteRetriever.GetNextQuote();
                                                                 }
                                                                 finally
                                                                 {
                                                                     if (quote == null)
                                                                         quote = "I don't have any more quotes...";
                                                                 }
                                                                 return _poster.PostReply(quote, message.ID);
                                                             }
                                      },
                                      {
                                          "tellmetofuckoff", (message) =>
                                                                 {
                                                                     return _poster.PostReply("F**k off", message.ID);
                                                                 }
                                      },
                                      {
                                          "help", (message) =>
                                                      {
                                                          return _poster.PostReply(
                                                              "@@RandomQuote gives a random quote, @@TellMeToFuckOff tells you to f**k off, @@CatFacts will send you a random cat fact",
                                                              message.ID);
                                                      }
                                      },
                                      {
                                          "catfacts", (message) =>
                                                          {
                                                              var responses = new Dictionary<int, string>
                                                                                  {
                                                                                      {0, "Cats have 9 lives"},
                                                                                      {1, "Cats are cute"},
                                                                                      {2, "Cats just don't give a f**k"}
                                                                                  };
                                                              var selectedResponse =
                                                                  responses[_randomNumberGenerator.GetRandomInt32(0, 3)];
                                                              return _poster.PostReply(selectedResponse, message.ID);
                                                          }
                                      },
                                      {
                                          "whispersweetnothingstome", (message) =>
                                                          {
                                                              return _poster.PostReply(_complimentFetcher.GetRandomComplimentPhrase(), message.ID);
                                                          }
                                      },
                                      {
                                          "sexify", (message) =>
                                                          {
                                                              var cmd = new Command(message.Body.Plain);
                                                              var wordDefinitions = cmd.Argument.Split(' ')
                                                                                       .Select(word => WordProcessor.NormalizeWord(word))
                                                                                       .Aggregate(new Dictionary<string,IEnumerable<string>>(),(accum, word) =>
                                                                                                   {
                                                                                                       if (!accum.Keys.Contains(word))
                                                                                                           accum.Add(word, _dictionaryService.GetDefinitions(word));
                                                                                                       return accum;
                                                                                                   });

                                                              return _poster.PostReply(WordProcessor.Sexify(cmd.Argument, wordDefinitions), message.ID);
                                                          }
                                      },
                                  };
        }