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

    def setUp(self):
        self.thread_obj = ThreadModel(Reports.get_asylum_polis_thread())
        self.msg_count = self.thread_obj.msg_count()
        self.filter2012 = FilterMsgYear('2012')

    def test_when_entry_has_not_msgs_then_it_remains_unchanged(self):
        entry_mock = mock()
        when(entry_mock).has_msgs().thenReturn(False)
        result = self.filter2012.filter(entry_mock)
        verify(entry_mock, 1).has_msgs()
        verify(entry_mock, 0).msgs_objs()
        self.assertTrue(result)

    def test_when_entry_has_not_msgs_with_or_under_indicated_date_it_remains_unchanged(self):
        filter2011 = FilterMsgYear('2011')
        filter2011.filter(self.thread_obj)
        self.assertEqual(self.thread_obj.msg_count(), self.msg_count)

    def test_when_entry_has_msgs_with_the_indicated_date_remove_them(self):
        self.filter2012.filter(self.thread_obj)
        self.assertEqual((self.msg_count - 2), self.thread_obj.msg_count())

    def test_when_entry_has_msgs_with_the_indicated_and_under_date_remove_them(self):
        filter2013 = FilterMsgYear('2013')
        filter2013.filter(self.thread_obj)
        self.assertEqual(0, self.thread_obj.msg_count())

    def test_its_description_includes_the_year(self):
        self.assertIn('2012', str(self.filter2012))
Example #2
0
 def test_when_change_url_descripcion_remains_the_same(self):
     webclient = MockWebClient(HTMLFactory.navigation_url())
     self.factory = AsuntoFactory(webclient)
     self.factory.urlobject = URL("Url", "Desc")
     self.factory.changeUrl("yyy")
     thread = ThreadModel(self.factory.create(self.fragment))
     self.assertEqual(thread.location(), u'Desc')
Example #3
0
 def _filter_report_using_year(self, reportDescription, report, year):
     query = ReportQueryModel(reportDescription)
     for kword in query.keywords():
         for thread in report[kword]:
             threadobj = ThreadModel(thread)
             new_msgs = self._filer_msgs_in(threadobj, year)
             threadobj.replace_msgs_objs(new_msgs)
Example #4
0
    def test_num_of_msgs(self):
        t = {u'source': u'LaBSK', u'link': u'http://labsk.net/index.php?topic=127181.0', u'msgs':
             [{u'date': u' 07 de Febrero de 2014, 01:00:21 pm \xbb', u'body': u'', u'user': u'LudoNoticias'},
              {u'date': u' 07 de Febrero de 2014, 05:00:54 pm \xbb', u'body': u'Recuerdo haber jugado hace mucho tiempo con las miniaturas aquellas, de la marca Grenadier si mi memoria no falla... lo cierto es que al ser un juego mas interpretativo y no tan tactico como pudiera ser un D&D las dejamos de usar, asi que para mi, en cuanto a una partida de rol, me parecen mas objeto de coleccionismo que otra cosa, salvo que las quieras usar para un Mansiones o un Arkham\xa0 ', u'user': u'Ech-Pi-El'},
              {u'date': u' 08 de Febrero de 2014, 03:34:44 am \xbb', u'body': u'Sinceramente chicos, si quer\xe9is miniaturas chulas de Cthulhu y sus colegas, huid de estas... cosas e iros a por las de Cthulhu Wars Es que no hay comparaci\xf3n alguna, da hasta verg\xfcenza ajena...Vs', u'user': u'Torke'}], u'title': u'Call of Cthulhu, las miniaturas para sus m\xf3dulos'}

        thread = ThreadModel(t)
        self.assertEqual(3, thread.msg_count())
Example #5
0
    def test_createThreadStruct(self):
        mockweb = MockWebClient(HTMLFactory.tablamensajes_html())
        self.threadfactory = AsuntoFactory(mockweb)
        self.assertEquals("", self.threadfactory.nextUrl())
        thread = self.threadfactory.create(HTMLFactory.asunto())
        msgs = list()
        struct = ThreadModel(self. processthread._createThreadStruct(thread, msgs))

        self.assertEquals("LaBSK", struct.source())
        self.assertEquals(thread['title'], struct.title())
        self.assertEquals(struct.answers(), 0)
        self.assertIsInstance(struct.json()['msgs'], list)
