Ejemplo n.º 1
0
class CalleYCalleTestCase(unittest.TestCase):
    p = Partido('jose_c_paz', u'José C. Paz', u'Partido de José C. Paz',
                2430431)
    nd = NormalizadorDirecciones(p)
    cargarCallejeroEstatico(nd.c)

    def _checkDireccion(self, direccion, codigo_calle, nombre_calle,
                        codigo_cruce, nombre_cruce, codigo_partido, localidad):
        self.assertTrue(isinstance(direccion, Direccion))
        self.assertEqual(direccion.tipo, CALLE_Y_CALLE)
        self.assertEqual(direccion.calle.codigo, codigo_calle)
        self.assertEqual(direccion.calle.nombre, nombre_calle)
        self.assertEqual(direccion.cruce.codigo, codigo_cruce)
        self.assertEqual(direccion.cruce.nombre, nombre_cruce)
        self.assertEqual(direccion.partido.codigo, codigo_partido)
        self.assertEqual(direccion.localidad, localidad)

    def testCalleInexistente01(self):
        self.assertRaises(ErrorCalleInexistente, self.nd.normalizar,
                          u'Elm street y Roque Sáenz Peña')

    def testCalleInexistente02(self):
        self.assertRaises(ErrorCruceInexistente, self.nd.normalizar,
                          u'Roque Sáenz Peña y kokusai dori')

    def testCalle1UnicaCalle2UnicaCruceInexistente(self):
        try:
            self.nd.normalizar('Mateo Bootz y pavon')
        except Exception, e:
            self.assertTrue(isinstance(e, ErrorCruceInexistente))
Ejemplo n.º 2
0
class CalleAlturaTestCase(unittest.TestCase):
    p = Partido('jose_c_paz', u'José C. Paz', u'Partido de José C. Paz',
                2430431)
    nd_jcp = NormalizadorDirecciones(p)
    cargarCallejeroEstatico(nd_jcp.c)

    p = Partido('la_plata', u'La Plata', u'Partido de La Plata', 2499263)
    nd_lp = NormalizadorDirecciones(p)
    cargarCallejeroEstatico(nd_lp.c)

    def _checkDireccion(self, direccion, codigo, nombre, altura):
        self.assertTrue(isinstance(direccion, Direccion))
        self.assertEqual(direccion.calle.codigo, codigo)
        self.assertEqual(direccion.calle.nombre, nombre)
        self.assertEqual(direccion.altura, altura)

    def testCalleInexistente(self):
        self.assertRaises(ErrorCalleInexistente, self.nd_jcp.normalizar,
                          "Evergreen Terrace 742")

    def testCalleInexistente2(self):
        self.assertRaises(ErrorCalleInexistente, self.nd_jcp.normalizar,
                          "av arcos 1234")

    def testUnicaCalleExistente(self):
        res = self.nd_jcp.normalizar(u'Roque Sáenz Peña 5050')
        self.assertTrue(isinstance(res, list))
        self.assertEqual(len(res), 1, "Deberia haber un unico matching")
        self._checkDireccion(res[0], 77440, u'Roque Sáenz Peña', 5050)

    def testUnicaCalleExistenteConAlturaInexistente(self):
        self.assertRaises(ErrorCalleInexistenteAEsaAltura,
                          self.nd_jcp.normalizar, u'Roque Sáenz Peña 505')

    def testMuchasCallesSinAlturaValida(self):
        try:
            self.nd_jcp.normalizar(u'santiago 5000')
            self.assertTrue(False, "Si llega aca es que no tiro la excepcion")
        except Exception, e:
            self.assertTrue(isinstance(e, ErrorCalleInexistenteAEsaAltura))
Ejemplo n.º 3
0
    def __init__(self, include_list=[], exclude_list=[], config={}):
        # default config
        self.config = default_settings.copy()
        # custom config
        self.config.update(config)

        self.normalizadores = []
        try:
            partidos = self._getPartidosAMBA()
            partidos = [[1, u'caba', u'CABA', u'CABA Ciudad Autónoma de Buenos Aires']] + partidos

            for p in partidos:
                if p[1] not in exclude_list and (len(include_list) == 0 or p[1] in include_list):
                    partido = Partido(p[1], p[2], p[3], p[0])
                    nd = NormalizadorDirecciones(partido, self.config)
                    self.normalizadores.append(nd)

        except urllib2.HTTPError, e:
            e.detalle = u'Se produjo un error al intentar cargar la información de partidos.'
            raise e
