Example #1
0
    def test_parse(self):
        response = fake_response_from_file('citybeerstore.html', self.spider.start_urls[0])
        results = self.spider.parse(response)
        names = [i['name'] for i in results]
        print repr(names)

        self.assertEqual(names, self.expected)
Example #2
0
	def test_parse(self):
		results = self.spider.parse(fake_response_from_file('samples/wiprodigital_index.html', 'http://wiprodigital.com'))
		
		for r in results:
			if type(r) is SiteMapItem:
				item = r

		# testing that the URLs are represented as a set is a bit iffy and too close to the implementation; we may want to think about converting everything to lists, or iterating through to compare contents
		sample_results = {
			'external_links': set([
					'http://subdomain.subdomain.wiprodigital.com/4',
                    'http://external.com/3',
                    'https://external.com/1'
			]),
			'images': set([
					'http://wiprodigital.com/imgpath/2.jpg',
			        'http://11689-presscdn-0-83.pagely.netdna-cdn.com/wp-content/uploads/2015/09/WD_logo_150X27.png'
			]),
			'internal_links': set([
					'http://wiprodigital.com/2',
                    'http://wiprodigital.com/',
                    'http://wiprodigital.com/#section-1',
                    'http://wiprodigital.com/#section-2'
			]),
			'url': 'http://wiprodigital.com'
		}
		
		self.assertEqual(item, sample_results)
Example #3
0
    def test_get_next_playing_page_info(self):
        response = fake_response_from_file('now.html', 'http://eiga.com/now/')
        (next_page_no,
         next_page_url) = self.spider.get_next_playing_page_info(response)

        self.assertEqual(next_page_no, 2)
        self.assertEqual(next_page_url, 'http://eiga.com/now/all/release/2/')
Example #4
0
    def test_parse_one_scheduled_page(self):
        response = fake_response_from_file('coming.html',
                                           'http://eiga.com/coming/')
        movie_ids = {
            "79353", "82706", "83875", "84631", "84477", "85056", "84451",
            "84614", "84834", "84892", "84842", "85140", "84500", "85205",
            "46697", "84600", "85066", "81783", "84978", "85160", "83801",
            "85097", "83738", "83222", "84186", "84847", "85178", "84841",
            "84844", "84836", "84848", "84846", "82996", "82020", "84851",
            "84858", "84843", "84855", "83980", "81388", "84837", "83938",
            "84802", "85114", "82812", "84298", "85212", "84824", "8002",
            "9134", "84796", "84719", "84971", "83015", "84953", "83951",
            "30164", "84831", "84774", "84954", "84912", "84838", "84832",
            "84830", "84854", "81507", "84852", "84850", "79978", "82152",
            "84480", "84827", "83238", "83642", "83151", "83981", "80040",
            "83904", "83158", "82363", "84839", "84632", "83941", "81042",
            "82938", "84849", "84856"
        }
        results = self.spider.parse_one_scheduled_page(response)

        for m in results:
            self.assertFalse(m['in_theater'])

        parsed_ids = [m['id'] for m in results]
        self.assertEqual(len(parsed_ids), len(movie_ids))
        self.assertEqual(set(parsed_ids), movie_ids)
Example #5
0
    def test_get_next_playing_page_info_on_last_page(self):
        response = fake_response_from_file('now_18.html',
                                           'http://eiga.com/now/')
        (next_page_no,
         next_page_url) = self.spider.get_next_playing_page_info(response)

        self.assertEqual(next_page_no, -1)
        self.assertEqual(next_page_url, None)
    def test_parse(self):
        results_generator = self.spider.parse(
            fake_response_from_file('contrataciones.html'))

        first_yielded_result = results_generator.next()
        exp_body = 'procedimientotipo=0&q=&rubro=&pagina=1&procedimiento=&novigentes=1&organismo=&procedimientoanio=2015'

        self.assertEqual(first_yielded_result.body, exp_body)
    def test_parse_generates_objects_correctly(self):
        results = self.spider.parse(fake_response_from_file('/costco.html'))

        self.assertTrue(type(results) is list)
        self.assertEqual(38, len(results))
        self.assertTrue(type(results[0] is dict))
        self.assertEqual('Kirkland Signature Organic Ethiopia Whole Bean Coffee, 2 lbs., 2-count', results[0]["name"])
        self.assertEqual('$39.99', results[0]["price"])
        self.assertEqual('costco', results[0]["seller"])