Example #6
0
    def test_year_last_msg_with_finplay_thread(self):
        thread_json = {u'msgs':
            [
            {u'date': u' 05 de Noviembre de 2013, 04:26:29 pm \xbb',
             u'body': u'http://finplay.es/index.php?p=1\nAqu\xed ten\xe9is el enlace de lo que se ir\xe1 a\xf1adiendo con precios m\xe1s bajitos. Quiz\xe1 encuentres lo que justo buscabas ah\xed jejejeje.\nWALKING DEAD \nLA FUGA DE COLDITZ\nEXP. de CATAN\nDIRECTOR DE CAMPA\xd1A\nDOMINION: COMARCAS\nY poco a poco ir\xe1n creciendo (los juegos jejeje no los precios) \n \n', u'user': u'elqueaprende', u'id': u'msg_1173837'},
            {u'date': u'22 de Marzo de 2014, a las 03:34:43 pm \xbb', u'body': u'http://www.juegosdemesafinplay.com/genero-41-ofertones\nhttp://www.juegosdemesafinplay.com/index.php?p=2\nhttp://www.juegosdemesafinplay.com/index.php?p=3\nSin piedad bajamos los precios de:\nCONCORDIA\nDARK DARKER DARKEST\nAGRICOLA 2 JUGADORES\nARRIALA\nCARGO NOIR\nEL PUERTO FLUVIAL\nDOMINION: COMARCAS\nROGUE AGENT\nSPECULATION\nTINNERS TRAILS\nPASHA\nTRAJAN\nSHADOWS OVER THE EMPIRE\nARCHON\nPLANET STEAM\nS\xf3lo en \nwww.juegosdemesafinplay.es\n\xa0\n \n \n \n \n',
             u'user': u'elqueaprende',
             u'id': u'msg_1246664'}
             ], u'title': u'OFERTONES en FINPLAY!!!', u'answers': 2,
             u'source': u'LaBSK',
             u'link': u'http://labsk.net/index.php?topic=121033.0', u'location': u'Publicidad'}
        thread_obj = ThreadModel(thread_json)

        msg_list_objct = MsgListModel(thread_json['msgs'])
        self.assertEqual(msg_list_objct.lastmsg_object().year(), 2014)
        self.assertEqual(thread_obj.year_last_msg(), 2014)
Example #7
0
class TestPorcessWithMongo(unittest.TestCase):
    """ this test suites verify tje coordination between two collections and the
        detection of an unmodified thead.
    """

    def setUp(self):
        self.obj_thread = ThreadModel(Reports.get_asylum_thread())
        self.obj_thread.set_answers(59)
        self.mock_listener = mock()
        self.db = MongoDB()
        self.db.query("labsk_merge")

    def test_search_thread(self):
        db = MongoDB()
        db.query("labsk_merge")
        tmp_col = "labsk_temp_temp"
        db.insert(tmp_col)

        process = ProcessThread()
        process.database = db

        result = process._search_thread(self.obj_thread)

        self.assertIsNotNone(result)

        db.drop(tmp_col)

    def _create_process(self):
        process = ProcessThread()
        process.database = self.db
        process.listener =  self.mock_listener
        return process

    def test_skip_existing_thread_with_one_msg_and_0_answers(self):
        link = 'http://labsk.net/index.php?topic=127734.0'
        newT = ThreadModel({'link':link, 'msgs': [{}], 'answers':'0'})

        process = self._create_process()
        self.assertIsNotNone(process._search_thread(newT))
        process._evaluate_thread(newT)
        verify(self.mock_listener).skippingUnmodifiedThread(any(), newT)
Example #8
0
    def test_when_thread_has_no_answers_return_num_of_msg_minus_one(self):
        """ LaBSK doe snot count the first msg
        """
        thread = ThreadModel({'msgs': [{}, {}]})
        self.assertEqual(1, thread.answers())

        thread = ThreadModel({'msgs': []})
        self.assertEqual(-1, thread.answers())

        thread = ThreadModel({'msgs': [{u'date': u' 18 de Septiembre de 2013, 05:19:46 pm \xbb', u'body': u'Dejo por aqu\xed varios enlaces a nuestros \xfaltimos programas.\xa0 Hemos dejado de ser programa de radio de momento (espero que despu\xe9s de las fiestas del Pilar volvamos a serlo) as\xed que el sonido no es muy bueno, pero creo que las entrevistas son muy interesantes porque los invitados lo son\xa0 Proyecto de revista de juegos de mesa en papel y otros temas:Pedro Soto y otros temas:', u'user': u'verarua'}]})
        self.assertEqual(0, thread.answers())