class CalleAlturaTestCase(unittest.TestCase):
    p = Partido('jose_c_paz', 'José C. Paz', 'Partido de José C. Paz', 2430431)
    nd_jcp = NormalizadorDirecciones(p)
    cargarCallejeroEstatico(nd_jcp.c)

    p = Partido('la_plata', 'La Plata', 'Partido de La Plata', 2499263)
    nd_lp = NormalizadorDirecciones(p)
    cargarCallejeroEstatico(nd_lp.c)

    def _checkDireccion(self, direccion, codigo, nombre, altura):
        self.assertTrue(isinstance(direccion, Direccion))
        self.assertEqual(direccion.calle.codigo, codigo)
        self.assertEqual(direccion.calle.nombre, nombre)
        self.assertEqual(direccion.altura, altura)

    def testCalleInexistente(self):
        self.assertRaises(ErrorCalleInexistente, self.nd_jcp.normalizar,
                          "Evergreen Terrace 742")

    def testCalleInexistente2(self):
        self.assertRaises(ErrorCalleInexistente, self.nd_jcp.normalizar,
                          "av arcos 1234")

    def testUnicaCalleExistente(self):
        res = self.nd_jcp.normalizar('Roque Sáenz Peña 5050')
        self.assertTrue(isinstance(res, list))
        self.assertEqual(len(res), 1, "Deberia haber un unico matching")
        self._checkDireccion(res[0], 77440, 'Roque Sáenz Peña', 5050)

    def testUnicaCalleExistenteConAlturaInexistente(self):
        self.assertRaises(ErrorCalleInexistenteAEsaAltura,
                          self.nd_jcp.normalizar, 'Roque Sáenz Peña 505')

    def testMuchasCallesSinAlturaValida(self):
        try:
            self.nd_jcp.normalizar('santiago 5000')
            self.assertTrue(False, "Si llega aca es que no tiro la excepcion")
        except Exception as e:
            self.assertTrue(isinstance(e, ErrorCalleInexistenteAEsaAltura))

    def testMuchasCallesUnaConAlturaValida(self):
        res = self.nd_jcp.normalizar('santiago 4000')
        self.assertTrue(isinstance(res, list))
        self.assertEqual(len(res), 1, "Deberia haber un unico matching")
        self._checkDireccion(res[0], 11840, 'Santiago del Estero', 4000)

    def testMuchasCallesVariasConAlturaValida(self):
        res = self.nd_jcp.normalizar('santiago 3500')
        self.assertTrue(isinstance(res, list))
        self.assertEqual(len(res), 2, "Deberia haber 2 matchings")
        self._checkDireccion(res[0], 11840, 'Santiago del Estero', 3500)
        self._checkDireccion(res[1], 77662, 'Santiago L. Copello', 3500)

    def testCalleConPuntoConAlturaValida(self):
        res = self.nd_jcp.normalizar("Santiago L. Copello 817")
        self.assertTrue(isinstance(res, list))
        self.assertEqual(len(res), 1, "Deberia haber un unico matching")
        self._checkDireccion(res[0], 77662, 'Santiago L. Copello', 817)

    def testCalleConEnieConAlturaValida(self):
        res = self.nd_jcp.normalizar('Roque Sáenz Peña 5050')
        self.assertTrue(isinstance(res, list))
        self.assertEqual(len(res), 1, "Deberia haber un unico matching")
        self._checkDireccion(res[0], 77440, 'Roque Sáenz Peña', 5050)

    def testCalleConEnieEscritaConNConAlturaValida2(self):
        res = self.nd_jcp.normalizar('Roque Sáenz Pena 5050')
        self.assertTrue(isinstance(res, list))
        self.assertEqual(len(res), 1, "Deberia haber un unico matching")
        self._checkDireccion(res[0], 77440, 'Roque Sáenz Peña', 5050)

    def testCalleConDieresisConAlturaValida(self):
        res = self.nd_jcp.normalizar('echagüe 2144')
        self.assertTrue(isinstance(res, list))
        self.assertEqual(len(res), 1, "Deberia haber un unico matching")
        self._checkDireccion(res[0], 182799, 'Juan Pablo Echagüe', 2144)

        res = self.nd_jcp.normalizar('echague 2144')
        self.assertTrue(isinstance(res, list))
        self.assertEqual(len(res), 1, "Deberia haber un unico matching")
        self._checkDireccion(res[0], 182799, 'Juan Pablo Echagüe', 2144)

    def testCalleConApostrofe(self):
        res = self.nd_jcp.normalizar('D\'Elía 4321')
        self.assertTrue(isinstance(res, list))
        self.assertEqual(len(res), 1, "Deberia haber un unico matching")
        self._checkDireccion(res[0], 53381, 'Maestro Ángel D\'Elía', 4321)

        res = self.nd_jcp.normalizar('D Elía 4321')
        self.assertTrue(isinstance(res, list))
        self.assertEqual(len(res), 1, "Deberia haber un unico matching")
        self._checkDireccion(res[0], 53381, 'Maestro Ángel D\'Elía', 4321)

        res = self.nd_jcp.normalizar('Delía 4321')
        self.assertTrue(isinstance(res, list))
        self.assertEqual(len(res), 1, "Deberia haber un unico matching")
        self._checkDireccion(res[0], 53381, 'Maestro Ángel D\'Elía', 4321)

    def testCallesConY(self):
        res = self.nd_jcp.normalizar('gelly y obes 4375')
        self.assertTrue(isinstance(res, list))
        self.assertEqual(len(res), 1, "Deberia haber un unico matching")
        self._checkDireccion(res[0], 77481, 'Gelly y Obes', 4375)

        res = self.nd_jcp.normalizar('vicente lopez y planes 4375')
        self.assertTrue(isinstance(res, list))
        self.assertEqual(len(res), 1, "Deberia haber un unico matching")
        self._checkDireccion(res[0], 11702, 'Vicente López y Planes', 4375)

    def testCalleConMuchosEspacios(self):
        res = self.nd_jcp.normalizar(' tomas    guido    5000      ')
        self.assertTrue(isinstance(res, list))
        self.assertEqual(len(res), 1, "Deberia haber un unico matching")
        self._checkDireccion(res[0], 185640, 'Tomás Guido', 5000)

    def testCalleConCaracteresRaros(self):
        res = self.nd_jcp.normalizar(
            'tomas guido 5000 |°¬!#$%&/()=?\¿¡*¸+~{[^}]`-_.:,;<>·@')
        self.assertTrue(isinstance(res, list))
        self.assertEqual(len(res), 1, "Deberia haber un unico matching")
        self._checkDireccion(res[0], 185640, 'Tomás Guido', 5000)

    def testCalleConSeparadoresE(self):
        res = self.nd_jcp.normalizar('jose e rodo 3888')
        self.assertTrue(isinstance(res, list))
        self.assertEqual(len(res), 1, "Deberia haber un unico matching")
        self._checkDireccion(res[0], 78817, 'José E. Rodó', 3888)

    def testCalleConSinonimosAvenida(self):
        res = self.nd_jcp.normalizar('Avenida Maestro Ferreyra 3800')
        self.assertTrue(isinstance(res, list))
        self.assertEqual(len(res), 1, "Deberia haber un unico matching")
        self._checkDireccion(res[0], 301342, 'Av. Maestro Ferreyra', 3800)

        res = self.nd_jcp.normalizar('Avda Maestro Ferreyra 3800')
        self.assertTrue(isinstance(res, list))
        self.assertEqual(len(res), 1, "Deberia haber un unico matching")
        self._checkDireccion(res[0], 301342, 'Av. Maestro Ferreyra', 3800)

    def testCalleConSinonimosDoctor(self):
        res = self.nd_jcp.normalizar('Dr. Angel Gallardo 5800')
        self.assertTrue(isinstance(res, list))
        self.assertEqual(len(res), 1, "Deberia haber un unico matching")
        self._checkDireccion(res[0], 331441, 'Dr. Angel Gallardo', 5800)

        res = self.nd_jcp.normalizar('Doctor Angel Gallardo 5800')
        self.assertTrue(isinstance(res, list))
        self.assertEqual(len(res), 1, "Deberia haber un unico matching")
        self._checkDireccion(res[0], 331441, 'Dr. Angel Gallardo', 5800)

    def testCalleConSinonimosDoce(self):
        res = self.nd_jcp.normalizar('doce de octubre 50')
        self.assertTrue(isinstance(res, list))
        self.assertEqual(len(res), 1, "Deberia haber un unico matching")
        self._checkDireccion(res[0], 369059, '12 de Octubre', 50)

        res = self.nd_jcp.normalizar('12 de octubre 50')
        self.assertTrue(isinstance(res, list))
        self.assertEqual(len(res), 1, "Deberia haber un unico matching")
        self._checkDireccion(res[0], 369059, '12 de Octubre', 50)

    def testMatchComienzoDePalabra(self):
        res = self.nd_jcp.normalizar('Ave Mae Fer 3800')
        self.assertTrue(isinstance(res, list))
        self.assertEqual(len(res), 1, "Deberia haber un unico matching")
        self._checkDireccion(res[0], 301342, 'Av. Maestro Ferreyra', 3800)

    def testCallesQueTienenNumerosEnSuNombre01(self):
        res = self.nd_jcp.normalizar('18 de Octubre 3250')
        self.assertTrue(isinstance(res, list))
        self.assertEqual(len(res), 1, "Deberia haber un unico matching")
        self._checkDireccion(res[0], 77462, '18 de Octubre', 3250)

    def testCallesQueTienenNumerosEnSuNombre02(self):
        res = self.nd_lp.normalizar('Avenida 44 2000')
        self.assertTrue(isinstance(res, list))
        self.assertEqual(len(res), 1, "Deberia haber un unico matching")
        self._checkDireccion(res[0], 356811, 'Avenida 44', 2000)

    def testCallesQueTienenNumerosEnSuNombre03(self):
        res = self.nd_lp.normalizar('58 1600')
        self.assertTrue(isinstance(res, list))
        self.assertEqual(len(res), 1, "Deberia haber un unico matching")
        self._checkDireccion(res[0], 123404, '58', 1600)
Ejemplo n.º 5
0
class BuscadorDireccionesTestCase(unittest.TestCase):
    p = Partido('lomas_de_zamora', u'Lomas de Zamora', u'Partido de Lomas de Zamora', 2400639)
    nd = NormalizadorDirecciones(p)
    cargarCallejeroEstatico(nd.c)

    def _checkDireccionCalleAltura(self, direccion, codigo_calle, nombre_calle, altura_calle, codigo_partido, localidad):
        self.assertTrue(isinstance(direccion, Direccion))
        self.assertEqual(direccion.tipo, CALLE_ALTURA)
        self.assertEqual(direccion.calle.codigo, codigo_calle)
        self.assertEqual(direccion.calle.nombre, nombre_calle)
        self.assertEqual(direccion.altura, altura_calle)
        self.assertEqual(direccion.partido.codigo, codigo_partido)
        self.assertEqual(direccion.localidad, localidad)

    def _checkDireccionCalleYCalle(self, direccion, codigo_calle, nombre_calle, codigo_cruce, nombre_cruce, codigo_partido, localidad):
        self.assertTrue(isinstance(direccion, Direccion))
        self.assertEqual(direccion.tipo, CALLE_Y_CALLE)
        self.assertEqual(direccion.calle.codigo, codigo_calle)
        self.assertEqual(direccion.calle.nombre, nombre_calle)
        self.assertEqual(direccion.cruce.codigo, codigo_cruce)
        self.assertEqual(direccion.cruce.nombre, nombre_cruce)
        self.assertEqual(direccion.partido.codigo, codigo_partido)
        self.assertEqual(direccion.localidad, localidad)

    def test_Error_en_texto_vacio(self):
        self.assertRaises(ErrorTextoSinDireccion, self.nd.buscarDireccion, '')

    def test_Error_en_texto_sin_y_e_o_numeros(self):
        self.assertRaises(ErrorTextoSinDireccion, self.nd.buscarDireccion, u'Este texto no tiene dirección.')

    def test_Error_en_texto_con_palabra_con_y(self):
        self.assertRaises(ErrorTextoSinDireccion, self.nd.buscarDireccion, u'Este texto no tiene dirección, pero tiene yeeee.')

