def setUp(self):
     self.mapper = Mock()
     self.checker = Mock()
     self.collector = PageInformationCollector(self.checker, self.mapper)
     self.article = Mock()
class TestPageInformationCollector(unittest.TestCase):

    def setUp(self):
        self.mapper = Mock()
        self.checker = Mock()
        self.collector = PageInformationCollector(self.checker, self.mapper)
        self.article = Mock()

    def test_get_info_returns_no_usable_id_if_id_does_not_match(self):
        self.checker.filter_allowed_templates = Mock(side_effect=lambda x: x)
        self.checker.get_id.return_value = u"1"
        self.mapper.get_commonscat_list_from_links.return_value = [u"Weblink Category"]
        self.article.text.return_value = u"{{Denkmalliste Sachsen Tabellenzeile|ID=1}}"
        info = self.collector.get_information(self.article, u"123")
        self.assertFalse(info.has_usable_id)

    def test_get_info_accepts_empty_id(self):
        self.checker.filter_allowed_templates = Mock(side_effect=lambda x: x)
        self.mapper.get_commonscat_list_from_links.return_value = [u"Weblink Category"]
        self.article.text.return_value = u"{{Denkmalliste Sachsen Tabellenzeile|ID=1}}"
        info = self.collector.get_information(self.article, u"")
        self.assertFalse(info.has_usable_id)
        self.assertTrue(info.meta["no_monument_id"])

    def test_get_info_returns_complete_information(self):
        self.checker.filter_allowed_templates = Mock(side_effect=lambda x: x)
        self.checker.get_id.return_value = u"1"
        self.checker.has_valid_id.return_value = True
        self.mapper.get_commonscat_list_from_links.return_value = [u"Weblink Category"]
        self.mapper.get_commonscat.return_value = u"Category:Cultural heritage ensembles in Saxony"
        self.article.text.return_value = u" Test text {{Denkmalliste Sachsen Tabellenzeile|ID=1}} more text"
        info = self.collector.get_information(self.article, u"1")
        self.assertTrue(info.has_usable_id)
        self.assertTrue(info.has_valid_id)
        self.assertFalse(info.has_duplicate_ids)
        self.assertFalse(info.has_image)
        self.assertEqual(info.meta["template_count"], 1)
        self.assertEqual(info.category, u"Category:Cultural heritage ensembles in Saxony")

    def test_get_info_returns_id_validity(self):
        self.checker.filter_allowed_templates = Mock(side_effect=lambda x: x)
        self.checker.get_id.return_value = "1"
        self.checker.has_valid_id.return_value = False
        self.mapper.get_commonscat_list_from_links.return_value = [u"Weblink Category"]
        self.mapper.get_commonscat.return_value = u"Category:Cultural heritage ensembles in Saxony"
        self.article.text.return_value = u" Test text {{Denkmalliste Sachsen Tabellenzeile|ID=1}} more text"
        info = self.collector.get_information(self.article, u"1")
        self.assertTrue(info.has_usable_id)
        self.assertFalse(info.has_valid_id)

    def test_get_info_returns_duplicate_id_info(self):
        self.checker.filter_allowed_templates = Mock(side_effect=lambda x: x)
        self.checker.get_id.return_value = "1"
        self.checker.has_valid_id.return_value = True
        self.mapper.get_commonscat_list_from_links.return_value = [u"Weblink Category"]
        self.mapper.get_commonscat.return_value = u"Category:Cultural heritage ensembles in Saxony"
        self.article.text.return_value = u" Test text {{Denkmalliste Sachsen Tabellenzeile|ID=1}} more text" * 3
        info = self.collector.get_information(self.article, u"1")
        self.assertFalse(info.has_usable_id)
        self.assertEqual(info.meta["template_count"], 3)
        self.assertTrue(info.has_duplicate_ids)

    def test_get_most_specific_category_returns_first_non_empty_value(self):
        self.mapper.get_commonscat_list_from_links.return_value = [
            "",
            u"Category:Cultural heritage ensembles in Bavaria"
        ]
        text = u"{{Denkmalliste Bayern Tabellenzeile|ID=1}}"
        category = self.collector.get_most_specific_category(text)
        self.assertEqual(category, u"Category:Cultural heritage ensembles in Bavaria")

    def test_get_info_recognizes_existing_images(self):
        self.checker.filter_allowed_templates = Mock(side_effect=lambda x: x)
        self.checker.get_id.return_value = "1"
        self.checker.has_valid_id.return_value = True
        self.mapper.get_commonscat_list_from_links.return_value = [u"Weblink Category"]
        self.mapper.get_commonscat.return_value = u"Category:Cultural heritage ensembles in Saxony"
        self.article.text.return_value = u"{{Denkmalliste Sachsen Tabellenzeile|ID=1|Bild=Denkmal.jpg}}"
        info = self.collector.get_information(self.article, u"1")
        self.assertTrue(info.has_image)