Example #9
0
    def test_inc_stats_right(self):
        rb = mock()
        when(rb).build_report(Reports.asylum_report_request).thenReturn(Reports.asylum)
        l_report = LaBSKReportBuilder(rb)
        self.stats.inc_threads()
        self.stats.inc_msgs(2)
        l_report.build_report(Reports.asylum_report_request, self.report, self.stats)
        # print report.json()['Polis']

        thread = ThreadModel(Reports.asylum["Polis"][0])
        self.assertEqual(5, thread.msg_count())
        thread = ThreadModel(Reports.asylum["Asylum Games"][0])
        self.assertEqual(1, thread.msg_count())
        thread = ThreadModel(Reports.asylum["Banjooli"][0])
        self.assertEqual(1, thread.msg_count())

        self.assertEquals(10, self.stats._msgs)
        self.assertEquals(self.stats._threads, 5)
Example #10
0
class TestThreadModel(unittest.TestCase):

    def setUp(self):
        self.empty_thread = ThreadModel({"msgs": [{}], 'answers': '0'})
        self.thread = ThreadModel(Reports.threats_with_newline.copy())

    def test_date(self):
        self.assertIsNone(self.empty_thread.date())
        self.empty_thread.set_date("X")
        self.assertEqual("X",  self.empty_thread.date())

    def test_get_id_last_msg(self):
        _id = self.thread.id_last_msg()
        self.assertEqual(_id, "msg_1169262")

    def test_get_id_last_msg_return_null_if_not_id(self):
        result_id = self.empty_thread.id_last_msg()
        self.assertIsNone(result_id)

    def test_date_last_msg(self):
        self.assertEqual(u' 24 de Octubre de 2013, 08:22:36 am \xbb', self.thread.date_last_msg())

    def test_when_thread_has_no_answers_return_num_of_msg_minus_one(self):
        """ LaBSK doe snot count the first msg
        """
        thread = ThreadModel({'msgs': [{}, {}]})
        self.assertEqual(1, thread.answers())

        thread = ThreadModel({'msgs': []})
        self.assertEqual(-1, thread.answers())

        thread = ThreadModel({'msgs': [{u'date': u' 18 de Septiembre de 2013, 05:19:46 pm \xbb', u'body': u'Dejo por aqu\xed varios enlaces a nuestros \xfaltimos programas.\xa0 Hemos dejado de ser programa de radio de momento (espero que despu\xe9s de las fiestas del Pilar volvamos a serlo) as\xed que el sonido no es muy bueno, pero creo que las entrevistas son muy interesantes porque los invitados lo son\xa0 Proyecto de revista de juegos de mesa en papel y otros temas:Pedro Soto y otros temas:', u'user': u'verarua'}]})
        self.assertEqual(0, thread.answers())

    def test_answers_is_numer(self):
        #print type(self.thread.answers())
        self.assertIsInstance(self.thread.answers(), int)

    def test_num_of_msgs(self):
        t = {u'source': u'LaBSK', u'link': u'http://labsk.net/index.php?topic=127181.0', u'msgs':
             [{u'date': u' 07 de Febrero de 2014, 01:00:21 pm \xbb', u'body': u'', u'user': u'LudoNoticias'},
              {u'date': u' 07 de Febrero de 2014, 05:00:54 pm \xbb', u'body': u'Recuerdo haber jugado hace mucho tiempo con las miniaturas aquellas, de la marca Grenadier si mi memoria no falla... lo cierto es que al ser un juego mas interpretativo y no tan tactico como pudiera ser un D&D las dejamos de usar, asi que para mi, en cuanto a una partida de rol, me parecen mas objeto de coleccionismo que otra cosa, salvo que las quieras usar para un Mansiones o un Arkham\xa0 ', u'user': u'Ech-Pi-El'},
              {u'date': u' 08 de Febrero de 2014, 03:34:44 am \xbb', u'body': u'Sinceramente chicos, si quer\xe9is miniaturas chulas de Cthulhu y sus colegas, huid de estas... cosas e iros a por las de Cthulhu Wars Es que no hay comparaci\xf3n alguna, da hasta verg\xfcenza ajena...Vs', u'user': u'Torke'}], u'title': u'Call of Cthulhu, las miniaturas para sus m\xf3dulos'}

        thread = ThreadModel(t)
        self.assertEqual(3, thread.msg_count())

    def test_when_thread_has_no_msgs_key_then_the_count_of_msgs_is_0(self):
        """ LaBSK doe snot count the first msg
        """
        thread = ThreadModel({})
        self.assertEqual(0, thread.msg_count())

    def test_year_last_msg(self):
        self.assertEqual(self.thread.year_last_msg(), 2013)

    def test_add_creation_and_last_update_dates(self):

        t = {u'source': u'LaBSK', u'link': u'http://labsk.net/index.php?topic=127181.0', u'msgs': [{u'date': u' 07 de Febrero de 2014, 01:00:21 pm \xbb', u'body': u'', u'user': u'LudoNoticias'},
                                                                                                   {u'date': u' 07 de Febrero de 2014, 05:00:54 pm \xbb', u'body': u'Recuerdo haber jugado hace mucho tiempo con las miniaturas aquellas, de la marca Grenadier si mi memoria no falla... lo cierto es que al ser un juego mas interpretativo y no tan tactico como pudiera ser un D&D las dejamos de usar, asi que para mi, en cuanto a una partida de rol, me parecen mas objeto de coleccionismo que otra cosa, salvo que las quieras usar para un Mansiones o un Arkham\xa0 ', u'user': u'Ech-Pi-El'},
                                                                                                   {u'date': u' 08 de Febrero de 2014, 03:34:44 am \xbb', u'body': u'Sinceramente chicos, si quer\xe9is miniaturas chulas de Cthulhu y sus colegas, huid de estas... cosas e iros a por las de Cthulhu Wars Es que no hay comparaci\xf3n alguna, da hasta verg\xfcenza ajena...Vs', u'user': u'Torke'}
                ], u'title': u'Call of Cthulhu, las miniaturas para sus m\xf3dulos'}

        thread = ThreadModel(t)
        thread.add_creation_and_last_update_dates()
        self.assertEqual(t['creation_date'], u' 07 de Febrero de 2014, 01:00:21 pm \xbb')
        self.assertEqual(t['last_msg_date'], u' 08 de Febrero de 2014, 03:34:44 am \xbb')

    def test_year_last_msg_with_finplay_thread(self):
        thread_json = {u'msgs':
            [
            {u'date': u' 05 de Noviembre de 2013, 04:26:29 pm \xbb',
             u'body': u'http://finplay.es/index.php?p=1\nAqu\xed ten\xe9is el enlace de lo que se ir\xe1 a\xf1adiendo con precios m\xe1s bajitos. Quiz\xe1 encuentres lo que justo buscabas ah\xed jejejeje.\nWALKING DEAD \nLA FUGA DE COLDITZ\nEXP. de CATAN\nDIRECTOR DE CAMPA\xd1A\nDOMINION: COMARCAS\nY poco a poco ir\xe1n creciendo (los juegos jejeje no los precios) \n \n', u'user': u'elqueaprende', u'id': u'msg_1173837'},
            {u'date': u'22 de Marzo de 2014, a las 03:34:43 pm \xbb', u'body': u'http://www.juegosdemesafinplay.com/genero-41-ofertones\nhttp://www.juegosdemesafinplay.com/index.php?p=2\nhttp://www.juegosdemesafinplay.com/index.php?p=3\nSin piedad bajamos los precios de:\nCONCORDIA\nDARK DARKER DARKEST\nAGRICOLA 2 JUGADORES\nARRIALA\nCARGO NOIR\nEL PUERTO FLUVIAL\nDOMINION: COMARCAS\nROGUE AGENT\nSPECULATION\nTINNERS TRAILS\nPASHA\nTRAJAN\nSHADOWS OVER THE EMPIRE\nARCHON\nPLANET STEAM\nS\xf3lo en \nwww.juegosdemesafinplay.es\n\xa0\n \n \n \n \n',
             u'user': u'elqueaprende',
             u'id': u'msg_1246664'}
             ], u'title': u'OFERTONES en FINPLAY!!!', u'answers': 2,
             u'source': u'LaBSK',
             u'link': u'http://labsk.net/index.php?topic=121033.0', u'location': u'Publicidad'}
        thread_obj = ThreadModel(thread_json)

        msg_list_objct = MsgListModel(thread_json['msgs'])
        self.assertEqual(msg_list_objct.lastmsg_object().year(), 2014)
        self.assertEqual(thread_obj.year_last_msg(), 2014)

    def test_thread_object_always_has_msgs(self):
        self.assertTrue(self.thread.has_msgs())

    def test_replace_msgs_objs(self):
        thread = ThreadModel(Reports.get_asylum_polis_thread())
        self.assertGreater(thread.msg_count(), 1)
        thread.replace_msgs_objs([MsgModel({})])
        self.assertEqual(thread.msg_count(), 1)