################
# Calle altura #
################

    def test_Error_en_texto_que_no_es_direccion(self):
        self.assertRaises(ErrorTextoSinDireccion, self.nd.buscarDireccion, 'Kokusai Doori 1262')

    def test_Error_direccion_con_altura_invalida(self):
        self.assertRaises(ErrorTextoSinDireccion, self.nd.buscarDireccion, 'Arenales 2563')

    def test_CalleAltura_al_comienzo_del_texto(self):
        res = self.nd.buscarDireccion(u'Loria 341, a metros de la estación.')
        self.assertEqual(len(res), 1)
        self.assertEqual(res[0]['posicion'], 0)
        self.assertEqual(res[0]['texto'], u'Loria 341')
        self._checkDireccionCalleAltura(res[0]['direcciones'][0], 18074, u'Mariano Sánchez de Loria', 341, 'lomas_de_zamora', 'Lomas de Zamora')

    def test_CalleAltura_al_final_del_texto(self):
        res = self.nd.buscarDireccion(u'Cerca de la estación de lomas. Laprida 11')
        self.assertEqual(len(res), 1)
        self.assertEqual(res[0]['posicion'], 31)
        self.assertEqual(res[0]['texto'], u'Laprida 11')
        self._checkDireccionCalleAltura(res[0]['direcciones'][0], 18028, u'Laprida', 11, 'lomas_de_zamora', 'Lomas de Zamora')

    def test_CalleAltura_al_comienzo_y_al_final_del_texto(self):
        res = self.nd.buscarDireccion(u'Belgrano 840')
        self.assertEqual(len(res), 1)
        self.assertEqual(res[0]['posicion'], 0)
        self.assertEqual(res[0]['texto'], u'Belgrano 840')
        self._checkDireccionCalleAltura(res[0]['direcciones'][0], 34017, u'Belgrano', 840, 'lomas_de_zamora', 'Lomas de Zamora')

    def test_CalleAltuta_conector_al(self):
        # Sin conector:
        res = self.nd.buscarDireccion(u'Ubicado en Boedo 150, a metros de la estación de Lomas de Zamora.')
        self.assertEqual(len(res), 1)
        self.assertEqual(res[0]['posicion'], 11)
        self.assertEqual(res[0]['texto'], u'Boedo 150')
        self._checkDireccionCalleAltura(res[0]['direcciones'][0], 323730, u'Mariano Boedo', 150, 'lomas_de_zamora', 'Lomas de Zamora')

        # Con conector:
        res = self.nd.buscarDireccion(u'Ubicado en Boedo al 150, a metros de la estación de Lomas de Zamora.')
        self.assertEqual(len(res), 1)
        self.assertEqual(res[0]['posicion'], 11)
        self.assertEqual(res[0]['texto'], u'Boedo al 150')
        self._checkDireccionCalleAltura(res[0]['direcciones'][0], 323730, u'Mariano Boedo', 150, 'lomas_de_zamora', 'Lomas de Zamora')

        # Palabra que termina con el conector (al)
        res = self.nd.buscarDireccion(u'Ubicado en Arenal 53, a metros de la estación de Lomas de Zamora.')
        self.assertEqual(len(res), 1)
        self.assertEqual(res[0]['posicion'], 11)
        self.assertEqual(res[0]['texto'], u'Arenal 53')
        self._checkDireccionCalleAltura(res[0]['direcciones'][0], 360326, u'General Arenales', 53, 'lomas_de_zamora', 'Lomas de Zamora')

    def test_CalleAltura_calle_con_y(self):
        res = self.nd.buscarDireccion(u'Ubicado en Carlos Guido y Spano 701, a metros de la estación de Lomas de Zamora.')
        self.assertEqual(len(res), 1)
        self.assertEqual(res[0]['posicion'], 11)
        self.assertEqual(res[0]['texto'], u'Carlos Guido y Spano 701')
        self._checkDireccionCalleAltura(res[0]['direcciones'][0], 20400, u'Carlos Guido y Spano', 701, 'lomas_de_zamora', 'Temperley')

    def test_CalleAltura_calle_con_1_o_mas_palabras(self):
        # 1 palabra
        res = self.nd.buscarDireccion(u'Ubicado en Pedernera 86, a metros de la estación de Lomas de Zamora.')
        self.assertEqual(len(res), 1)
        self.assertEqual(res[0]['posicion'], 11)
        self.assertEqual(res[0]['texto'], u'Pedernera 86')
        self._checkDireccionCalleAltura(res[0]['direcciones'][0], 34037, u'Pedernera', 86, 'lomas_de_zamora', 'Lomas de Zamora')

        # 2 palabras
        res = self.nd.buscarDireccion(u'Ubicado en Julio Fonrouge 356, a metros de la estación de Lomas de Zamora.')
        self.assertEqual(len(res), 1)
        self.assertEqual(res[0]['posicion'], 11)
        self.assertEqual(res[0]['texto'], u'Julio Fonrouge 356')
        self._checkDireccionCalleAltura(res[0]['direcciones'][0], 160708, u'Julio Fonrouge', 356, 'lomas_de_zamora', 'Lomas de Zamora')

        # 3 palabras
        res = self.nd.buscarDireccion(u'Ubicado en Monseñor Alejandro Schell 166, a metros de la estación de Lomas de Zamora.')
        self.assertEqual(len(res), 1)
        self.assertEqual(res[0]['posicion'], 11)
        self.assertEqual(res[0]['texto'], u'Monseñor Alejandro Schell 166')
        self._checkDireccionCalleAltura(res[0]['direcciones'][0], 34039, u'Monseñor Alejandro Schell', 166, 'lomas_de_zamora', 'Lomas de Zamora')

        # 4 palabras
        res = self.nd.buscarDireccion(u'Ubicado en Capitán de Fragata Moyano 701, a metros de la estación de Lomas de Zamora.')
        self.assertEqual(len(res), 1)
        self.assertEqual(res[0]['posicion'], 11)
        self.assertEqual(res[0]['texto'], u'Capitán de Fragata Moyano 701')
        self._checkDireccionCalleAltura(res[0]['direcciones'][0], 30647, u'Capitán de Fragata Moyano', 701, 'lomas_de_zamora', 'Llavallol')

        # un exceso...
        res = self.nd.buscarDireccion(u'Ubicado en Av. General Carlos María de Alvear 426, a metros de la estación de Lomas de Zamora.')
        self.assertEqual(len(res), 1)
        self.assertEqual(res[0]['posicion'], 11)
        self.assertEqual(res[0]['texto'], u'Av. General Carlos María de Alvear 426')
        self._checkDireccionCalleAltura(res[0]['direcciones'][0], 18772, u'Av. General Carlos María de Alvear', 426, 'lomas_de_zamora', 'Lomas de Zamora')

    def test_CalleAltura_calle_string_y_unicode(self):
        # string
        res = self.nd.buscarDireccion('Ubicado en sarandi 359.')
        self.assertEqual(len(res), 1)
        self.assertEqual(res[0]['posicion'], 11)
        self.assertEqual(res[0]['texto'], 'sarandi 359')
        self._checkDireccionCalleAltura(res[0]['direcciones'][0], 34004, u'Sarandi', 359, 'lomas_de_zamora', 'Lomas de Zamora')

        # unicode
        res = self.nd.buscarDireccion(u'Ubicado en sarandí 359.')
        self.assertEqual(len(res), 1)
        self.assertEqual(res[0]['posicion'], 11)
        self.assertEqual(res[0]['texto'], u'sarandí 359')
        self._checkDireccionCalleAltura(res[0]['direcciones'][0], 34004, u'Sarandi', 359, 'lomas_de_zamora', 'Lomas de Zamora')

    def test_CalleAltura_2_direcciones(self):
        res = self.nd.buscarDireccion(u'Ubicado en balcarce 325 y balcarce 327')
        self.assertEqual(len(res), 2)

        self.assertEqual(res[0]['posicion'], 11)
        self.assertEqual(res[0]['texto'], u'balcarce 325')
        self._checkDireccionCalleAltura(res[0]['direcciones'][0], 34011, u'Balcarce', 325, 'lomas_de_zamora', 'Lomas de Zamora')

        self.assertEqual(res[1]['posicion'], 26)
        self.assertEqual(res[1]['texto'], u'balcarce 327')
        self._checkDireccionCalleAltura(res[1]['direcciones'][0], 34011, u'Balcarce', 327, 'lomas_de_zamora', 'Lomas de Zamora')

    def test_CalleAltura_direccion_ambigua(self):
        res = self.nd.buscarDireccion(u'Ubicado en la calle martín 731')
        self.assertEqual(len(res), 1)
        self.assertEqual(res[0]['posicion'], 20)
        self.assertEqual(res[0]['texto'], u'martín 731')
        self._checkDireccionCalleAltura(res[0]['direcciones'][0], 18763, u'General José de San Martín', 731, 'lomas_de_zamora', 'Lomas de Zamora')
        self._checkDireccionCalleAltura(res[0]['direcciones'][1], 19098, u'Martín Capello', 731, 'lomas_de_zamora', 'Banfield')
        self._checkDireccionCalleAltura(res[0]['direcciones'][2], 19144, u'Av. General Martín Rodríguez', 731, 'lomas_de_zamora', 'Villa Centenario')

    def test_CalleAltura_direccion_con_calle_con_numero(self):
        res = self.nd.buscarDireccion(u'12 de octubre 535')
        self.assertEqual(len(res), 1)
        self.assertEqual(res[0]['posicion'], 0)
        self.assertEqual(res[0]['texto'], u'12 de octubre 535')
        self._checkDireccionCalleAltura(res[0]['direcciones'][0], 18579, u'12 de Octubre', 535, 'lomas_de_zamora', 'Lomas de Zamora')

    def test_CalleAltura_ejemplos_que_motivaron_esta_funcion_y_otros(self):
        # Direccion con piso y depto
        res = self.nd.buscarDireccion(u'Loria 341 piso 5 dpto C.')
        self.assertEqual(len(res), 1)
        self.assertEqual(res[0]['posicion'], 0)
        self.assertEqual(res[0]['texto'], u'Loria 341')
        self._checkDireccionCalleAltura(res[0]['direcciones'][0], 18074, u'Mariano Sánchez de Loria', 341, 'lomas_de_zamora', 'Lomas de Zamora')

        # Direccion con varias alturas
        res = self.nd.buscarDireccion(u'Dirección: Portela 576/578/580')
        self.assertEqual(len(res), 1)
        self.assertEqual(res[0]['posicion'], 11)
        self.assertEqual(res[0]['texto'], u'Portela 576')
        self._checkDireccionCalleAltura(res[0]['direcciones'][0], 18287, u'Francisco Portela', 576, 'lomas_de_zamora', 'Lomas de Zamora')

        # Direccion con codigo postal
        res = self.nd.buscarDireccion(u'boedo 367, cp 1832')
        self.assertEqual(len(res), 1)
        self.assertEqual(res[0]['posicion'], 0)
        self.assertEqual(res[0]['texto'], u'boedo 367')
        self._checkDireccionCalleAltura(res[0]['direcciones'][0], 323730, u'Mariano Boedo', 367, 'lomas_de_zamora', 'Lomas de Zamora')

        # Direccion formato calle al altura
        res = self.nd.buscarDireccion(u'Palacios al 1200')
        self.assertEqual(len(res), 1)
        self.assertEqual(res[0]['posicion'], 0)
        self.assertEqual(res[0]['texto'], u'Palacios al 1200')
        self._checkDireccionCalleAltura(res[0]['direcciones'][0], 628, u'General Palacios', 1200, 'lomas_de_zamora', 'Banfield')

        # Direccion con calles laterales
        res = self.nd.buscarDireccion(u'España 37 - Entre Gorriti y Laprida')
        self.assertEqual(len(res), 1)
        self.assertEqual(res[0]['posicion'], 0)
        self.assertEqual(res[0]['texto'], u'España 37')
        self._checkDireccionCalleAltura(res[0]['direcciones'][0], 18117, u'España', 37, 'lomas_de_zamora', 'Lomas de Zamora')

        # Direccion con calles laterales
        res = self.nd.buscarDireccion(u'Av. H. Yrigoyen 9399 esq. Oliden')
        self.assertEqual(len(res), 1)
        self.assertEqual(res[0]['posicion'], 0)
        self.assertEqual(res[0]['texto'], u'Av. H. Yrigoyen 9399')
        self._checkDireccionCalleAltura(res[0]['direcciones'][0], 252522, u'Avenida Hipólito Yrigoyen', 9399, 'lomas_de_zamora', 'Lomas de Zamora')

        # Direccion con zonas de referencia
        res = self.nd.buscarDireccion(u'Vicente Oliden 2385 -Parque Barón - Lomas de Zamora')
        self.assertEqual(len(res), 1)
        self.assertEqual(res[0]['posicion'], 0)
        self.assertEqual(res[0]['texto'], u'Vicente Oliden 2385')
        self._checkDireccionCalleAltura(res[0]['direcciones'][0], 18214, u'Vicente Oliden', 2385, 'lomas_de_zamora', 'Lomas de Zamora')

    def test_CalleYCalle_ojo_con_este_caso_calle_con_numeros_al_comienzo(self):
        res = self.nd.buscarDireccion(u'30 de Septiembre 3750, a metros de la estación.')
        self.assertEqual(len(res), 1)
        self.assertEqual(res[0]['posicion'], 0)
        self.assertEqual(res[0]['texto'], u'30 de Septiembre 3750')
        self._checkDireccionCalleAltura(res[0]['direcciones'][0], 123232, u'30 de Septiembre', 3750, 'lomas_de_zamora', 'Temperley')

    def test_CalleYCalle_ojo_con_este_caso_calle_con_numeros_en_medio(self):
        res = self.nd.buscarDireccion(u'Ubicado en 30 de Septiembre 3750, a metros de la estación.')
        self.assertEqual(len(res), 2)

        self.assertEqual(res[0]['posicion'], 8)
        self.assertEqual(res[0]['texto'], u'en 30')
        self._checkDireccionCalleAltura(res[0]['direcciones'][0], 18586, u'Entre Ríos', 30, 'lomas_de_zamora', 'Lomas de Zamora')
        self._checkDireccionCalleAltura(res[0]['direcciones'][1], 18600, u'Enrique Sántos Discépolo', 30, 'lomas_de_zamora', 'Lomas de Zamora')
        self._checkDireccionCalleAltura(res[0]['direcciones'][2], 45454, u'Blanco Encalada', 30, 'lomas_de_zamora', 'Temperley')

        self.assertEqual(res[1]['posicion'], 11)
        self.assertEqual(res[1]['texto'], u'30 de Septiembre 3750')
        self._checkDireccionCalleAltura(res[1]['direcciones'][0], 123232, u'30 de Septiembre', 3750, 'lomas_de_zamora', 'Temperley')

