def test_cache_consistent_across_sessions(self): sandbox = tempfile.mkdtemp() self.addCleanup(shutil.rmtree, sandbox, ignore_errors=True) nextProvider = Mock() platform = Mock() when(platform).getCacheDir().thenReturn(sandbox) when(nextProvider).getPosters(any(Program)).thenReturn([ 'http://a.com/a.gif', 'http://b.com/b.gif', 'http://c.com/c.gif', 'http://d.com/d.gif' ]) provider = SuperFastFanartProvider(platform, nextProvider) programs = [] for i in xrange(1000): program = TVProgram({ 'title': 'P%d' % i, 'category_type': 'series' }, translator=Mock()) httpUrls = provider.getPosters(program) self.assertTrue(4, len(httpUrls)) programs.append(program) provider.close() nextProvider = Mock() provider2 = SuperFastFanartProvider(platform, nextProvider) for p in programs: httpUrls = provider2.getPosters(p) self.assertTrue(4, len(httpUrls)) provider2.close()
def test_cache_consistent_across_sessions(self): sandbox = tempfile.mkdtemp() self.addCleanup(shutil.rmtree, sandbox, ignore_errors=True) nextProvider = Mock() platform = Mock() when(platform).getCacheDir().thenReturn(sandbox) when(nextProvider).getPosters(any(Program)).thenReturn(['http://a.com/a.gif', 'http://b.com/b.gif', 'http://c.com/c.gif', 'http://d.com/d.gif']) provider = SuperFastFanartProvider(platform, nextProvider) programs = [] for i in xrange(1000): program = TVProgram({'title': 'P%d' % i, 'category_type':'series'}, translator=Mock()) httpUrls = provider.getPosters(program) self.assertTrue(4, len(httpUrls)) programs.append(program) provider.close() nextProvider = Mock() provider2 = SuperFastFanartProvider(platform, nextProvider) for p in programs: httpUrls = provider2.getPosters(p) self.assertTrue(4, len(httpUrls)) provider2.close()
class SuperFastFanartProviderTest(unittest.TestCase): def setUp(self): self.sandbox = tempfile.mkdtemp() self.addCleanup(shutil.rmtree, self.sandbox, ignore_errors=True) self.nextProvider = Mock() self.platform = Mock() when(self.platform).getCacheDir().thenReturn(self.sandbox) self.program = TVProgram({'title': 'Two Fat Ladies', 'category_type':'series'}, translator=Mock()) self.provider = SuperFastFanartProvider(self.platform, self.nextProvider) @staticmethod def programs(cnt): for i in xrange(cnt): #@UnusedVariable yield TVProgram({ 'starttime': '20081121140000', 'endtime' : '20081121140000', 'chanid' : random.randint(1,9999999), 'channum' : str(random.randint(1,10)), 'title' : 'Two Fat Ladies %d' % random.randint(1,999999), 'subtitle' : 'Away we go....', 'description' : 'blah blah blah', 'category_type':'series'}, translator=Mock()) def test_pickling(self): when(self.nextProvider).getPosters(any(Program)).thenReturn(['logo.gif']) for p in self.programs(20000): self.provider.getPosters(p) self.provider.close() filesize = os.path.getsize(self.provider.pfilename) log.debug('Pickle file size = %d' % filesize) self.assertGreater(filesize, 0) def test_cache_consistent_across_sessions(self): sandbox = tempfile.mkdtemp() self.addCleanup(shutil.rmtree, sandbox, ignore_errors=True) nextProvider = Mock() platform = Mock() when(platform).getCacheDir().thenReturn(sandbox) when(nextProvider).getPosters(any(Program)).thenReturn(['http://a.com/a.gif', 'http://b.com/b.gif', 'http://c.com/c.gif', 'http://d.com/d.gif']) provider = SuperFastFanartProvider(platform, nextProvider) programs = [] for i in xrange(1000): program = TVProgram({'title': 'P%d' % i, 'category_type':'series'}, translator=Mock()) httpUrls = provider.getPosters(program) self.assertTrue(4, len(httpUrls)) programs.append(program) provider.close() nextProvider = Mock() provider2 = SuperFastFanartProvider(platform, nextProvider) for p in programs: httpUrls = provider2.getPosters(p) self.assertTrue(4, len(httpUrls)) provider2.close() def test_getPosters_When_posters_not_in_cache_and_returned_by_next_in_chain_Then_cache_locally_and_return_posters(self): # Setup when(self.nextProvider).getPosters(any(Program)).thenReturn(['logo.gif']) key = self.provider.createKey('getPosters', self.program) self.assertNotIn(key, self.provider.imagePathsByKey) # Test posters = self.provider.getPosters(self.program) # Verify log.debug('Posters = %s' % posters) self.assertEqual('logo.gif', posters[0]) self.assertIn(key, self.provider.imagePathsByKey) def test_getPosters_When_next_link_in_chain_doesnt_find_posters_Then_dont_cache_anything(self): # Setup when(self.nextProvider).getPosters(any(Program)).thenReturn([]) key = self.provider.createKey('getPosters', self.program) self.assertNotIn(key, self.provider.imagePathsByKey) # Test posters = self.provider.getPosters(self.program) # Verify self.assertListEqual([], posters) self.assertNotIn(key, self.provider.imagePathsByKey) def test_createKey_When_program_title_contains_unicode_chars_Then_dont_blow_up(self): program = TVProgram({'title': u'madeleine (Grabación Manual)', 'category_type':'series'}, translator=Mock()) key = self.provider.createKey('getPosters', program) self.assertGreater(len(key), 0)
class SuperFastFanartProviderTest(unittest.TestCase): def setUp(self): self.sandbox = tempfile.mkdtemp() self.addCleanup(shutil.rmtree, self.sandbox, ignore_errors=True) self.nextProvider = Mock() self.platform = Mock() when(self.platform).getCacheDir().thenReturn(self.sandbox) self.program = TVProgram( { 'title': u'Two Fat Ladies', 'category_type': u'series', 'subtitle': u'Finger lickin good', 'originalairdate': u'20081121' }, translator=Mock()) self.provider = SuperFastFanartProvider(self.platform, self.nextProvider) @staticmethod def programs(cnt): for i in xrange(cnt): #@UnusedVariable yield TVProgram( { 'starttime': '20081121140000', 'endtime': '20081121140000', 'chanid': random.randint(1, 9999999), 'channum': str(random.randint(1, 10)), 'title': 'Two Fat Ladies %d' % random.randint(1, 999999), 'subtitle': 'Away we go....', 'description': 'blah blah blah', 'category_type': 'series' }, translator=Mock()) def test_pickling(self): when(self.nextProvider).getPosters(any(Program)).thenReturn( ['logo.gif']) for p in self.programs(20000): self.provider.getPosters(p) self.provider.close() filesize = os.path.getsize(self.provider.pfilename) log.debug('Pickle file size = %d' % filesize) self.assertGreater(filesize, 0) def test_cache_consistent_across_sessions(self): sandbox = tempfile.mkdtemp() self.addCleanup(shutil.rmtree, sandbox, ignore_errors=True) nextProvider = Mock() platform = Mock() when(platform).getCacheDir().thenReturn(sandbox) when(nextProvider).getPosters(any(Program)).thenReturn([ 'http://a.com/a.gif', 'http://b.com/b.gif', 'http://c.com/c.gif', 'http://d.com/d.gif' ]) provider = SuperFastFanartProvider(platform, nextProvider) programs = [] for i in xrange(1000): program = TVProgram({ 'title': 'P%d' % i, 'category_type': 'series' }, translator=Mock()) httpUrls = provider.getPosters(program) self.assertTrue(4, len(httpUrls)) programs.append(program) provider.close() nextProvider = Mock() provider2 = SuperFastFanartProvider(platform, nextProvider) for p in programs: httpUrls = provider2.getPosters(p) self.assertTrue(4, len(httpUrls)) provider2.close() def test_getPosters_When_posters_not_in_cache_and_returned_by_next_in_chain_Then_cache_locally_and_return_posters( self): # Setup when(self.nextProvider).getPosters(any(Program)).thenReturn( ['logo.gif']) key = self.provider.createKey('getPosters', self.program) self.assertNotIn(key, self.provider.imagePathsByKey) # Test posters = self.provider.getPosters(self.program) # Verify log.debug('Posters = %s' % posters) self.assertEqual('logo.gif', posters[0]) self.assertIn(key, self.provider.imagePathsByKey) def test_getPosters_When_next_link_in_chain_doesnt_find_posters_Then_dont_cache_anything( self): # Setup when(self.nextProvider).getPosters(any(Program)).thenReturn([]) key = self.provider.createKey('getPosters', self.program) self.assertNotIn(key, self.provider.imagePathsByKey) # Test posters = self.provider.getPosters(self.program) # Verify self.assertListEqual([], posters) self.assertNotIn(key, self.provider.imagePathsByKey) def test_createKey_When_program_title_contains_unicode_chars_Then_dont_blow_up( self): program = TVProgram( { 'title': u'madeleine (Grabación Manual)', 'category_type': 'series' }, translator=Mock()) key = self.provider.createKey('getPosters', program) self.assertGreater(len(key), 0) def test_getSeasonAndEpisode_When_not_in_cache_Then_ask_next_provider( self): # Given when(self.nextProvider).getSeasonAndEpisode(any(Program)).thenReturn( ('5', '12')) key = self.provider.createEpisodeKey('getSeasonAndEpisode', self.program) self.assertNotIn(key, self.provider.imagePathsByKey) # When season, episode = self.provider.getSeasonAndEpisode(self.program) # Then self.assertEqual('5', season) self.assertEqual('12', episode) self.assertEqual(('5', '12'), self.provider.imagePathsByKey.get(key)) def test_getSeasonAndEpisode_When_found_in_cache_Then_return_cached_copy( self): # Given key = self.provider.createEpisodeKey('getSeasonAndEpisode', self.program) self.provider.imagePathsByKey[key] = ('5', '12') # When season, episode = self.provider.getSeasonAndEpisode(self.program) # Then self.assertEqual('5', season) self.assertEqual('12', episode) verifyZeroInteractions(self.nextProvider)