public void FilmLookup_async_fetches_ids_in_background()
 {
     AsyncContext.Run(async () =>
     {
         var idLookupService = new FilmLookupService(new MockHttpService(""));
         string result = await idLookupService.LookupAsync("Superman", (l) => new LookupChoice("tt0078346"));
         Assert.AreEqual("tt0078346", result);
     });
 }
 public void FilmLookup_handles_timeout_by_passing_status()
 {
     var exception = new System.Net.WebException("The operation has timed out", System.Net.WebExceptionStatus.Timeout);
     var result = new FilmLookupService(new MockHttpService(s => { throw exception; })).Search("The Usual Status");
     var message = result.FailureMessage();
     Assert.IsTrue(message.Contains("timed out"));
     Assert.IsTrue(message.Contains("myapifilms"));
     Assert.IsTrue(message.Contains("Usual"));
 }
 public void FilmLookup_returns_null_if_callback_tells_it_to_give_up()
 {
     string imdbId = new FilmLookupService(new MockHttpService(MyApiFilmsResponse)).Lookup(filmName, (l) => new LookupChoice(LookupChoice.Action.GiveUp));
     Assert.IsNull(imdbId);
 }
 public void FilmLookup_returns_id_chosen_by_callback()
 {
     LookupResult pick = null;
     string imdbId = new FilmLookupService(new MockHttpService(MyApiFilmsResponse)).Lookup(filmName, (lookup) => {
         pick = lookup.Results.ElementAt(new Random().Next(0, lookup.Results.Count - 1));
         return new LookupChoice(pick);
     });
     Assert.AreEqual(imdbId, pick.ImdbId);
 }
 public void FilmLookup_provides_title_to_callback()
 {
     string query = "";
     string imdbId = new FilmLookupService(new MockHttpService(MyApiFilmsResponse)).Lookup(filmName, (lookup) => { query = lookup.Query; return new LookupChoice(LookupChoice.Action.GiveUp); });
     Assert.AreEqual(filmName, query);
 }
 public void Search_returns_multiple_results_for_ambiguous_titles()
 {
     var results = new FilmLookupService(new MockHttpService(FullMyApiFilmsResponse)).Search("Italian Job").Results;
     Assert.IsTrue(results.Count >= 2);
 }
 public void Search_sorts_results_by_score()
 {
     var results = new FilmLookupService(new MockHttpService(MatrixResultsWithSpoofResponse)).Search("The Matrix 1999").Results;
     var ids = results.Select(r => r.ImdbId).ToList();
     Assert.AreEqual(ids.First(), "tt0133093");
     Assert.AreEqual(ids.Last(), "tt0274085");
 }
 public void Search_returns_an_empty_list_when_no_results_found()
 {
     //"This is a movie which doesn't exist and never will unless someone reads this an makes one to prove a point"
     var results = new FilmLookupService(new MockHttpService("{\"code\":110,\"message\":\"Movie not found\"}")).Search("32498238409").Results;
     Assert.IsTrue(results.Count == 0);
 }
 public void Search_gets_a_correct_imdb_id()
 {
     var results = new FilmLookupService(new MockHttpService(FullMyApiFilmsResponse)).Search("Italian Job").Results;
     var ids = results.Select(r => r.ImdbId).ToList();
     CollectionAssert.Contains(ids, "tt0064505");
 }
 public void Search_filters_titles_before_using_them()
 {
     var results = new FilmLookupService(new MockHttpService(url => {
         if (url.Contains("Directors"))
         {
             throw new Exception("Search was not filtered and tried to call url '"+url+"'");
         }
         else
         {
             return MyApiFilmsResponse;
         }
     })).Search("Italian.Job.1969.Directors.Cut");
 }
 public void Search_doesnt_throw_exception_when_internet_down()
 {
     var results = new FilmLookupService(new MockHttpService(s => { throw new System.Net.WebException("Internet down"); })).Search("32498238409").Results;
     Assert.IsTrue(results.Count == 0);
 }
 public void FilmLookup_searches_again_for_new_title_given_by_callback()
 {
     int attempt = 0;
     string imdbId = new FilmLookupService(new MockHttpService(url => (url.Contains("Superman")) ? MyApiFilmsSupermanResponse : MyApiFilmsResponse)).Lookup("Superman", (lookup) => {
         attempt++;
         return (attempt == 1) ? new LookupChoice(LookupChoice.Action.NewSearch, filmName) : new LookupChoice(lookup.Results.First());
     });
     Assert.AreEqual("tt0064505", imdbId);
 }