#################
# Calle y calle #
#################

    def test_error_en_texto_que_no_es_esquina(self):
        # no calle y no calle
        self.assertRaises(ErrorTextoSinDireccion, self.nd.buscarDireccion, u'Kokusai Doori y aoi michi')
        self.assertRaises(ErrorTextoSinDireccion, self.nd.buscarDireccion, u'国際通り y 青道')
        # calle y no calle
        self.assertRaises(ErrorTextoSinDireccion, self.nd.buscarDireccion, u'Laprida y aoi michi')
        # no calle y calle
        self.assertRaises(ErrorTextoSinDireccion, self.nd.buscarDireccion, u'Kokusai Doori y Boedo')

    def test_error_en_calles_que_no_se_cruzan(self):
        self.assertRaises(ErrorTextoSinDireccion, self.nd.buscarDireccion, u'Fonrouge y Lamadrid')

    def test_CalleYCalle_direccion_en_distintas_parte_del_texto(self):
        # Comienzo
        res = self.nd.buscarDireccion(u'Loria y Sarmiento, a metros de la estación.')
        self.assertEqual(len(res), 1)
        self.assertEqual(res[0]['posicion'], 0)
        self.assertEqual(res[0]['texto'], u'Loria y Sarmiento,')
        self._checkDireccionCalleYCalle(res[0]['direcciones'][0], 18074, u'Mariano Sánchez de Loria', 18120, u'Domingo Faustino Sarmiento', 'lomas_de_zamora', u'Lomas de Zamora')
        # Medio
        res = self.nd.buscarDireccion(u'Ubicado en Loria y Sarmiento, a metros de la estación.')
        self.assertEqual(len(res), 1)
        self.assertEqual(res[0]['posicion'], 11)
        self.assertEqual(res[0]['texto'], u'Loria y Sarmiento,')
        self._checkDireccionCalleYCalle(res[0]['direcciones'][0], 18074, u'Mariano Sánchez de Loria', 18120, u'Domingo Faustino Sarmiento', 'lomas_de_zamora', u'Lomas de Zamora')
        # Final
        res = self.nd.buscarDireccion(u'Ubicado en Loria y Sarmiento.')
        self.assertEqual(len(res), 1)
        self.assertEqual(res[0]['posicion'], 11)
        self.assertEqual(res[0]['texto'], u'Loria y Sarmiento.')
        self._checkDireccionCalleYCalle(res[0]['direcciones'][0], 18074, u'Mariano Sánchez de Loria', 18120, u'Domingo Faustino Sarmiento', 'lomas_de_zamora', u'Lomas de Zamora')
        # Comienzo y final
        res = self.nd.buscarDireccion(u'Loria y Sarmiento')
        self.assertEqual(len(res), 1)
        self.assertEqual(res[0]['posicion'], 0)
        self.assertEqual(res[0]['texto'], u'Loria y Sarmiento')
        self._checkDireccionCalleYCalle(res[0]['direcciones'][0], 18074, u'Mariano Sánchez de Loria', 18120, u'Domingo Faustino Sarmiento', 'lomas_de_zamora', u'Lomas de Zamora')

    def test_CalleYCalle_direcciones_con_y_y_con_e(self):
        # Con y
        res = self.nd.buscarDireccion(u'Loria y España')
        self.assertEqual(len(res), 1)
        self.assertEqual(res[0]['posicion'], 0)
        self.assertEqual(res[0]['texto'], u'Loria y España')
        self._checkDireccionCalleYCalle(res[0]['direcciones'][0], 18074, u'Mariano Sánchez de Loria', 18117, u'España', 'lomas_de_zamora', u'Lomas de Zamora')
        # Con e
        res = self.nd.buscarDireccion(u'Loria e Italia')
        self.assertEqual(len(res), 1)
        self.assertEqual(res[0]['posicion'], 0)
        self.assertEqual(res[0]['texto'], u'Loria e Italia')
        self._checkDireccionCalleYCalle(res[0]['direcciones'][0], 18074, u'Mariano Sánchez de Loria', 18119, u'Italia', 'lomas_de_zamora', u'Lomas de Zamora')

    def test_CalleYCalle_direccion_con_calles_de_una_palabra(self):
        res = self.nd.buscarDireccion(u'Arenales y Fonrouge')
        self.assertEqual(len(res), 1, u'Debería haber 1 dirección. Hay {0}'.format(len(res)))
        self.assertEqual(len(res[0]['direcciones']), 1, u'Debería haber 1 matching/s. Hay {0}'.format(len(res[0]['direcciones'])))
        self.assertEqual(res[0]['posicion'], 0)
        self.assertEqual(res[0]['texto'], u'Arenales y Fonrouge')
        self._checkDireccionCalleYCalle(res[0]['direcciones'][0], 360326, u'General Arenales', 160708, u'Julio Fonrouge', 'lomas_de_zamora', u'Lomas de Zamora')

        res = self.nd.buscarDireccion(u'Loria e italia')
        self.assertEqual(len(res), 1, u'Debería haber 1 dirección. Hay {0}'.format(len(res)))
        self.assertEqual(len(res[0]['direcciones']), 1, u'Debería haber 1 matching/s. Hay {0}'.format(len(res[0]['direcciones'])))
        self.assertEqual(res[0]['posicion'], 0)
        self.assertEqual(res[0]['texto'], u'Loria e italia')
        self._checkDireccionCalleYCalle(res[0]['direcciones'][0], 18074, u'Mariano Sánchez de Loria', 18119, u'Italia', 'lomas_de_zamora', u'Lomas de Zamora')

        res = self.nd.buscarDireccion(u'malabia y palacios')
        self.assertEqual(len(res), 1, u'Debería haber 1 dirección. Hay {0}'.format(len(res)))
        self.assertEqual(len(res[0]['direcciones']), 1, u'Debería haber 1 matching/s. Hay {0}'.format(len(res[0]['direcciones'])))
        self.assertEqual(res[0]['posicion'], 0)
        self.assertEqual(res[0]['texto'], u'malabia y palacios')
        self._checkDireccionCalleYCalle(res[0]['direcciones'][0], 553, u'Malabia', 628, u'General Palacios', 'lomas_de_zamora', u'Banfield')

        res = self.nd.buscarDireccion(u'brown y peron')
        self.assertEqual(len(res), 1, u'Debería haber 1 dirección. Hay {0}'.format(len(res)))
        self.assertEqual(len(res[0]['direcciones']), 1, u'Debería haber 1 matching/s. Hay {0}'.format(len(res[0]['direcciones'])))
        self.assertEqual(res[0]['posicion'], 0)
        self.assertEqual(res[0]['texto'], u'brown y peron')
        self._checkDireccionCalleYCalle(res[0]['direcciones'][0], 25606, u'Almirante Brown', 196982, u'Av. Eva Perón', 'lomas_de_zamora', u'Temperley')

    def test_CalleYCalle_direccion_con_calles_de_mas_de_una_palabra(self):
        res = self.nd.buscarDireccion(u'General Arenales y Julio Fonrouge')
        self.assertEqual(len(res), 1, u'Debería haber 1 dirección. Hay {0}'.format(len(res)))
        self.assertEqual(len(res[0]['direcciones']), 1, u'Debería haber 1 matching/s. Hay {0}'.format(len(res[0]['direcciones'])))
        self.assertEqual(res[0]['posicion'], 0)
        self.assertEqual(res[0]['texto'], u'General Arenales y Julio Fonrouge')
        self._checkDireccionCalleYCalle(res[0]['direcciones'][0], 360326, u'General Arenales', 160708, u'Julio Fonrouge', 'lomas_de_zamora', u'Lomas de Zamora')

    def test_CalleYCalle_el_orden_de_los_factores_altera_el_producto(self):
        res = self.nd.buscarDireccion(u'Arenales y Fonrouge')
        self.assertEqual(len(res), 1, u'Debería haber 1 dirección. Hay {0}'.format(len(res)))
        self.assertEqual(len(res[0]['direcciones']), 1, u'Debería haber 1 matching/s. Hay {0}'.format(len(res[0]['direcciones'])))
        self._checkDireccionCalleYCalle(res[0]['direcciones'][0], 360326, u'General Arenales', 160708, u'Julio Fonrouge', 'lomas_de_zamora', u'Lomas de Zamora')

        res = self.nd.buscarDireccion(u'Fonrouge y Arenales')
        self.assertEqual(len(res), 1, u'Debería haber 1 dirección. Hay {0}'.format(len(res)))
        self.assertEqual(len(res[0]['direcciones']), 1, u'Debería haber 1 matching/s. Hay {0}'.format(len(res[0]['direcciones'])))
        self._checkDireccionCalleYCalle(res[0]['direcciones'][0], 160708, u'Julio Fonrouge', 360326, u'General Arenales', 'lomas_de_zamora', u'Lomas de Zamora')

    def test_CalleYCalle_ojo_con_este_caso_palabra_colada(self):
        res = self.nd.buscarDireccion(u'Loria y Meeks, a metros de la estación.')
        self.assertEqual(len(res), 1)
        self.assertEqual(res[0]['posicion'], 0)
        self.assertEqual(res[0]['texto'], u'Loria y Meeks, a')
        self._checkDireccionCalleYCalle(res[0]['direcciones'][0], 18074, u'Mariano Sánchez de Loria', 18112, u'Av. Meeks', 'lomas_de_zamora', u'Lomas de Zamora')
