Beispiel #1
0
class TestCollector(unittest.TestCase):
    """ Tests the Collector class.

    """
    def setUp(self):
        self.co = Collector()
        self.feed_info = Manager.get_feeds_info()

    def tearDown(self):
        rm_data_dir()

    def test_add_feed(self):
        """ Tests add_feed.

        Add feeds with "add_feed":
         1- Test if the feeds has been added.
         2- Test if the feeds exists in the database.

        Try adding a feed already added: 
         3- Test if the feed has not been added.

        """
        for name, url, tag, _ in self.feed_info:
            feed = self.co.add_feed(name, url, tag)
            self.assertIsNotNone(feed) # 1
            self.assertTrue(self.co.has_feed(name)) # 2

        name, url, tag = self.feed_info[0][:3]
        feed = self.co.add_feed(name, url, tag)
        self.assertIsNone(feed) # 3

    def test_update_feed(self):
        """ Tests update_feed.

        Add feeds.

        Try updating feed with "update_feed":
         1- Test if the feed doesn't need to be updated.

        #TODO
        Find a way to update a feed in the test.

        """
        for name, url, tag, _ in self.feed_info:
            self.co.add_feed(name, url, tag)

            updated = self.co.update_feed(name)
            self.assertFalse(updated) # 1

    def test_rm_feed(self):
        """ Tests rm_feed.

        Add feeds:
         1- Test if the feeds exists first.

        Remove feeds with "rm_feed".
         2- Test if the feeds has been removed.

        """
        for name, url, tag, _ in self.feed_info:
            self.co.add_feed(name, url, tag)

            self.assertTrue(self.co.has_feed(name)) # 1
            self.co.rm_feed(name)
            self.assertFalse(self.co.has_feed(name)) # 2

    def test_update_item_tag(self):
        """ Tests update_item_tag.

        Add a feed:
         1- Test if an item has not the tag attribute.

        Add a category with "update_item_tag".
         2- Test if the item updated is the same with the id.
         3- Test if the item updated has the tag attribute. 
         4- Test if the item updated has the correct category.

        """
        category = "SPORT"

        name, url, tag = self.feed_info[0][:3]
        feed = self.co.add_feed(name, url, tag)
        item_id, item = self.co.get_items(name).next()
        self.assertFalse(hasattr(item, "tag")) # 1

        self.co.update_item_tag(feed.item_db_filename, item_id, category)
        item_id_updated, item_updated = self.co.get_items(name).next()

        self.assertEquals(item_id, item_id_updated) # 2
        self.assertTrue(hasattr(item_updated, "tag")) # 3
        self.assertEquals(item_updated.tag, category) # 4

    def test_has_feed(self):
        """ Tests has_feed.

        Verify with "has_feed" if the feed exists.
         1- The feed doesn't exists.

        Add a feed.

        Verify with "has_feed" if the feed exists.
         2- The feed exists.

        """
        name, url, tag = self.feed_info[0][:3]

        self.assertFalse(self.co.has_feed(name)) # 1
        self.co.add_feed(name, url, tag)
        self.assertTrue(self.co.has_feed(name)) # 2

    def test_print_feed(self):
        """ Tests print_feed.

        Add a feed.
        Print the feed.

        """
        name, url, tag = self.feed_info[0][:3]
        self.co.add_feed(name, url, tag)

        self.co.print_feed(name)

    def test_print_feeds(self):
        """ Tests print_feeds.

        Add feeds.
        print feeds.

        """
        for name, url, tag, _ in self.feed_info:
            self.co.add_feed(name, url, tag)

        self.co.print_feeds()

    def test_print_items(self):
        """ Tests print_items.

        Add a feed.
        Print items.

        """
        name, url, tag = self.feed_info[0][:3]
        self.co.add_feed(name, url, tag)

        self.co.print_items(name)

    def test_get_text_from_items(self):
        """ Tests get_text_from_items.

        Add a feed.

        For each item with "get_text_from_items" verify if: 
         1- the title is in the text.
         2- the abstract is in the text.
         3- the webpage text is in the text.

        """
        name, url, tag = self.feed_info[0][:3]
        self.co.add_feed(name, url, tag)

        for item, text in self.co.get_text_from_items(name):
            self.assertIn(item.title, text) # 1
            self.assertIn(item.abstract, text) # 2
            self.assertIn(item.webpage_text, text) # 3

    def test_get_feed(self):
        """ Tests get_feed.

        1,2- Test if get_feed retrieves the correct feed by comparing name. 
        3- Test if get_feed retrieve None for an unknown feed.

        """
        name_1, url, tag, _ = self.feed_info[0]
        feed_1_added = self.co.add_feed(name_1, url, tag)
        name_2, url, tag, _ = self.feed_info[1]
        feed_2_added = self.co.add_feed(name_2, url, tag)

        feed_1_get = self.co.get_feed(name_1)
        self.assertEquals(feed_1_get.name, feed_1_added.name) # 1

        feed_2_get = self.co.get_feed(name_2)
        self.assertNotEquals(feed_2_get.name, feed_1_added.name) # 2

        unknown_feed = self.co.get_feed("unknown feed")
        self.assertIsNone(unknown_feed) # 3

    def test_get_feeds(self):
        """ Tests get_feeds.

        Add feeds.

        Get feeds and:
         1- Comparing feed name from the data base with original feeds.
         2- Comparing feed name from feeds with original feeds.
         3- Verify if feeds name from the db are equals to feeds obj name attribute. 
             (1, 2 is not enough for that because the order is not preserved)

        """
        feeds_name = []
        for name, url, tag, _ in self.feed_info:
            self.co.add_feed(name, url, tag)
            feeds_name.append(name)

        feeds_name = set(feeds_name)
        feeds_name_1 = set([name for name, _ in self.co.get_feeds()])
        self.assertEquals(feeds_name, feeds_name_1) # 1

        feeds_name_2 = set([feed.name for _, feed in self.co.get_feeds()])
        self.assertEquals(feeds_name, feeds_name_2) # 2

        for name, feed in self.co.get_feeds():
            self.assertEquals(name, feed.name) # 3

    def test_get_items(self):
        """ Tests get_items.
        
        Add a feed.

        Get the first item:
         1- Verify if the item is not None.

        Get all items:
         2- Verify if the id from the db are equals to the item id attribute.

        """
        name, url, tag, _ = self.feed_info[0]
        feed = self.co.add_feed(name, url, tag)

        item_id, item = self.co.get_items(name).next()
        self.assertIsNotNone(item) # 1

        for item_id, item in self.co.get_items(name):
            self.assertEquals(item_id, str(item.id)) # 2