class TestGenerateReports(unittest.TestCase):
    def setUp(self):
        self.report = ReportService(MongoDB(col="labsk_merge"))
        self.presenter = ReportPresenter()
        self.presenter.set_builder(self.report)

    def test_find_zacatrus_thread_in_report(self):
        result = self.report.build_report(PreGeneratedReports.tienda_zacatrus)
        found = False
        # print "X"
        for thread in result.report["zacatrus"]:
            if thread["link"] == "http://labsk.net/index.php?topic=129533.0":
                found = True
                break
        self.assertTrue(found)

    def test_find_zacatrus_with_presenter(self):
        result = self.presenter.report_and_stats(PreGeneratedReports.tienda_zacatrus)
        found = False
        # print "X"
        for thread in result.report["zacatrus"]:
            if thread["link"] == "http://labsk.net/index.php?topic=129533.0":
                found = True
                break
        self.assertTrue(found)

    def test_find_finplay_thread_in_report(self):
        result = self.report.build_report(PreGeneratedReports.tienda_finplay)
        found = False
        # print "X"
        for thread in result.report["finplay"]:
            if thread["link"] == "http://labsk.net/index.php?topic=121033.0":
                found = True
                break
        self.assertTrue(found)

    def test_find_finplay_with_presenter(self):
        result = self.presenter.report_and_stats(PreGeneratedReports.tienda_finplay)
        found = False
        # print "X"
        for thread in result.report["finplay"]:
            if thread["link"] == "http://labsk.net/index.php?topic=121033.0":
                found = True
                break
        self.assertTrue(found)

    def test_find_finplay_with_presenter_filtering_2013(self):
        result = self.presenter.report_and_stats(PreGeneratedReports.tienda_finplay, filter_year="2013")
        found = False
        # print "X"
        for thread in result.report["finplay"]:
            if thread["link"] == "http://labsk.net/index.php?topic=121033.0":
                found = True
                break
        self.assertTrue(found)

    """
class TestReportPresenter(unittest.TestCase):

    pre = post = None

    def setUp(self):
        global pre, post
        self.presenter = ReportPresenter()
        pre = post = self
        self.builder = mock()
        rr = ReportResult("Valid")
        when(self.builder).build_report(any()).thenReturn(rr)
        self.presenter.set_builder(self.builder)

    def test_when_transform_a_report_to_gui_first_text_is_report_name(self):
        result = self.presenter._toGUIMode(Reports.asylum, Reports.asylum_keywords)
        post.assertEqual(result.text[0], Reports.asylum['title'])

    def test_when_transform_a_report_to_gui_has_as_many_nexttext_as_keywords(self):
        result = self.presenter._toGUIMode(Reports.asylum, Reports.asylum_keywords)
        print result.nexttext
        post.assertEqual(len(result.nexttext), 4)

    def test_set_database(self):
        mongo_mock = MockMongo()
        self.presenter.database = mongo_mock
        self.assertEquals(self.presenter.database, mongo_mock)

    def test_report_and_stats_returns_a_report_and_stats__(self):
        result = self.presenter.report_and_stats({'keywords':[]})
        post.assertIsNotNone(result)
        post.assertIsNotNone(result.report)
        post.assertIsNotNone(result.report_stats)

    def test_report_and_stats_returns_a_valid_report(self):
        result = self.presenter.report_and_stats({'keywords':[]})
        post.assertEquals(result.report, "Valid")

    def test_report_and_stats_returns_a_valid_stats(self):
        text_stats = self.presenter.generateStats(PreGeneratedReports.report_asylum_games, Reports.asylum)
        post.assertEquals(text_stats.text[0], "Asuntos encontrados: 4")
        post.assertEquals(text_stats.text[1], "Mensajes encontrados: 8")
        post.assertEquals(len(text_stats.text), 2)

    def test_when_filtering_the_stats_includes_a_msg_describibg_the_filter(self):
        result = self.presenter.report_and_stats({'keywords':[]}, filter_year='2015')
        stats = result.report_stats
        post.assertEquals(len(stats.text), 3)
        post.assertEquals(stats.text[2], "Se omiten asuntos sin mensajes desde el 2016 o posteriores")