class CalleYCalleTestCase(unittest.TestCase):
    p = Partido('jose_c_paz', 'José C. Paz', 'Partido de José C. Paz', 2430431)
    nd = NormalizadorDirecciones(p)
    cargarCallejeroEstatico(nd.c)

    def _checkDireccion(self, direccion, codigo_calle, nombre_calle,
                        codigo_cruce, nombre_cruce, codigo_partido, localidad):
        self.assertTrue(isinstance(direccion, Direccion))
        self.assertEqual(direccion.tipo, CALLE_Y_CALLE)
        self.assertEqual(direccion.calle.codigo, codigo_calle)
        self.assertEqual(direccion.calle.nombre, nombre_calle)
        self.assertEqual(direccion.cruce.codigo, codigo_cruce)
        self.assertEqual(direccion.cruce.nombre, nombre_cruce)
        self.assertEqual(direccion.partido.codigo, codigo_partido)
        self.assertEqual(direccion.localidad, localidad)

    def testCalleInexistente01(self):
        self.assertRaises(ErrorCalleInexistente, self.nd.normalizar,
                          'Elm street y Roque Sáenz Peña')

    def testCalleInexistente02(self):
        self.assertRaises(ErrorCruceInexistente, self.nd.normalizar,
                          'Roque Sáenz Peña y kokusai dori')

    def testCalle1UnicaCalle2UnicaCruceInexistente(self):
        try:
            self.nd.normalizar('Mateo Bootz y pavon')
        except Exception as e:
            self.assertTrue(isinstance(e, ErrorCruceInexistente))

    def testCalle1MuchasCalle2MuchasCruceInexistente(self):
        try:
            self.nd.normalizar('saenz peña y gaspar campos')
        except Exception as e:
            self.assertTrue(isinstance(e, ErrorCruceInexistente))

    def testCalle1UnicaCalle2UnicaCruceExistente(self):
        res = self.nd.normalizar('Suecia y libano')
        self.assertTrue(isinstance(res, list))
        self.assertEqual(len(res), 1, 'Deberia haber un unico matching')
        self._checkDireccion(res[0], 182539, 'Suecia', 231716, 'Líbano',
                             'jose_c_paz', 'José C. Paz')

    def testCalle1UnicaCalle2MuchasCruceExistenteUnico(self):
        res = self.nd.normalizar('líbano y Avenida')
        self.assertTrue(isinstance(res, list))
        self.assertEqual(len(res), 1, 'Deberia haber un unico matching')
        self._checkDireccion(res[0], 231716, 'Líbano', 78155,
                             'Avenida Croacia', 'jose_c_paz', 'José C. Paz')

    def testCalle1MuchasCalle2UnicaCruceExistenteUnico(self):
        res = self.nd.normalizar('Avenida y líbano')
        self.assertTrue(isinstance(res, list))
        self.assertEqual(len(res), 1, 'Deberia haber un unico matching')
        self._checkDireccion(res[0], 78155, 'Avenida Croacia', 231716,
                             'Líbano', 'jose_c_paz', 'José C. Paz')

    def testCalleConY01(self):
        res = self.nd.normalizar('Arias y Gelly y Obes')
        self.assertTrue(isinstance(res, list))
        self.assertEqual(len(res), 1, 'Deberia haber un unico matching')
        self._checkDireccion(res[0], 77242, 'Coronel Arias', 77481,
                             'Gelly y Obes', 'jose_c_paz', 'José C. Paz')

    def testCalleConY02(self):
        res = self.nd.normalizar('Gelly y Obes y Arias')
        self.assertTrue(isinstance(res, list))
        self.assertEqual(len(res), 1, 'Deberia haber un unico matching')
        self._checkDireccion(res[0], 77481, 'Gelly y Obes', 77242,
                             'Coronel Arias', 'jose_c_paz', 'José C. Paz')

    def testCalleConY03(self):
        res = self.nd.normalizar('Gel y Ob y Coronel Arias')
        self.assertTrue(isinstance(res, list))
        self.assertEqual(len(res), 1, 'Deberia haber un unico matching')
        self._checkDireccion(res[0], 77481, 'Gelly y Obes', 77242,
                             'Coronel Arias', 'jose_c_paz', 'José C. Paz')

    def testCalleConYParcial01(self):
        res = self.nd.normalizar('Arias y Gel y Ob')
        self.assertTrue(isinstance(res, list))
        self.assertEqual(len(res), 1, 'Deberia haber un unico matching')
        self._checkDireccion(res[0], 77242, 'Coronel Arias', 77481,
                             'Gelly y Obes', 'jose_c_paz', 'José C. Paz')

    def testDireccionSeparadaPorE01(self):
        res = self.nd.normalizar('pinero e iglesia')
        self.assertTrue(isinstance(res, list))
        self.assertEqual(len(res), 1, 'Deberia haber un unico matching')
        self._checkDireccion(res[0], 53491, 'Piñero', 53648, 'Iglesias',
                             'jose_c_paz', 'José C. Paz')

    def testCalle1MuchasCalle2MuchasCruceExistenteMulti(self):
        res = self.nd.normalizar('santiago y are')
        self.assertTrue(isinstance(res, list))
        self.assertEqual(len(res), 2, 'Deberia haber 2 matchings')
        self._checkDireccion(res[0], 53658, 'Santiago de Compostela', 53565,
                             'Gral Arenales', 'jose_c_paz', 'José C. Paz')
        self._checkDireccion(res[1], 77662, 'Santiago L. Copello', 53565,
                             'Gral Arenales', 'jose_c_paz', 'José C. Paz')

    def testCalleConE02(self):
        res = self.nd.normalizar('José E. Rodó y Paula Albarracín')
        self.assertTrue(isinstance(res, list))
        self.assertEqual(len(res), 1, 'Deberia haber 1 matchings')
        self._checkDireccion(res[0], 78817, 'José E. Rodó', 52665,
                             'Paula Albarracín', 'jose_c_paz', 'José C. Paz')

    def testDireccionSeparadaPorECalleNoEmpiezaConI(self):
        self.assertRaises(ErrorCalleInexistente, self.nd.normalizar,
                          'miranda e arregui')
