def test_clear_When_struckout_not_empty_Then_empties_struckout_and_forwards_to_delegate(self): # Setup provider = OneStrikeAndYoureOutFanartProvider(self.platform, self.delegate, self.nextProvider) provider.struckOut[self.program.title()] = self.program.title() # Test provider.clear() # Verify self.assertFalse(len(provider.struckOut)) verify(self.delegate, times=1).clear(any())
def test_getPosters_When_not_struck_out_and_delegate_returns_posters_Then_return_posters(self): # Setup provider = OneStrikeAndYoureOutFanartProvider(self.platform, self.delegate, self.nextProvider) when(self.delegate).getPosters(any()).thenReturn(['blah.png']) # Test posters = provider.getPosters(self.program) # Verify self.assertEqual('blah.png', posters[0]) self.assertNotIn(self.program.title(), provider.struckOut.values()) verifyZeroInteractions(self.nextProvider)
def test_getSeasonAndEpisode_When_not_struck_out_and_delegate_returns_season_and_episode_Then_return_season_and_episode(self): # Setup provider = OneStrikeAndYoureOutFanartProvider(self.platform, self.delegate, self.nextProvider) when(self.delegate).getSeasonAndEpisode(any()).thenReturn(('1','2',)) # Test season, episode = provider.getSeasonAndEpisode(self.program) # Verify self.assertEqual('1', season) self.assertEqual('2', episode) self.assertNotIn(self.program.title(), provider.struckOut.values()) verifyZeroInteractions(self.nextProvider)
def test_getPosters_When_not_struck_out_and_delegate_returns_empty_list_Then_strike_out_and_return_nextProviders_result(self): # Setup provider = OneStrikeAndYoureOutFanartProvider(self.platform, self.delegate, self.nextProvider) key = provider.createKey('getPosters', self.program) when(self.delegate).getPosters(any()).thenReturn([]) when(self.nextProvider).getPosters(any()).thenReturn(['blah.png']) # Test posters = provider.getPosters(self.program) # Verify self.assertEqual('blah.png', posters[0]) self.assertIn(self.program.title(), provider.struckOut[key].values())
def test_getSeasonAndEpisode_When_not_struck_out_and_delegate_returns_empty_tuple_Then_strike_out_and_return_nextProviders_result(self): # Setup provider = OneStrikeAndYoureOutFanartProvider(self.platform, self.delegate, self.nextProvider) key = provider.createKey('getSeasonAndEpisode', self.program) when(self.delegate).getSeasonAndEpisode(any()).thenReturn((None,None,)) when(self.nextProvider).getSeasonAndEpisode(any()).thenReturn(('1','2',)) # Test season, episode = provider.getSeasonAndEpisode(self.program) # Verify self.assertEqual('1', season) self.assertEqual('2', episode) self.assertIn(self.program.title(), provider.struckOut[key].values())
def test_getSeasonAndEpisode_When_struck_out_Then_skip_delegate_and_return_nextProviders_result(self): # Setup provider = OneStrikeAndYoureOutFanartProvider(self.platform, self.delegate, self.nextProvider) key = provider.createKey('getSeasonAndEpisode', self.program) provider.strikeOut(key, self.program) when(self.nextProvider).getSeasonAndEpisode(any()).thenReturn(('1','2')) # Test season, episode = provider.getSeasonAndEpisode(self.program) # Verify self.assertEqual('1', season) self.assertEqual('2', episode) self.assertIn(self.program.title(), provider.struckOut[key].values()) verifyZeroInteractions(self.delegate)
def test_constructor_When_delegate_is_none_Then_raise_exception(self): try: OneStrikeAndYoureOutFanartProvider(self.platform, delegate=None, nextProvider=self.nextProvider) self.fail('Expected exception to be thrown when delegate is null') except Exception: log.debug('SUCCESS: got exception on null delegate')
def test_end_to_end_tvdb_flow(self): no_op = NoOpFanartProvider() tvdb = TvdbFanartProvider(self.platform) fileCache = FileCache(os.path.join(self.sandbox, 'http'), HttpResolver()) http = HttpCachingFanartProvider(fileCache, tvdb) superfast = SuperFastFanartProvider(self.platform, http, filename='tvdb') strike = OneStrikeAndYoureOutFanartProvider(self.platform, superfast, no_op, filename='tvdb') fields = { 'title': u'The Real World', 'subtitle': u'', 'starttime': socketDateTime(2008, 11, 4, 22, 45, 00), 'endtime': socketDateTime(2008, 11, 4, 23, 50, 00), 'airdate': u'2010-07-14' } #self.assertSeasonAndEpisode(RecordedProgram(data=pdata(fields), **self.deps), u'24', u'3') program = RecordedProgram(data=pdata(fields), **self.deps) season, episode = strike.getSeasonAndEpisode(program) log.info(season) log.info(episode) self.assertEqual(('24', '3'), (season, episode)) method = 'getSeasonAndEpisode' # verify strikeout provider strikeKey = strike.createKey(method, program) self.assertFalse(strike.hasStruckOut(strikeKey)) # verify superfast provider superfastKey = superfast.createEpisodeKey(method, program) self.assertEqual(superfast.pcache[superfastKey], ('24', '3')) strike.close()
def test_end_to_end_tvdb_flow(self): no_op = NoOpFanartProvider() tvdb = TvdbFanartProvider(self.platform) fileCache = FileCache(os.path.join(self.sandbox, 'http'), HttpResolver()) http = HttpCachingFanartProvider(fileCache, tvdb) superfast = SuperFastFanartProvider(self.platform, http, filename='tvdb') strike = OneStrikeAndYoureOutFanartProvider(self.platform, superfast, no_op, filename='tvdb') fields = { 'title' : u'The Real World', 'subtitle' : u'', 'starttime' : socketDateTime(2008, 11, 4, 22, 45, 00), 'endtime' : socketDateTime(2008, 11, 4, 23, 50, 00), 'airdate' : u'2010-07-14' } #self.assertSeasonAndEpisode(RecordedProgram(data=pdata(fields), **self.deps), u'24', u'3') program = RecordedProgram(data=pdata(fields), **self.deps) season, episode = strike.getSeasonAndEpisode(program) log.info(season) log.info(episode) self.assertEqual(('24','3'), (season, episode)) method = 'getSeasonAndEpisode' # verify strikeout provider strikeKey = strike.createKey(method, program) self.assertFalse(strike.hasStruckOut(strikeKey)) # verify superfast provider superfastKey = superfast.createEpisodeKey(method, program) self.assertEqual(superfast.pcache[superfastKey], ('24','3')) strike.close()