示例#1
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()
示例#2
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()
示例#3
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': '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)
示例#4
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)