Ejemplo n.º 7
0
 def testCallejero_callejero_inexistent(self):
     p = Partido('jose_paz', 'José C. Paz', 'Partido de José C. Paz',
                 2430431)
     self.assertRaises(ValueError, Callejero, p)
Ejemplo n.º 8
0
class CallejeroTestCase(unittest.TestCase):
    p = Partido('jose_c_paz', 'José C. Paz', 'Partido de José C. Paz', 2430431)
    c = Callejero(p)
    cargarCallejeroEstatico(c)

    p = Partido('general_san_martin', 'General San Martin',
                'Partido de General San Martin', 1719022)
    c_san_martin = Callejero(p)
    cargarCallejeroEstatico(c_san_martin)

    def _checkCalle(self, calle, codigo, nombre, codigo_partido, localidad):
        self.assertTrue(isinstance(calle, Calle))
        self.assertEqual(calle.codigo, codigo)
        self.assertEqual(calle.nombre, nombre)
        self.assertEqual(calle.partido.codigo, codigo_partido)
        self.assertEqual(calle.localidad, localidad)

    def testCallejero_callejero_inexistent(self):
        p = Partido('jose_paz', 'José C. Paz', 'Partido de José C. Paz',
                    2430431)
        self.assertRaises(ValueError, Callejero, p)

    def testCallejero_buscarCalle_calle_inexistente(self):
        res = self.c.buscarCalle('kokusai dori')
        self.assertTrue(isinstance(res, list))
        self.assertEqual(len(res), 0, 'No debería haber matching.')

    def testCallejero_buscarCalle_unica_calle_existente(self):
        res = self.c.buscarCalle('Santiago de Compostela')
        self.assertTrue(isinstance(res, list))
        self.assertEqual(len(res), 1, 'Debería haber 1 solo matching.')
        self._checkCalle(res[0], 53658, 'Santiago de Compostela', 'jose_c_paz',
                         'José C. Paz')

    def testCallejero_buscarCalle_nombre_permutado(self):
        res = self.c.buscarCalle('Compostela Santiago de')
        self.assertTrue(isinstance(res, list))
        self.assertEqual(len(res), 1, 'Debería haber 1 solo matching.')
        self._checkCalle(res[0], 53658, 'Santiago de Compostela', 'jose_c_paz',
                         'José C. Paz')

    def testCallejero_buscarCalle_nombre_incompleto(self):
        res = self.c.buscarCalle('Compos Santi')
        self.assertTrue(isinstance(res, list))
        self.assertEqual(len(res), 1, 'Debería haber 1 solo matching.')
        self._checkCalle(res[0], 53658, 'Santiago de Compostela', 'jose_c_paz',
                         'José C. Paz')

    def testCallejero_buscarCalle_nombre_con_acento_y_case(self):
        res = self.c.buscarCalle('PoToSÍ')
        self.assertTrue(isinstance(res, list))
        self.assertEqual(len(res), 1, 'Debería haber 1 solo matching.')
        self._checkCalle(res[0], 341221, 'Potosí', 'jose_c_paz', 'José C. Paz')

    def testCallejero_buscarCalle_nombre_con_enie(self):
        res = self.c.buscarCalle('Roque Saenz Peña')
        self.assertTrue(isinstance(res, list))
        self.assertEqual(len(res), 1, 'Debería haber 1 matching.')
        self._checkCalle(res[0], 77440, 'Roque Sáenz Peña', 'jose_c_paz',
                         'José C. Paz')

    def testCallejero_buscarCalle_multiples_calles_existentes(self):
        res = self.c.buscarCalle('San')
        self.assertTrue(isinstance(res, list))
        self.assertEqual(len(res), 16, 'Debería haber 16 matchings.')
        resCalles = [
            'San Lorenzo', 'San Nicolás', 'San Blas', 'San Salvador',
            'San Luis', 'San Marino', 'San Agustín', 'Santiago del Estero',
            'Santiago de Compostela', 'Santiago L. Copello', 'Santa Marta',
            'Santo Domingo', 'Santa Ana', 'Santiago de Liniers', 'Santa María',
            'Santiago Davobe'
        ]
        for calle in res:
            self.assertTrue(isinstance(calle, Calle))
            self.assertTrue(calle.nombre in resCalles)

    def testCallejero_buscarCalle_calles_con_y_01(self):
        res = self.c.buscarCalle('Gelly y Obes')
        self.assertTrue(isinstance(res, list))
        self.assertEqual(len(res), 1, 'Debería haber 1 matchings.')
        self._checkCalle(res[0], 77481, 'Gelly y Obes', 'jose_c_paz',
                         'José C. Paz')

        res = self.c.buscarCalle('g y o')
        self.assertTrue(isinstance(res, list))
        self.assertEqual(len(res), 1, 'Debería haber 1 matchings.')
        self._checkCalle(res[0], 77481, 'Gelly y Obes', 'jose_c_paz',
                         'José C. Paz')

    def testCallejero_buscarCalle_calles_con_y_02(self):
        res = self.c.buscarCalle('Vicente López y Planes')
        self.assertTrue(isinstance(res, list))
        self.assertEqual(len(res), 1, 'Debería haber 1 matchings.')
        self._checkCalle(res[0], 11702, 'Vicente López y Planes', 'jose_c_paz',
                         'José C. Paz')

    def testCallejero_buscarCalle_calles_con_e_01(self):
        res = self.c.buscarCalle('Jose e Rodo')
        self.assertTrue(isinstance(res, list))
        self.assertEqual(len(res), 1, 'Debería haber 1 matching.')
        self._checkCalle(res[0], 78817, 'José E. Rodó', 'jose_c_paz',
                         'José C. Paz')

    def testCallejero_buscarCodigo_codigo_valido(self):
        res = self.c.buscarCodigo(314724)
        self.assertTrue(isinstance(res, list))
        self.assertTrue(res[0][0] == 314724)
        self.assertTrue(
            res[0][1] == 'Avenida Derqui (M) / Fray Antonio Marchena (JCP)')

    def testCallejero_buscarCodigo_codigo_invalido(self):
        res = self.c.buscarCodigo(666)
        self.assertTrue(res == [])

    def testCallejero_buscarCalle_sinonimos_01(self):
        res1 = self.c.buscarCalle('11')
        self.assertTrue(isinstance(res1, list))
        self.assertEqual(len(res1), 1, 'Debería haber 1 matching.')
        res2 = self.c.buscarCalle('once')
        self.assertTrue(isinstance(res2, list))
        self.assertEqual(len(res2), 1, 'Debería haber 1 matching.')
        self.assertEqual(res1[0].codigo, res2[0].codigo)

    def testCallejero_buscarCalle_sinonimos_02(self):
        res1 = self.c.buscarCalle(
            '3')  # 3 de Febrero, Tres Sargentos y Las Tres Marías
        self.assertTrue(isinstance(res1, list))
        self.assertEqual(len(res1), 3, 'Debería haber 1 matching.')
        self.assertTrue(res1[0].codigo in [78879, 53341, 237007])
        self.assertTrue(res1[1].codigo in [78879, 53341, 237007])
        self.assertTrue(res1[2].codigo in [78879, 53341, 237007])

    def testCallejero_buscarCalle_muchos_espacios(self):
        res = self.c.buscarCalle('  puerto    principe         ')
        self.assertTrue(isinstance(res, list))
        self.assertEqual(len(res), 1, 'Debería haber 1 matching.')
        self._checkCalle(res[0], 183044, 'Puerto Príncipe', 'jose_c_paz',
                         'José C. Paz')

    def testCallejero_buscarCalle_calle_con_parentesis(self):
        res = self.c.buscarCalle('Coliqueo (JCP)')
        self.assertTrue(isinstance(res, list))
        self.assertEqual(len(res), 1, 'Debería haber 1 matching.')
        self._checkCalle(res[0], 186501,
                         'Intendente Arricau (SM) / Cacique Coliqueo (JCP)',
                         'jose_c_paz', 'José C. Paz')

    def testCallejero_buscarCalle_caracteres_raros(self):
        res = self.c.buscarCalle(
            'puerto principe |°¬!#$%&/()=?\¿¡*¸+~{[^}]\'`-_.:,;<>·@')
        self.assertTrue(isinstance(res, list))
        self.assertEqual(len(res), 1, 'Debería haber 1 matching.')
        self._checkCalle(res[0], 183044, 'Puerto Príncipe', 'jose_c_paz',
                         'José C. Paz')

    def testCallejero_buscarCalle_calle_con_acente_escrito_sin_acento(self):
        res = self.c.buscarCalle('potosi')
        self.assertTrue(isinstance(res, list))
        self.assertEqual(len(res), 1, 'Debería haber 1 matching.')
        self._checkCalle(res[0], 341221, 'Potosí', 'jose_c_paz', 'José C. Paz')

    def testCallejero_buscarCalle_calle_con_numeros(self):
        res = self.c_san_martin.buscarCalle('26 de Julio de 1890')
        self.assertTrue(isinstance(res, list))
        self.assertEqual(len(res), 1, 'Debería haber 1 matching.')
        self._checkCalle(res[0], 70996, '103 - 26 de Julio de 1890',
                         'general_san_martin', 'General San Martín')
