public void Setup() { JsonConvert.DefaultSettings = () => new JsonSerializerSettings { Converters = new List <JsonConverter> { new OptionJsonConverter() } }; _dataNull = new TvDbEpisodeSummaryData(1, "Test", Option <long> .None, 1, 2, 2, new DateTime(2007, 10, 6), "Overview"); _dataNonNull = new TvDbEpisodeSummaryData(1, "Test", 5L, 1, 2, 2, new DateTime(2007, 10, 6), "Overview"); }
public async Task GetEpisodesAsync_MultiPageResponse_RequestsAllPages() { var page1Episode = new TvDbEpisodeSummaryData(1, "Test1", 1L, 2, 3, 4, new DateTime(2017, 1, 2, 3, 4, 5), "Overview"); var page1EpisodeDetail = new TvDbEpisodeData(1, "Test", 1L, 2, 3, 4, new DateTime(2017, 1, 2, 3, 4, 5), "Overview", 33.4f, 12); var page2Episode = new TvDbEpisodeSummaryData(2, "Test2", 5L, 6, 7, 8, new DateTime(2017, 1, 2, 3, 4, 5), "Overview"); var page2EpisodeDetail = new TvDbEpisodeData(2, "Test2", 5L, 6, 7, 8, new DateTime(2017, 1, 2, 3, 4, 5), "Overview", 33.4f, 12); this.jsonConnection .GetAsync(Arg.Is <GetEpisodesRequest>(r => r.Url == "https://api.thetvdb.com/series/4/episodes?page=1"), Arg.Any <Option <string> >()) .Returns(new Response <GetEpisodesRequest.Response>(new GetEpisodesRequest.Response( new[] { page1Episode }, new GetEpisodesRequest.PageLinks(1, 2, 2, Option <int> .None)))); this.jsonConnection.GetAsync(Arg.Is <GetEpisodeDetailsRequest>(r => r.Url.EndsWith("1")), Arg.Any <Option <string> >()) .Returns(new Response <GetEpisodeDetailsRequest.Response>( new GetEpisodeDetailsRequest.Response(page1EpisodeDetail))); this.jsonConnection .GetAsync(Arg.Is <GetEpisodesRequest>(r => r.Url == "https://api.thetvdb.com/series/4/episodes?page=2"), Arg.Any <Option <string> >()) .Returns(new Response <GetEpisodesRequest.Response>(new GetEpisodesRequest.Response( new[] { page2Episode }, new GetEpisodesRequest.PageLinks(2, 2, Option <int> .None, 1)))); this.jsonConnection.GetAsync(Arg.Is <GetEpisodeDetailsRequest>(r => r.Url.EndsWith("2")), Arg.Any <Option <string> >()) .Returns(new Response <GetEpisodeDetailsRequest.Response>( new GetEpisodeDetailsRequest.Response(page2EpisodeDetail))); var tvDbClient = new TvDbClientV2(this.jsonConnection, this.fileCache, this.applicationPaths, this.logManager, new JsonSerialiser(), new PluginConfiguration()); await tvDbClient.GetEpisodesAsync(4); await this.jsonConnection.Received(1) .GetAsync(Arg.Is <GetEpisodesRequest>(r => r.Url == "https://api.thetvdb.com/series/4/episodes?page=1"), Arg.Any <Option <string> >()); await this.jsonConnection.Received(1) .GetAsync(Arg.Is <GetEpisodesRequest>(r => r.Url == "https://api.thetvdb.com/series/4/episodes?page=2"), Arg.Any <Option <string> >()); await this.jsonConnection.ReceivedWithAnyArgs(2) .GetAsync <GetEpisodeDetailsRequest.Response>(null, Option <string> .None); }
public async Task GetEpisodeAsync_NoLocalEpisodeData_ReturnsNewEpisodeData() { var episode = new TvDbEpisodeSummaryData(1, "Test", 1L, 2, 3, 4, new DateTime(2017, 1, 2, 3, 4, 5), "Overview"); var episodeDetail = new TvDbEpisodeData(1, "Test", 1L, 2, 3, 4, new DateTime(2017, 1, 2, 3, 4, 5), "Overview", 33.4f, 12); this.jsonConnection.GetAsync(Arg.Any <GetEpisodesRequest>(), Arg.Any <Option <string> >()) .Returns(new Response <GetEpisodesRequest.Response>(new GetEpisodesRequest.Response(new[] { episode }, new GetEpisodesRequest.PageLinks(1, 1, Option <int> .None, Option <int> .None)))); this.jsonConnection.GetAsync(Arg.Any <GetEpisodeDetailsRequest>(), Arg.Any <Option <string> >()) .Returns(new Response <GetEpisodeDetailsRequest.Response>( new GetEpisodeDetailsRequest.Response(episodeDetail))); var tvDbClient = new TvDbClientV2(this.jsonConnection, this.fileCache, this.applicationPaths, this.logManager, new JsonSerialiser(), new PluginConfiguration()); var episodes = await tvDbClient.GetEpisodesAsync(4); episodes.IsSome.Should().BeTrue(); episodes.ValueUnsafe().Should().BeEquivalentTo(new[] { episodeDetail }); }
public async Task GetEpisodeAsync_NoLocalEpisodeData_SavesNewEpisodeData() { var episode = new TvDbEpisodeSummaryData(1, "Test", 1L, 2, 3, 4, new DateTime(2017, 1, 2, 3, 4, 5), "Overview"); var episodeDetail = new TvDbEpisodeData(1, "Test", 1L, 2, 3, 4, new DateTime(2017, 1, 2, 3, 4, 5), "Overview", 33.4f, 12); this.jsonConnection.GetAsync(Arg.Any <GetEpisodesRequest>(), Arg.Any <Option <string> >()) .Returns(new Response <GetEpisodesRequest.Response>(new GetEpisodesRequest.Response(new[] { episode }, new GetEpisodesRequest.PageLinks(1, 1, Option <int> .None, Option <int> .None)))); this.jsonConnection.GetAsync(Arg.Any <GetEpisodeDetailsRequest>(), Arg.Any <Option <string> >()) .Returns(new Response <GetEpisodeDetailsRequest.Response>( new GetEpisodeDetailsRequest.Response(episodeDetail))); var tvDbClient = new TvDbClientV2(this.jsonConnection, this.fileCache, this.applicationPaths, this.logManager, new JsonSerialiser(), new PluginConfiguration()); await tvDbClient.GetEpisodesAsync(4); this.fileCache.Received(1) .SaveFile(Arg.Any <TvDbSeriesEpisodesFileSpec>(), Arg.Is <TvDbEpisodeCollection>(d => d.Episodes.Single() == episodeDetail)); }
public async Task GetEpisodeAsync_NoLocalEpisodeData_RequestsEpisodeData() { var episode = new TvDbEpisodeSummaryData(1, "Test", 1L, 2, 3, 4, new DateTime(2017, 1, 2, 3, 4, 5), "Overview"); var episodeDetail = new TvDbEpisodeData(1, "Test", 1L, 2, 3, 4, new DateTime(2017, 1, 2, 3, 4, 5), "Overview", 33.4f, 12); _jsonConnection.GetAsync(Arg.Any <GetEpisodesRequest>(), Arg.Any <Option <string> >()) .Returns(new Response <GetEpisodesRequest.Response>(new GetEpisodesRequest.Response(new[] { episode }, new GetEpisodesRequest.PageLinks(1, 1, Option <int> .None, Option <int> .None)))); _jsonConnection.GetAsync(Arg.Any <GetEpisodeDetailsRequest>(), Arg.Any <Option <string> >()) .Returns(new Response <GetEpisodeDetailsRequest.Response>( new GetEpisodeDetailsRequest.Response(episodeDetail))); var tvDbClient = new TvDbClient(_jsonConnection, _fileCache, _applicationPaths, _logManager, new JsonSerialiser(), new PluginConfiguration()); await tvDbClient.GetEpisodesAsync(4); _jsonConnection.ReceivedWithAnyArgs(1) .GetAsync <GetEpisodesRequest.Response>(null, Option <string> .None); _jsonConnection.ReceivedWithAnyArgs(1) .GetAsync <GetEpisodeDetailsRequest.Response>(null, Option <string> .None); }
public async Task GetEpisodesAsync_MultiPageResponse_SavesAllPagesConcatenated() { var page1Episode = new TvDbEpisodeSummaryData(1, "Test1", 1L, 2, 3, 4, new DateTime(2017, 1, 2, 3, 4, 5), "Overview"); var page1EpisodeDetail = new TvDbEpisodeData(1, "Test", 1L, 2, 3, 4, new DateTime(2017, 1, 2, 3, 4, 5), "Overview", 33.4f, 12); var page2Episode = new TvDbEpisodeSummaryData(2, "Test2", 5L, 6, 7, 8, new DateTime(2017, 1, 2, 3, 4, 5), "Overview"); var page2EpisodeDetail = new TvDbEpisodeData(2, "Test2", 5L, 6, 7, 8, new DateTime(2017, 1, 2, 3, 4, 5), "Overview", 33.4f, 12); _jsonConnection .GetAsync(Arg.Is <GetEpisodesRequest>(r => r.Url == "https://api.thetvdb.com/series/4/episodes?page=1"), Arg.Any <Option <string> >()) .Returns(new Response <GetEpisodesRequest.Response>(new GetEpisodesRequest.Response( new[] { page1Episode }, new GetEpisodesRequest.PageLinks(1, 2, 2, Option <int> .None)))); _jsonConnection.GetAsync(Arg.Is <GetEpisodeDetailsRequest>(r => r.Url.EndsWith("1")), Arg.Any <Option <string> >()) .Returns(new Response <GetEpisodeDetailsRequest.Response>( new GetEpisodeDetailsRequest.Response(page1EpisodeDetail))); _jsonConnection .GetAsync(Arg.Is <GetEpisodesRequest>(r => r.Url == "https://api.thetvdb.com/series/4/episodes?page=2"), Arg.Any <Option <string> >()) .Returns(new Response <GetEpisodesRequest.Response>(new GetEpisodesRequest.Response( new[] { page2Episode }, new GetEpisodesRequest.PageLinks(2, 2, Option <int> .None, 1)))); _jsonConnection.GetAsync(Arg.Is <GetEpisodeDetailsRequest>(r => r.Url.EndsWith("2")), Arg.Any <Option <string> >()) .Returns(new Response <GetEpisodeDetailsRequest.Response>( new GetEpisodeDetailsRequest.Response(page2EpisodeDetail))); var tvDbClient = new TvDbClient(_jsonConnection, _fileCache, _applicationPaths, _logManager, new JsonSerialiser(), new PluginConfiguration()); await tvDbClient.GetEpisodesAsync(4); _fileCache.Received(1) .SaveFile(Arg.Any <TvDbSeriesEpisodesFileSpec>(), Arg.Is <TvDbEpisodeCollection>(d => d.Episodes.SequenceEqual(new[] { page1EpisodeDetail, page2EpisodeDetail }))); }
public async Task GetEpisodesAsync_MultiPageResponse_ReturnsAllPagesConcatenated() { var page1Episode = new TvDbEpisodeSummaryData(1, "Test1", 1L, 2, 3, 4, new DateTime(2017, 1, 2, 3, 4, 5), "Overview"); var page1EpisodeDetail = new TvDbEpisodeData(1, "Test", 1L, 2, 3, 4, new DateTime(2017, 1, 2, 3, 4, 5), "Overview", 33.4f, 12); var page2Episode = new TvDbEpisodeSummaryData(2, "Test2", 5L, 6, 7, 8, new DateTime(2017, 1, 2, 3, 4, 5), "Overview"); var page2EpisodeDetail = new TvDbEpisodeData(2, "Test2", 5L, 6, 7, 8, new DateTime(2017, 1, 2, 3, 4, 5), "Overview", 33.4f, 12); _jsonConnection .GetAsync(Arg.Is <GetEpisodesRequest>(r => r.Url == "https://api.thetvdb.com/series/4/episodes?page=1"), Arg.Any <Option <string> >()) .Returns(new Response <GetEpisodesRequest.Response>(new GetEpisodesRequest.Response( new[] { page1Episode }, new GetEpisodesRequest.PageLinks(1, 2, 2, Option <int> .None)))); _jsonConnection.GetAsync(Arg.Is <GetEpisodeDetailsRequest>(r => r.Url.EndsWith("1")), Arg.Any <Option <string> >()) .Returns(new Response <GetEpisodeDetailsRequest.Response>( new GetEpisodeDetailsRequest.Response(page1EpisodeDetail))); _jsonConnection .GetAsync(Arg.Is <GetEpisodesRequest>(r => r.Url == "https://api.thetvdb.com/series/4/episodes?page=2"), Arg.Any <Option <string> >()) .Returns(new Response <GetEpisodesRequest.Response>(new GetEpisodesRequest.Response( new[] { page2Episode }, new GetEpisodesRequest.PageLinks(2, 2, Option <int> .None, 1)))); _jsonConnection.GetAsync(Arg.Is <GetEpisodeDetailsRequest>(r => r.Url.EndsWith("2")), Arg.Any <Option <string> >()) .Returns(new Response <GetEpisodeDetailsRequest.Response>( new GetEpisodeDetailsRequest.Response(page2EpisodeDetail))); var tvDbClient = new TvDbClient(_jsonConnection, _fileCache, _applicationPaths, _logManager, new JsonSerialiser(), new PluginConfiguration()); var episodes = await tvDbClient.GetEpisodesAsync(4); episodes.IsSome.Should().BeTrue(); episodes.ValueUnsafe().Should().BeEquivalentTo(page1EpisodeDetail, page2EpisodeDetail); }