def test_checkUpgrade(self):
        st = self.state
        today = datetime.date(2005,1,1)

        # version 0.0
        st.current_version = '0.0'
        st.last_entry_date = ''
        st.feed_url = TEST_FEED0

        uc._checkUpgrade(st, today)             # got upgrade 0.4.2

        self.assertEqual(st.fetch_date, today)
        self.assertEqual(st.next_fetch, datetime.date(2005,1,11))
        self.assertEqual(st.last_entry_date, '2005-02-21T17:00:00Z')
        self.assert_(st.upgrade_info)

        uinfo = st.upgrade_info
        self.assertEqual(uinfo.version, '0.4.2')
        self.assertEqual(uinfo.title,   'Version 0.4.2')
        self.assertEqual(uinfo.summary, 'Maintenance release with minor enhancement (2005-02-21)')
        self.assertEqual(uinfo.url,     'https://developer.berlios.de/project/showfiles.php?group_id=2905&release_id=4867')

        uc.set_config(st, dismiss=True)         # reset upgrade_info

        # still version 0.0
        uc._checkUpgrade(st, today)             # got old news

        self.assertEqual(st.last_entry_date, '2005-02-21T17:00:00Z')
        self.assert_(not st.upgrade_info)

        # version 0.4.2
        st.current_version = '0.4.2'
        st.last_entry_date = ''
        st.feed_url = TEST_FEED0

        uc._checkUpgrade(st, today)             # no new version

        self.assertEqual(st.last_entry_date, '2005-02-21T17:00:00Z')
        self.assert_(not st.upgrade_info)

        # found latest 0.8.0
        st.current_version = '0.4.0'
        st.last_entry_date = ''
        st.feed_url = TEST_FEED1

        uc._checkUpgrade(st, today)             # new version 0.8.0 available!
        self.assertEqual(st.last_entry_date, '2006-01-18T17:00:00Z')
        self.assert_(st.upgrade_info)

        uinfo = st.upgrade_info
        self.assertEqual(uinfo.version, '0.8.0')
        self.assertEqual(uinfo.title,   'Version 0.8.0')
        self.assertEqual(uinfo.summary, 'New features added: web library, tag based categorization, etc (2006-01-18)')
        self.assertEqual(uinfo.url,     'https://developer.berlios.de/project/showfiles.php?group_id=2905&release_id=8737')
    def test_checkUpgrade_failed_fetch(self):
        st = self.state
        today = datetime.date(2005,1,1)

        def _assert_failed_fetch(self, state):
            """ helper function """
            self.assertEqual(st.fetch_date, today)
            self.assertEqual(st.next_fetch, datetime.date(2005,1,2))
            self.assert_(not st.last_entry_date)
            self.assert_(not st.upgrade_info)

        uc._checkUpgrade(st, today, '')
        _assert_failed_fetch(self, st)

        uc._checkUpgrade(st, today, 'zz://xx/yy')   # bad URL
        _assert_failed_fetch(self, st)

        uc._checkUpgrade(st, today, '<?xml version="1.0" encoding="utf-8"?><a>aaa</a>')     #  irrelevant XML
        _assert_failed_fetch(self, st)

        uc._checkUpgrade(st, today, '<?xml version="1.0" encoding="utf-8"?><feed>x</wrong_feed>')     #  non-wellform XML
        _assert_failed_fetch(self, st)