Example #8
0
    def test_parse_generates_objects_correctly(self):
        results = self.spider.parse(fake_response_from_file('/amazon.html'))

        self.assertTrue(type(results) is list)
        self.assertEqual(3, len(results))
        self.assertTrue(type(results[0] is dict))
        self.assertEqual('Pace Medium Chunky Salsa, 64 Ounce',
                         results[0]["name"])
        self.assertEqual(None, results[0]["price"])
        self.assertEqual('amazon', results[0]["seller"])
Example #9
0
    def test_parse_one_playing_page(self):
        response = fake_response_from_file('now.html', 'http://eiga.com/now/')
        movie_ids = {
            "82416", "83989", "84660", "84613", "83940", "83401", "82200",
            "81957", "83984", "85051", "82859", "84894", "85040", "85204",
            "85065", "85130", "85029", "81531", "79719", "82707"
        }
        results = self.spider.parse_one_playing_page(response)

        for m in results:
            self.assertTrue(m['in_theater'])

        parsed_ids = [m['id'] for m in results]
        self.assertEqual(len(parsed_ids), 20)
        self.assertEqual(set(parsed_ids), movie_ids)
    def test_parse_filter(self):
        results_generator = self.spider.parse_filter(
            fake_response_from_file('sgp_filter.html',
                                    request_meta=self.request_meta))

        first_yielded_result = results_generator.next()

        self.assertEqual(first_yielded_result.url,
                         'http://www.sgp.gob.ar/sitio/empleo/regimenes/contratados/listadocontratados/todos_los_contratos_mensuales/02345_200004_rcpc_todoa.html')

        self.assertEqual(first_yielded_result.meta[
                         'organismo'], 'Administración General de Puertos S E')
        self.assertEqual(first_yielded_result.meta[
                         'modalidad'], "Decreto N° 2.345/08")
        self.assertEqual(first_yielded_result.meta[
                         'jurisdiccion'], "Ministerio de Transporte")
    def test_parse(self):
        results_generator = self.spider.parse(
            fake_response_from_file('sgp_index.html'))

        first_yielded_result = results_generator.next()

        self.assertEqual(first_yielded_result.url,
                         "http://www.sgp.gob.ar/sitio/empleo/regimenes/contratados/listadocontratados/todos_los_contratos_mensuales/02345_200004_index_rcpc.html")

        self.assertEqual(first_yielded_result.meta[
                         'organismo'], 'Administración General de Puertos S E')
        self.assertEqual(first_yielded_result.meta[
                         'modalidad'], "Decreto N° 2.345/08")
        self.assertEqual(first_yielded_result.meta[
                         'jurisdiccion'], "Ministerio de Transporte")
                         
        # Al pasarlo a lista se consume el resto de los valores del generator.
        # Sumo 1 porque el primero ya lo verificamos arriba
        self.assertEqual(len(list(results_generator)) + 1, 5)
    def test_parse_people(self):
        results_generator = self.spider.parse_people(
            fake_response_from_file('sgp_people.html',
                                    request_meta=self.request_meta))

        first_yielded_result = results_generator.next()
        expected_first_person = {
            'apellido': ' Cordero',
            'contrato': '0040E2015',
            'cuit': '20-07576779-0',
            'dedicacion': '100%',
            'desde': '01/07/2015',
            'hasta': '31/12/2015',
            'jurisdiccion': 'Ministerio de Transporte',
            'modalidad': "Decreto N° 2.345/08",
            'nombre': 'Jose Luis',
            'observacion': 'RE-En tramite-01/07/2015',
            'organismo': 'Administración General de Puertos S E',
            'tipo': 'Serv.'
        }
        self.assertEqual(first_yielded_result, expected_first_person)

        last_yielded_result = results_generator.next()
        expected_second_person = {
            'apellido': ' Schwarz',
            'contrato': '0041E2015',
            'cuit': '20-08186164-2',
            'dedicacion': '100%',
            'desde': '01/07/2015',
            'hasta': '31/12/2015',
            'jurisdiccion': 'Ministerio de Transporte',
            'modalidad': "Decreto N° 2.345/08",
            'nombre': 'Eduardo Alberto',
            'observacion': 'RE-En tramite-01/07/2015',
            'organismo': 'Administración General de Puertos S E',
            'tipo': 'Serv.'
        }
        self.assertEqual(last_yielded_result, expected_second_person)

        # Como ya consumi los dos unicos valores, la cantidad de valores en el
        # generator deberia ser 0 ahora
        self.assertEqual(len(list(results_generator)) + 2, 2)
 def setUp(self):
     fake_response = fake_response_from_file('fixtures/compose.html')
     self.scraper = ClusterScraper(fake_response)
    def test_contrataciones_page(self):
        results_generator = self.spider.parse_pagina_contratacion(
            fake_response_from_file('contratacion_320834.html'))
        
        results = list(results_generator)

        expected_results = [
            {u'clase': u'De etapa \xc3\xbanica nacional',
            'estado': 'orden_de_compra',
            'id': 'ID_CONTRATACION',
            'id_organismo': u'250',
            'id_procedimiento': u'2/2012',
            'id_unidad_operativa': u'DEPARTAMENTO COMPRAS Y SUMINISTROS',
            u'modalidad': u'Sin Modalidad',
            u'objeto': u'SERVICIO DE CORREO',
            'organismo': u'CAJA DE RETIROS, JUB. Y PENS. DE LA POLICIA FEDERAL',
            'procedimiento': u'Licitaci\xc3\xb3n P\xc3\xbablica',
            u'rubros': u'SERVICIOS BASICOS',
            'unidad_operativa': u'0022/000'},
            {u'autoridad': u'SILVIA DJENDEREDJIAN - GUIDO TOMAS DE VARGAS CARDOSO',
            'contratacion_id': 'ID_CONTRATACION',
            u'dependencia': u'CAJA DE RETIROS, JUBILACIONES Y PENSIONES DE LA POLIC\xc3\ufffdA FEDERAL.-',
            u'fecha': u'2012/09/03 00:00',
            u'firmante': u'SILVIA DJENDEREDJIAN - GUIDO TOMAS DE VARGAS CARDOSO'},
            {'cuit': u'30536259194',
            'forma_garantia': u'POLIZA DE CAUCION',
            'id_apertura': 'ID_CONTRATACION',
            'monto_garantia': u'55000',
            'monto_oferta': u'550.3',
            'numero': u'1',
            'razon_social': u'ORGANIZACION COORDINADORA ARGENTINA S.R.L.'},
            {'cuit': u'30708574836',
            'forma_garantia': u'POLIZA DE CAUCION',
            'id_apertura': 'ID_CONTRATACION',
            'monto_garantia': u'50000',
            'monto_oferta': u'1270.98',
            'numero': u'2',
            'razon_social': u'CORREO OFICIAL DE LA REPUBLICA ARGENTINA S.A.'},
            {'aut_compenente': u'DR JUAN CARLOS SIRO PITTANO - DIRECTOR G',
            'dependencia': u'CAJA DE RETIROS, JUBILACIONES Y PENSIONE',
            'ejercicio': u'2012',
            'fecha': u'10/10/2012',
            'id': 'ID_CONTRATACION',
            'modo': u'1',
            'num': u'15',
            'obs_grales': u'VER ARCHIVO ADJUNTO.-',
            'tipo_acto': u'Disposici\xc3\xb3n'},
            {'id_adjudicacion': 'ID_CONTRATACION',
            'id_proveedor': u'30536259194',
            'monto': u'318.6',
            'observaciones': u'',
            'razon_social': u'ORGANIZACION COORDINADORA ARGENTINA S.R.L.'},
            {'id_adjudicacion': 'ID_CONTRATACION',
            'id_proveedor': u'30708574836',
            'monto': u'1470.64',
            'observaciones': u'',
            'razon_social': u'CORREO OFICIAL DE LA REPUBLICA ARGENTINA SA'},
            {u'ejercicio': u'2012',
            'id': u'ID_CONTRATACION_30536259194',
            'id_contratacion': 'ID_CONTRATACION',
            u'id_proveedor': u'30536259194',
            u'num': u'25'},
            {u'ejercicio': u'2012',
            'id': u'ID_CONTRATACION_30708574836',
            'id_contratacion': 'ID_CONTRATACION',
            u'id_proveedor': u'30708574836',
            u'num': u'26'},
            {u'cantidad': u'1',
            u'especificacion': u'SERVICIO POSTAL; SERVICIO POSTAL -.',
            'id': u'ID_CONTRATACION_30536259194_1',
            'id_oc': u'ID_CONTRATACION_30536259194',
            u'precio_unit': u'5.4',
            u'renglon': u'1',
            u'total': u'5.4',
            u'total_iva': u'0'},
            {u'cantidad': u'1',
            u'especificacion': u'TELEGRAMAS; TELEGRAMA -.',
            'id': u'ID_CONTRATACION_30536259194_6',
            'id_oc': u'ID_CONTRATACION_30536259194',
            u'precio_unit': u'306.6',
            u'renglon': u'6',
            u'total': u'306.6',
            u'total_iva': u'0'},
            {u'cantidad': u'1',
            u'especificacion': u'SERVICIO POSTAL; SERVICIO POSTAL -.',
            'id': u'ID_CONTRATACION_30536259194_8',
            'id_oc': u'ID_CONTRATACION_30536259194',
            u'precio_unit': u'6.6',
            u'renglon': u'8',
            u'total': u'6.6',
            u'total_iva': u'0'},
            {u'cantidad': u'1',
            u'especificacion': u'SERVICIO POSTAL; SERVICIO POSTAL -.',
            'id': u'ID_CONTRATACION_30708574836_2',
            'id_oc': u'ID_CONTRATACION_30708574836',
            u'precio_unit': u'38.4',
            u'renglon': u'2',
            u'total': u'38.4',
            u'total_iva': u'0'},
            {u'cantidad': u'1',
            u'especificacion': u'SERVICIO POSTAL; SERVICIO POSTAL -.',
            'id': u'ID_CONTRATACION_30708574836_3',
            'id_oc': u'ID_CONTRATACION_30708574836',
            u'precio_unit': u'4.8',
            u'renglon': u'3',
            u'total': u'4.8',
            u'total_iva': u'0'},
            {u'cantidad': u'1',
            u'especificacion': u'SERVICIO POSTAL; SERVICIO POSTAL -.',
            'id': u'ID_CONTRATACION_30708574836_4',
            'id_oc': u'ID_CONTRATACION_30708574836',
            u'precio_unit': u'28.66',
            u'renglon': u'4',
            u'total': u'28.66',
            u'total_iva': u'0'},
            {u'cantidad': u'1',
            u'especificacion': u'SERVICIO POSTAL; SERVICIO POSTAL -.',
            'id': u'ID_CONTRATACION_30708574836_5',
            'id_oc': u'ID_CONTRATACION_30708574836',
            u'precio_unit': u'39.6',
            u'renglon': u'5',
            u'total': u'39.6',
            u'total_iva': u'0'},
            {u'cantidad': u'1',
            u'especificacion': u'SERVICIO POSTAL; SERVICIO POSTAL -.',
            'id': u'ID_CONTRATACION_30708574836_7',
            'id_oc': u'ID_CONTRATACION_30708574836',
            u'precio_unit': u'60',
            u'renglon': u'7',
            u'total': u'60',
            u'total_iva': u'0'},
            {u'cantidad': u'1',
            u'especificacion': u'SERVICIO POSTAL; SERVICIO POSTAL -.',
            'id': u'ID_CONTRATACION_30708574836_9',
            'id_oc': u'ID_CONTRATACION_30708574836',
            u'precio_unit': u'103.46',
            u'renglon': u'9',
            u'total': u'103.46',
            u'total_iva': u'0'},
            {u'cantidad': u'1',
            u'especificacion': u'SERVICIO POSTAL; SERVICIO POSTAL -.',
            'id': u'ID_CONTRATACION_30708574836_10',
            'id_oc': u'ID_CONTRATACION_30708574836',
            u'precio_unit': u'137.56',
            u'renglon': u'10',
            u'total': u'137.56',
            u'total_iva': u'0'},
            {u'cantidad': u'1',
            u'especificacion': u'SERVICIO POSTAL; SERVICIO POSTAL -.',
            'id': u'ID_CONTRATACION_30708574836_11',
            'id_oc': u'ID_CONTRATACION_30708574836',
            u'precio_unit': u'165.54',
            u'renglon': u'11',
            u'total': u'165.54',
            u'total_iva': u'0'},
            {u'cantidad': u'1',
            u'especificacion': u'TELEGRAMAS; TELEGRAMA -.',
            'id': u'ID_CONTRATACION_30708574836_12',
            'id_oc': u'ID_CONTRATACION_30708574836',
            u'precio_unit': u'892.62',
            u'renglon': u'12',
            u'total': u'892.62',
            u'total_iva': u'0'}
        ]
        
        self.assertEqual(len(results), len(expected_results))
        
        for (r,er) in zip(results, expected_results) :
            self.assertEqual(r, er)
