class OneStrikeAndYoureOutFanartProviderTest(unittest.TestCase): def setUp(self): self.delegate = Mock() self.nextProvider = Mock() self.platform = Mock() self.sandbox = tempfile.mkdtemp() self.addCleanup(shutil.rmtree, self.sandbox) when(self.platform).getCacheDir().thenReturn(self.sandbox) self.program = TVProgram({ 'title': 'Two Fat Ladies', 'category_type':'series', 'channum' : '5.1', 'starttime' : datetime.datetime.now(), 'endtime': datetime.datetime.now(), 'subtitle': 'blah', 'description': 'blah' }, translator=Mock()) 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_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_getPosters_When_struck_out_Then_skip_delegate_and_return_nextProviders_result(self): # Setup provider = OneStrikeAndYoureOutFanartProvider(self.platform, self.delegate, self.nextProvider) key = provider.createKey('getPosters', self.program) provider.strikeOut(key, self.program) 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()) verifyZeroInteractions(self.delegate) 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_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_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_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)
class OneStrikeAndYoureOutFanartProviderTest(unittest.TestCase): def setUp(self): self.delegate = Mock() self.nextProvider = Mock() self.platform = Mock() self.sandbox = tempfile.mkdtemp() self.addCleanup(shutil.rmtree, self.sandbox) when(self.platform).getCacheDir().thenReturn(self.sandbox) self.program = TVProgram( { 'title': 'Two Fat Ladies', 'category_type': 'series', 'channum': '5.1', 'originalairdate': '2001-01-01', 'starttime': datetime.datetime.now(), 'endtime': datetime.datetime.now(), 'subtitle': 'blah', 'description': 'blah' }, translator=Mock()) 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_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_getPosters_When_struck_out_Then_skip_delegate_and_return_nextProviders_result( self): # Setup provider = OneStrikeAndYoureOutFanartProvider(self.platform, self.delegate, self.nextProvider) key = provider.createKey('getPosters', self.program) provider.strikeOut(key, self.program) 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()) verifyZeroInteractions(self.delegate) 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_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_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_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)