class NormalizadorDireccionesTestCase(unittest.TestCase):
    p = Partido('jose_c_paz', 'José C. Paz', 'Partido de José C. Paz', 2430431)
    nd = NormalizadorDirecciones(p)
    cargarCallejeroEstatico(nd.c)

    def _checkCalle(self, calle, codigo, nombre, codigo_partido, localidad):
        self.assertTrue(isinstance(calle, Calle))
        self.assertEqual(calle.codigo, codigo)
        self.assertEqual(calle.nombre, nombre)
        self.assertEqual(calle.partido.codigo, codigo_partido)
        self.assertEqual(calle.localidad, localidad)

    def testNormalizador_nomalizar_calle_inexistente(self):
        self.assertRaises(ErrorCalleInexistente, self.nd.normalizar,
                          'kokusai dori')

    def testNormalizador_normalizar_unica_calle_existente(self):
        res = self.nd.normalizar('Santiago de Compostela')
        self.assertTrue(isinstance(res, list))
        self.assertEqual(len(res), 1, 'Debería haber 1 solo matching.')
        self._checkCalle(res[0], 53658, 'Santiago de Compostela', 'jose_c_paz',
                         'José C. Paz')

    def testNormalizador_normalizar_nombre_permutado(self):
        res = self.nd.normalizar('Compostela Santiago de')
        self.assertTrue(isinstance(res, list))
        self.assertEqual(len(res), 1, 'Debería haber 1 solo matching.')
        self._checkCalle(res[0], 53658, 'Santiago de Compostela', 'jose_c_paz',
                         'José C. Paz')

    def testNormalizador_normalizar_nombre_incompleto(self):
        res = self.nd.normalizar('Compos Santi')
        self.assertTrue(isinstance(res, list))
        self.assertEqual(len(res), 1, 'Debería haber 1 solo matching.')
        self._checkCalle(res[0], 53658, 'Santiago de Compostela', 'jose_c_paz',
                         'José C. Paz')

    def testNormalizador_normalizar_nombre_con_acento_y_case(self):
        res = self.nd.normalizar('PoToSÍ')
        self.assertTrue(isinstance(res, list))
        self.assertEqual(len(res), 1, 'Debería haber 1 solo matching.')
        self._checkCalle(res[0], 341221, 'Potosí', 'jose_c_paz', 'José C. Paz')

    def testNormalizador_normalizar_nombre_con_enie(self):
        res = self.nd.normalizar('Roque Saenz Peña')
        self.assertTrue(isinstance(res, list))
        self.assertEqual(len(res), 1, 'Debería haber 1 matching.')
        self._checkCalle(res[0], 77440, 'Roque Sáenz Peña', 'jose_c_paz',
                         'José C. Paz')

    def testNormalizador_normalizar_multiples_calles_existentes(self):
        res = self.nd.normalizar('San')
        self.assertTrue(isinstance(res, list))
        self.assertEqual(len(res), 10, 'Debería haber 10 matchings.')
        resCalles = [
            'San Lorenzo', 'San Nicolás', 'San Blas', 'San Salvador',
            'San Luis', 'San Marino', 'San Agustín', 'Santiago del Estero',
            'Santiago de Compostela', 'Santiago L. Copello'
        ]
        for calle in res:
            self.assertTrue(isinstance(calle, Calle))
            self.assertTrue(calle.nombre in resCalles)

    def testNormalizador_normalizar_calles_con_y_01(self):
        res = self.nd.normalizar('Gelly y Obes')
        self.assertTrue(isinstance(res, list))
        self.assertEqual(len(res), 1, 'Debería haber 1 matchings.')
        self._checkCalle(res[0], 77481, 'Gelly y Obes', 'jose_c_paz',
                         'José C. Paz')

    def testNormalizador_normalizar_calles_con_y_03(self):
        res = self.nd.normalizar('Vicente López y Planes')
        self.assertTrue(isinstance(res, list))
        self.assertEqual(len(res), 1, 'Debería haber 1 matchings.')
        self._checkCalle(res[0], 11702, 'Vicente López y Planes', 'jose_c_paz',
                         'José C. Paz')

    def testNormalizador_buscarCalle_calles_con_e_01(self):
        res = self.nd.normalizar('Jose e Rodo')
        self.assertTrue(isinstance(res, list))
        self.assertEqual(len(res), 1, 'Debería haber 1 matching.')
        self._checkCalle(res[0], 78817, 'José E. Rodó', 'jose_c_paz',
                         'José C. Paz')

    def testNormalizador_normalizar_sinonimos_01(self):
        res1 = self.nd.normalizar('11')
        self.assertTrue(isinstance(res1, list))
        self.assertEqual(len(res1), 1, 'Debería haber 1 matching.')
        res2 = self.nd.normalizar('once')
        self.assertTrue(isinstance(res2, list))
        self.assertEqual(len(res2), 1, 'Debería haber 1 matching.')
        self.assertEqual(res1[0].codigo, res2[0].codigo)

    def testNormalizador_normalizar_sinonimos_02(self):
        res = self.nd.normalizar(
            '3')  # 3 de Febrero, Tres Sargentos y Las Tres Marías
        self.assertTrue(isinstance(res, list))
        self.assertEqual(len(res), 3, 'Debería haber 1 matching.')
        self.assertTrue(res[0].codigo in [78879, 53341, 237007])
        self.assertTrue(res[1].codigo in [78879, 53341, 237007])
        self.assertTrue(res[2].codigo in [78879, 53341, 237007])

    def testNormalizador_normalizar_muchos_espacios(self):
        res = self.nd.normalizar('  puerto    principe         ')
        self.assertTrue(isinstance(res, list))
        self.assertEqual(len(res), 1, 'Debería haber 1 matching.')
        self._checkCalle(res[0], 183044, 'Puerto Príncipe', 'jose_c_paz',
                         'José C. Paz')

    def testNormalizador_normalizar_calle_con_parentesis(self):
        res = self.nd.normalizar('Coliqueo (JCP)')
        self.assertTrue(isinstance(res, list))
        self.assertEqual(len(res), 1, 'Debería haber 1 matching.')
        self._checkCalle(res[0], 186501,
                         'Intendente Arricau (SM) / Cacique Coliqueo (JCP)',
                         'jose_c_paz', 'José C. Paz')

    def testNormalizador_normalizar_caracteres_raros(self):
        res = self.nd.normalizar(
            'puerto principe |°¬!#$%&/()=?\¿¡*¸+~{[^}]\'`-_.:,;<>·@')
        self.assertTrue(isinstance(res, list))
        self.assertEqual(len(res), 1, 'Debería haber 1 matching.')
        self._checkCalle(res[0], 183044, 'Puerto Príncipe', 'jose_c_paz',
                         'José C. Paz')

    def testNormalizador_normalizar_calles_como_av_o_pje(self):
        casos = [
            'Avenida Arribeños', 'Arribeños avenida', 'Arribeños avda',
            'AV. Arribeños', 'Pasaje Arribeños', 'Psje. Arribeños',
            'Arribeños pje'
        ]
        for caso in casos:
            res = self.nd.normalizar(caso)
            self.assertTrue(isinstance(res, list))
            self.assertEqual(len(res), 1, 'Debería haber 1 matching.')
            self._checkCalle(res[0], 79350, 'Arribeños', 'jose_c_paz',
                             'José C. Paz')