Example #15
0
 def test_parse(self):
     results = self.spider.parse(
         fake_response_from_file('osdir/sample.html'))
     self._test_item_results(results, 10)
    def test_parse_search(self):
        results_generator = self.spider.parse_search(
            fake_response_from_file('test_unidades_operativas.html'))
        
        results = list(results_generator)

        expected_results = [
            {'direccion': u'27DEFEBRERO210BIS(OCAMPOYESMERALDA)',
            'email': u'*****@*****.**',
            'id': u'0440_000 - COMPRAS',
            'jurisdiccion': None,
            'localidad': u'ROSARIO - SANTA FE - Argentina',
            'pertenece_spn': False,
            'serv_adm_financiero': u'FUNDACION DEL INSTITUTO DE BIOLOGIA MOLECULAR Y CELULAR DE ROSARIO',
            'subjurisdiccion': None,
            'tel': u'54-341-4237070',
            'unidad_op_compra': u'0440_000 - COMPRAS'},
            {'direccion': u'BRASILN\xb055',
            'email': u'*****@*****.**',
            'id': u'0313_000 - DEPARTAMENTO DE COMPRAS Y CONTRATACIONES - ANSV',
            'jurisdiccion': u'30-MINISTERIO DEL INTERIOR Y TRANSPORTE',
            'localidad': u'SAN TELMO - CIUDAD DE BUENOS AIRES - Argentina',
            'pertenece_spn': True,
            'serv_adm_financiero': u'203-AGENCIA NACIONAL DE SEGURIDAD VIAL',
            'subjurisdiccion': u'00-MINISTERIO DEL INTERIOR Y TRANSPORTE',
            'tel': u'5295-2400INT1151-1138-1178',
            'unidad_op_compra': u'0313_000 - DEPARTAMENTO DE COMPRAS Y CONTRATACIONES - ANSV'},
            {'direccion': u'AV.PASEOCOLON533',
            'email': u'*****@*****.**',
            'id': u'0037_006 - ESCUELA SUPERIOR DE GENDARMERIA NACIONAL',
            'jurisdiccion': u'41-MINISTERIO DE SEGURIDAD',
            'localidad': u'SAN TELMO - CIUDAD DE BUENOS AIRES - Argentina',
            'pertenece_spn': True,
            'serv_adm_financiero': u'375-GENDARMERIA NACIONAL',
            'subjurisdiccion': u'05-GENDARMERIA NACIONAL',
            'tel': u'(11)5169-3319',
            'unidad_op_compra': u'0037_006 - ESCUELA SUPERIOR DE GENDARMERIA NACIONAL'},
            {'direccion': u'AV.LEANDRON.ALEM246',
            'email': u'*****@*****.**',
            'id': u'0081_002 - ADQUISICIONES Y COMPRAS',
            'jurisdiccion': None,
            'localidad': u'SAN NICOLAS - CIUDAD DE BUENOS AIRES - Argentina',
            'pertenece_spn': False,
            'serv_adm_financiero': u'MINISTERIO DEL INTERIOR Y TRANSPORTE - ARCHIVO GENERAL DE LA NACION',
            'subjurisdiccion': None,
            'tel': u'4342-2412',
            'unidad_op_compra': u'0081_002 - ADQUISICIONES Y COMPRAS'},
            {'direccion': u'ESMERALDA1212',
            'email': u'*****@*****.**',
            'id': u'0026_000 - DIRECCI\xd3N DE COMPRAS Y CONTRATACIONES',
            'jurisdiccion': u'35-MINISTERIO DE RELACIONES EXTERIORES Y CULTO',
            'localidad': u'RETIRO - CIUDAD DE BUENOS AIRES - Argentina',
            'pertenece_spn': True,
            'serv_adm_financiero': u'307-MINISTERIO DE RELACIONES EXTERIORES Y CULTO',
            'subjurisdiccion': u'00-MINISTERIO DE RELACIONES EXTERIORES Y CULTO',
            'tel': u'4819-7065',
            'unidad_op_compra': u'0026_000 - DIRECCI\xd3N DE COMPRAS Y CONTRATACIONES'},
            {'direccion': u'MU\xd1ECAS436',
            'email': u'*****@*****.**',
            'id': u'0102_006 - DEPARTAMENTO DE COMPRAS - FACULTAD DE DERECHO Y CIENCIAS SOCIALES',
            'jurisdiccion': u'70-MINISTERIO DE EDUCACION',
            'localidad': u'SAN MIGUEL DE TUCUMAN - TUCUMAN - Argentina',
            'pertenece_spn': True,
            'serv_adm_financiero': u'836-UNIVERSIDAD NACIONAL DE TUCUMAN ',
            'subjurisdiccion': u'00-MINISTERIO DE EDUCACION',
            'tel': u'0381-4219975-INT.40',
            'unidad_op_compra': u'0102_006 - DEPARTAMENTO DE COMPRAS - FACULTAD DE DERECHO Y CIENCIAS SOCIALES'},
            {'direccion': u'DR.MARIANOGONZALEZS/N',
            'email': u'*****@*****.**',
            'id': u'0040_024 - DEPARTAMENTO DE CONTRATACIONES COMODORO RIVADAVIA',
            'jurisdiccion': u'45-MINISTERIO DE DEFENSA',
            'localidad': u'COMODORO RIVADAVIA - CHUBUT - Argentina',
            'pertenece_spn': True,
            'serv_adm_financiero': u'381-FUERZA AEREA ARGENTINA',
            'subjurisdiccion': u'23-ESTADO MAYOR GENERAL DE LA FUERZA AEREA',
            'tel': u'0297-4064746',
            'unidad_op_compra': u'0040_024 - DEPARTAMENTO DE CONTRATACIONES COMODORO RIVADAVIA'},
            {'direccion': u'BELGRANO450',
            'email': u'*****@*****.**',
            'id': u'0306_000 - ADQUISICIONES Y CONTRATACIONES',
            'jurisdiccion': None,
            'localidad': u'SAN TELMO - CIUDAD DE BUENOS AIRES - Argentina',
            'pertenece_spn': False,
            'serv_adm_financiero': u'PROGRAMA DE SERVICIOS AGR\xcdCOLAS PROVINCIALES',
            'subjurisdiccion': None,
            'tel': u'43494656',
            'unidad_op_compra': u'0306_000 - ADQUISICIONES Y CONTRATACIONES'},
            {'direccion': u'ALICIAMOREAUDEJUSTO240',
            'email': u'*****@*****.**',
            'id': u'0146_000 - GCIA. DE ADMINISTRACI\xd3N Y ABASTECIMIENTO',
            'jurisdiccion': None,
            'localidad': u'PUERTO MADERO - CIUDAD DE BUENOS AIRES - Argentina',
            'pertenece_spn': False,
            'serv_adm_financiero': u'CAMUZZI GAS PAMPEANA S.A.',
            'subjurisdiccion': None,
            'tel': u'01157767000',
            'unidad_op_compra': u'0146_000 - GCIA. DE ADMINISTRACI\xd3N Y ABASTECIMIENTO'},
            {'direccion': u'25DEMAYO489',
            'email': u'*****@*****.**',
            'id': u'0191_000 - ABASTECIMIENTO',
            'jurisdiccion': None,
            'localidad': u'SAN NICOLAS - CIUDAD DE BUENOS AIRES - Argentina',
            'pertenece_spn': False,
            'serv_adm_financiero': u'INTEGRACI\xd3N EL\xc9CTRICA SUR ARGENTINA S.A.',
            'subjurisdiccion': None,
            'tel': u'03515263100',
            'unidad_op_compra': u'0191_000 - ABASTECIMIENTO'},
            {'direccion': u'AVDA.INDEPENDENCIAN\xba1800',
            'email': u'*****@*****.**',
            'id': u'0102_001 - FACULTAD DE CIENCIAS EXACTAS Y TECNOLOGIA',
            'jurisdiccion': u'70-MINISTERIO DE EDUCACION',
            'localidad': u'SAN MIGUEL DE TUCUMAN - TUCUMAN - Argentina',
            'pertenece_spn': True,
            'serv_adm_financiero': u'836-UNIVERSIDAD NACIONAL DE TUCUMAN ',
            'subjurisdiccion': u'00-MINISTERIO DE EDUCACION',
            'tel': u'3814107585INTERNO7585',
            'unidad_op_compra': u'0102_001 - FACULTAD DE CIENCIAS EXACTAS Y TECNOLOGIA'},
            {'direccion': u'AVENIDAROSALESN\xba597',
            'email': u'*****@*****.**',
            'id': u'0040_031 - DIRECCION DE INFRAESTRUCTURA',
            'jurisdiccion': u'45-MINISTERIO DE DEFENSA',
            'localidad': u'EL PALOMAR - BUENOS AIRES - Argentina',
            'pertenece_spn': True,
            'serv_adm_financiero': u'381-FUERZA AEREA ARGENTINA',
            'subjurisdiccion': u'23-ESTADO MAYOR GENERAL DE LA FUERZA AEREA',
            'tel': u'01147519568',
            'unidad_op_compra': u'0040_031 - DIRECCION DE INFRAESTRUCTURA'}
        ]
        
        self.assertEqual(len(results), len(expected_results))
        
        for (r,er) in zip(results, expected_results) :
            self.assertEqual(r, er)