Example #11
0
 def test_answers_y_views(self):
     thread = ThreadModel(self.factory.create(self.fragment))
     self.assertEqual(thread.answers(), 10)
     self.assertEqual(thread.views(), "490")
Example #12
0
 def test_location(self):
     self.factory.urlobject = URL("Url", "Desc")
     thread = ThreadModel(self.factory.create(self.fragment))
     self.assertEqual(thread.location(), u'Desc')
Example #13
0
 def test_location_is_empty_when_no_Urlobject_is_given(self):
     thread = ThreadModel(self.factory.create(self.fragment))
     self.assertEqual(thread.location(), "")
Example #14
0
 def setUp(self):
     self.thread_obj = ThreadModel(Reports.get_asylum_polis_thread())
     self.msg_count = self.thread_obj.msg_count()
     self.filter2012 = FilterMsgYear('2012')
Example #15
0
 def setUp(self):
     self.processthread = ProcessThread()
     self.t01 = ThreadModel(Reports.get_asylum_thread())
     self.t02 = ThreadModel(Reports.get_asylum_thread())
     self.listener = mock()
     self.processthread.listener = self.listener
Example #16
0
 def _add_creation_and_last_msg_date(self, thread):
     if 'creation_date' in thread:
         return
     thread_obj = ThreadModel(thread)
     thread_obj.add_creation_and_last_update_dates()
