Example #1
0
class TestDatabase(unittest.TestCase):

    def setUp(self):
        self.seinfeld = Seinfeld()
        self.seinfeld.open()

    def tearDown(self):
        self.seinfeld.close()

    def test_db_counts(self):
        self.assertEqual(len(self.seinfeld.episode()), 173)
        self.assertEqual(len(self.seinfeld.season()), 9)
        self.assertEqual(len(self.seinfeld.speaker()), 726)

        c = self.seinfeld.cursor()
        c.execute('select id from utterance order by id desc limit 1')
        count, = c.fetchone()

        self.assertEqual(count, 52206)
        self.assertEqual(self.seinfeld.MAX_QUOTE_ID, 52206)

    def test_data(self):
        season = self.seinfeld.season(2)
        self.assertEqual(season.number, 2)
        self.assertIsInstance(season.episodes, dict)
        self.assertEqual(len(season.episodes), 12)

        episode = season.episodes[3]
        self.assertEqual(episode.season, 2)
        self.assertEqual(episode.number, 3)
        self.assertEqual(episode.title, 'The Jacket')
        self.assertIsInstance(episode.date, dt.date)
        self.assertEqual(episode.date, dt.date(1991, 2, 6))

        self.assertIsInstance(episode.writers, set)
        self.assertIn('Larry David', episode.writers)
        self.assertIn('Jerry Seinfeld', episode.writers)
        self.assertEqual(episode.director, 'Tom Cherones')

    def test_quote(self):
        speaker = self.seinfeld.speaker('GEORGE')
        episode = self.seinfeld.season(4).episodes[3]
        quote = self.seinfeld.quote(34663)

        self.assertEqual(quote.id, 34663)
        self.assertEqual(quote.episode, episode)
        self.assertEqual(quote.number, 250)
        self.assertEqual(quote.speaker, speaker)
        self.assertEqual(quote.text, '(Smiling) Nothing.')

    def test_search_single_quote(self):
        speaker = self.seinfeld.speaker('CUSTOMER')
        episode = self.seinfeld.season(2).episodes[3]
        quotes = self.seinfeld.search(speaker=speaker, subject='Alton Benes')
        self.assertEquals(len(quotes), 1)

        quote = quotes[0]
        self.assertEqual(quote.id, 1442)
        self.assertEqual(quote.episode, episode)
        self.assertEqual(quote.number, 6)
        self.assertEqual(quote.speaker, speaker)
        self.assertEqual(quote.text, 'Alton Benes is your father?')

    def test_search_multi_quote(self):
        speaker = self.seinfeld.speaker('ELAINE')
        episode = self.seinfeld.season(3).episodes[14]

        # test default limit
        quotes = self.seinfeld.search(episode=episode, speaker=speaker)
        self.assertEquals(len(quotes), 10)

        # test custom limit
        quotes = self.seinfeld.search(episode=episode, speaker=speaker,
                                      limit=5)
        self.assertEquals(len(quotes), 5)

        # test no limit
        quotes = self.seinfeld.search(episode=episode, speaker=speaker,
                                      limit=None)
        self.assertEquals(len(quotes), 37)

        last_number = 0
        for quote in quotes:
            self.assertEqual(quote.episode, episode)
            self.assertGreater(quote.number, last_number)
            self.assertEqual(quote.speaker, speaker)
            self.assertTrue(quote.text)

            last_number = quote.number

    def test_passage(self):
        speaker = self.seinfeld.speaker('GEORGE')
        episode = self.seinfeld.season(4).episodes[3]
        quote = self.seinfeld.quote(34663)

        # custom length
        passage = self.seinfeld.passage(quote, length=10)
        self.assertEqual(len(passage.quotes), 10)

        # default length
        passage = self.seinfeld.passage(quote)
        self.assertEqual(len(passage.quotes), 5)

        self.assertTrue(passage)
        self.assertEqual(passage.id, 34663)
        self.assertEqual(passage.episode, episode)

        # passage beginning
        quote = passage.quotes[0]
        self.assertEqual(quote.id, 34661)
        self.assertEqual(quote.episode, episode)
        self.assertEqual(quote.number, 248)
        self.assertEqual(quote.speaker, speaker)
        self.assertTrue(quote.text.startswith('I think I can sum up the show'))

        # passage ending
        quote = passage.quotes[-1]
        self.assertEqual(quote.id, 34665)
        self.assertEqual(quote.episode, episode)
        self.assertEqual(quote.number, 252)
        self.assertEqual(quote.speaker, speaker)
        self.assertEqual(quote.text, 'The show is about nothing.')