Example #17
0
 def test_when_thread_has_no_msgs_key_then_the_count_of_msgs_is_0(self):
     """ LaBSK doe snot count the first msg
     """
     thread = ThreadModel({})
     self.assertEqual(0, thread.msg_count())
Example #18
0
 def test_replace_msgs_objs(self):
     thread = ThreadModel(Reports.get_asylum_polis_thread())
     self.assertGreater(thread.msg_count(), 1)
     thread.replace_msgs_objs([MsgModel({})])
     self.assertEqual(thread.msg_count(), 1)
Example #19
0
 def setUp(self):
     self.obj_thread = ThreadModel(Reports.get_asylum_thread())
     self.obj_thread.set_answers(59)
     self.mock_listener = mock()
     self.db = MongoDB()
     self.db.query("labsk_merge")
Example #20
0
 def setUp(self):
     self.empty_thread = ThreadModel({"msgs": [{}], 'answers': '0'})
     self.thread = ThreadModel(Reports.threats_with_newline.copy())
Example #21
0
 def _get_date_for_thread(self, thread):
     thread_obj = ThreadModel(thread)
     return thread_obj.last_msg_date_as_datetime()
Example #22
0
class TestProcessThread(unittest.TestCase):

    def setUp(self):
        self.processthread = ProcessThread()
        self.t01 = ThreadModel(Reports.get_asylum_thread())
        self.t02 = ThreadModel(Reports.get_asylum_thread())
        self.listener = mock()
        self.processthread.listener = self.listener

    def test_set_the_limit_for_process_msg(self):
        #self.processthread.setMsgPageLimit(4)
        self. processthread.msgpagelimit = 4
        process = self. processthread._createProcessMsgs()
        self.assertEqual(process.pagelimit, 4)

    # Pocess Thread
    def test_createThreadStruct(self):
        mockweb = MockWebClient(HTMLFactory.tablamensajes_html())
        self.threadfactory = AsuntoFactory(mockweb)
        self.assertEquals("", self.threadfactory.nextUrl())
        thread = self.threadfactory.create(HTMLFactory.asunto())
        msgs = list()
        struct = ThreadModel(self. processthread._createThreadStruct(thread, msgs))

        self.assertEquals("LaBSK", struct.source())
        self.assertEquals(thread['title'], struct.title())
        self.assertEquals(struct.answers(), 0)
        self.assertIsInstance(struct.json()['msgs'], list)

    def test_when_thread_is_new_then_store_it(self):
        self.processthread.database = mock()
        self.processthread.processmsgfactory = mock()
        page = mock()
        when(page).createListOfMsgs().thenReturn(list())
        when(self.processthread.processmsgfactory).create(any()).thenReturn(page)
        thread = mock()

        self.processthread._evaluate_thread(thread)

        verify(self.processthread.database, times=1).saveThread(any())

    def test_when_thread_exists_not_saved(self):
        self.db = mock()
        when(self.db).find_one_by('link', self.t01.link()).thenReturn(self.t01.json())
        self.processthread.database = self.db

        self.processthread._evaluate_thread(self.t01)

        verify(self.db, times=1).find_one_by('link', self.t01.link())
        verify(self.db, times=0).saveThread(any())
        verify(self.listener, times=1).skippingUnmodifiedThread(any(), any())


    def test_hilo_igual_es_no_modificado(self):
        self.assertTrue(self.processthread._is_unmodified(self.t01, self.t02))

    def test_hilo_distinto_num_de_mensajes_es_modificado(self):
        self.t01.msgList().append_msg({'date': "Otra fecha"})
        self.assertFalse(self.processthread._is_unmodified(self.t01, self.t02))

    """ Ya no uso este criterio